PCs mit der Fritz Box fernsteuern

01.03.2006
Von Albert Lauchner
Der DSL-Router von AVM lässt sich zum Remote-Control-Gerät für Windows-PCs umrüsten.

Mit Wake on LAN (WoL) lassen sich selbst ausgeschaltete PCs über das Netzwerk hochfahren. Eine Erweiterung für die Fritz Box von AVM, ein Router mit integriertem DSL-Modem, ermöglicht den Fernstart und den Fernzugriff auf alle Dateien des PCs auch über das Breitbandnetz. Und dank Secure Shell (ssh) kommt die Sicherheit dabei nicht zu kurz.

Mehr zum Thema

www.computerwoche.de/go/

571445: Fritz Box als Least Cost Router;

567487: Fritz Box für Einsteiger;

572543: PC-Steuerung mit KVM-Gerät;

571602: Fernwartung zum Nulltarif.

Weitere Links auf Tecchannel.de:

Tuning und Hacks für die Fritz Box:

http://www.tecchannel.de/ server/linux/432803/.

Hier lesen Sie …

• was zu tun ist, um die Fritz!Box um Module für den Fernzugriff zu erweitern;

• was das integrierte Linux-System des DSL-Routers so alles bietet;

• wie man den Remote-PC per Wake on LAN hochfahren kann;

• wie Anwender die Fernsteuerung des Rechners absichern können.

Wer kennt das nicht: Man sitzt in der Firma und benötigt dringend Daten, die auf dem heimischen PC oder auf einem Rechner in einer Niederlassung des Unternehmens liegen: sei es eine Datei, eine E-Mail oder eine Internet-Seite aus den gespeicherten Favoriten. Ist keiner zu Hause, um den PC einzuschalten und zu bedienen, kommt man an die Daten nicht heran. Wer öfter einen Zugriff auf seinen PC aus der Ferne benötigt, mag sich überlegen, den PC rund um die Uhr durchlaufen zu lassen. Der Umweltaspekt sowie der hohe Verschleiß von mechanischen PC-Komponenten und thermisch beanspruchten Bauteilen sprechen jedoch dagegen.

Heutzutage beherrscht fast jeder halbwegs aktuelle Computer WoL. Damit kann der Administrator in Firmen die PCs starten und die darauf installierte Software updaten, wenn die Benutzer sie beispielsweise nachts nicht benötigen. Doch WoL verwendet spezielle Datenpakete, die die Fritz Box wie viele andere Router auch nicht über das Internet weiterleitet.

Remote-Desktop-Software

Ein Fernstart über das AVM-Produkt via Web scheidet daher zunächst aus. Doch es gibt einen Trick: Wenn man das Linux-Betriebssystem der Fritz-Box-DSL-Router um Module erweitert, lässt sich jeder angeschlossene PC aus der Ferne starten. Läuft auf dem Fernsystem eine Remote-Desktop-Software, kann der Nutzer anschließend mit dem PC arbeiten, als säße er direkt am Bildschirm. Dazu muss zunächst der telnet-Zugang auf der Fritz Box freigeschaltet sein (siehe Kasten "Mehr zum Thema").

Wake on LAN wurde entwickelt, um das Management der PCs in Firmen zu vereinfachen. Zum Fernstart eines PCs sendet der Administrator ein so genanntes Magic Packet über das Netzwerk. AMD hat diese Technik bereits 1995 entwickelt. Das Magic Packet kann direkt auf dem Ethernet-Rahmen aufsetzen und ist so aufgebaut, dass es im normalen Netzwerkalltag nicht auftritt.

Es enthält zunächst wie jedes Ethernet-Paket die MAC-Adresse des Ziels und des Empfängers sowie die Länge der darauf folgenden Daten. Im Datenteil muss dann an beliebiger Stelle sechsmal der Hexcode FF stehen. Darauf folgt 16-mal die Mac-Adresse des zu startenden Rechners.

Laut Definition kann dieser komplette Magic-Block irgendwo im Datenteil stehen. Somit ist es kein Problem, dieses Datenpaket in einem TCP/IP-Rahmen innerhalb des Ethernet-Frames unterzubringen und damit auch routebar zu machen.

Probleme mit dem Magic Packet

Doch in der Praxis ist das Routing des Magic Packets über das Internet Protocol nicht ganz so einfach:

• Ein ausgeschalteter Rechner, dessen Netzwerkkarte im Standby die Pakete analysiert, besitzt zwar eine in der Netzwerkkarte fest abgelegte MAC-Adresse. Er hat aber keine gültige IP-Adresse. Für einen DHCP-Server ist der Rechner offline, so dass er ihm zugewiesene IP-Adresse nach einer gewissen Zeit an einen anderen Computer weitergeben darf.

• Selbst wenn man feste IP-Adressen vergibt, läuft der Rechner meist im lokalen Netz und hat keine aus dem Internet erreichbare öffentliche IP-Adresse. Somit ist eine Port-Weiterleitung im DSL-Router nötig. Diese funktioniert aber nicht bei allen Routern, wenn die angesprochene IP-Adresse offline ist.

Manche DSL-Router - die Fritz Box zählt nicht dazu - gestatten es, alle UDP-Pakete aus dem Internet beispielsweise auf Port 9 als Broadcast in das gesamte lokale Netzwerk zu schicken. Doch schon allein aus Sicherheitsgründen sollte man so etwas ablehnen.

Die sicherste und eleganteste Lösung für all diese Schwierigkeiten ist es daher, das Magic Packet als Ethernet-Paket direkt im lokalen Netzwerk des einzuschaltenden Rechners zu erzeugen. Im Fall der Fritz Box ist dies auch kein Problem, da sie selbst diese Aufgabe übernehmen wird. Für den zur Fritz Box nötigen sicheren Zugang aus dem Internet wird ein ssh-Server installiert. Auf diese Weise lässt sich die Fritz Box extern über eine abgesicherte Internet-Verbindung konfigurieren.

Voraussetzungen für Wake on LAN

Bevor der Anwender versucht, den PC extern über das Internet zu starten, sollte er das passende Setup zunächst über einen zweiten PC im Netzwerk testen. Denn damit Wake on LAN funktioniert, müssen etliche Bedingungen erfüllt sein:

• Das Netzteil muss den PC selbst im ausgeschalteten Zustand mit einer Hilfsspannung (Standby-Spannung) versorgen. Dies ist bei Systemen, die nicht älter als vier Jahre sind, fast immer der Fall.

• Das BIOS des Rechners muss WoL aktivieren. Dies geschieht meist in den Power-Management-Optionen. Nicht immer taucht dabei die Netzwerkkarte als eigener Punkt auf. Mitunter verbirgt sich diese Einstellung unter "Power on by PCI Device".

Doch selbst diese Einstellungen genügen meist noch nicht: Als Nächstes sind unter Windows die Netzwerkkarten für WoL freizuschalten. Meist lässt sich dies über den Geräte-Manager im Menüpunkt "Energieverwaltung des Netzwerkadapters" erledigen. Ferner muss der Anwender die MAC-Adresse des PC in Erfahrung bringen. Hier bietet sich der Befehl ipconfig /all auf der Kommandozeile an.

WoL-Tools zum Testen

Wenn man jetzt den PC herunterfährt, sollte er für WoL bereit sein. Falls ein zweiter PC im Netzwerk steht, lässt sich das per WoL-Tools testen. Eines davon ist das Windows-Freeware-Tool WakeUp, das ohne GUI auf der Commandline arbeitet. Es benötigt beim Aufruf die MAC-Adresse des zu weckenden PCs und die Broadcast-Adresse des lokalen LAN, bei der Fritz Box typischerweise die 192.168.178.255.

Sowohl der BIOS-Eintrag als auch die Windows-Konfiguration setzen Register im LAN-Controller und im Chipsatz. Diese bleiben allerdings nur so lange erhalten, wie der PC mit der Hilfsspannung aus dem Netzteil versorgt wird. Wenn der Anwender den Rechner also beispielsweise mit einer Schaltleiste komplett vom Netz trennt, genügt es nicht, die Stromversorgung wiederherzustellen. Damit WoL anschließend funktioniert, muss der Benutzer den Computer erst einmal hoch- und wieder herunterfahren.

Funktioniert WoL von einem zweiten PC aus, ist der erste Start via Fritz Box keine große Kunst mehr. Der Router muss nach dem Start erst einmal ein Programm nachladen. Als Klassiker unter Linux kommt "etherwake" zum Versenden des Magic Packets zum Einsatz.

Im Folgenden werden die Einzelschritte der manuellen Installation beschrieben. Am Ende dieses Beitrags findet sich ein Script, das nach minimalen Anpassungen alle nötigen Schritte automatisch erledigt. Zum Verständnis und zur Anpassung des Routers sollte man dennoch zunächst den manuellen Weg gehen.

Der Benutzer loggt sich für einen ersten Test via telnet in die Fritz Box ein. Er wechselt in das Verzeichnis /var/tmp, das auf den Arbeitsspeicher der Box gemappt ist, und lädt mit "wget" das Programm etherwake herunter. Mit dem Unix-Kommando "chmod" muss er anschließend die Rechte auf ausführbar setzen.

cd /var/tmp

wget http://www.tecchannel.de/ download/432967/etherwake

chmod +x /var/tmp/etherwake

Zum Start eines PC benötigt etherwake neben der Option "-i" zwei weitere Parameter beim Aufruf, die MAC-Adresse und das zu benutzende Interface der Fritz Box. Bei der Fritz Box ata lautet dieses "intf". Ansonsten sind für das Netzwerk-Interface die Namen "eth0" und bei Boxen mit zwei LAN-Ports auch "eth1" vergeben. Im Laboraufbau des Autors startet die Fritz Box den Test-PC über

./etherwake -i eth0 00:0c:6e:93: 23:87

Nicht vergessen sollte der Anwender das "./" am Anfang, denn Linux startet Programme nur bei expliziter Pfadangabe.

Zwar kann der Anwender jetzt einen PC via telnet hochfahren. Doch bislang ist der Terminaldienst nur vom internen Netz aus erreichbar. Das sollte auch so bleiben, den das telnet-Programm ist unsicher: Es überträgt alle Informationen inklusive der Login-Daten unverschlüsselt. Wer telnet für den DSL-Anschluss nach außen freigibt, kann seine DSL-Kennung und die Passwörter für die VoIP-Provider auch gleich in Newsgroups posten.

Die moderne und sichere Version von telnet ist ssh. Doch von Haus aus beherrscht die Fritz Box kein ssh. Also gilt es zunächst, nach der bewährten Methode einen ssh-Server für die Fritz Box nachzuladen.

Als ssh-Server kam das Softwarepaket "Dropbear" zum Zuge. Mit folgenden Eingaben auf dem telnet-Prompt lädt der Anwender dieses Programm zunächst manuell zum Test auf die Fritz Box:

cd /var/tmp

wget http://www.tecchannel.de/ download/432967/dropbear

chmod +x /var/tmp/dropbear

Public/Private Keys

ssh arbeitet sowohl mit öffentlichen und privaten Schlüsseln (Public/Private Keys) zur gegenseitigen Authentifizierung von Clients und Servern als auch mit Passwörtern. Im Labortest wurde von folgendem Szenario ausgegangen: Der Anwender sitzt irgendwo auf der Welt und ist nicht darauf vorbereitet, auf den PC zugreifen zu müssen. Deshalb hat er weder den Public Key des ssh-Servers noch den persönlichen Private Key mit sich.

Durch den fehlenden Public Key des Servers kann sich dieser nicht ausweisen. Daher könnte der Anwender Gefahr laufen, sich gar nicht auf seiner Fritz Box anzumelden, sondern auf einer gefälschten Seite, die seine Fritz Box nur simuliert, um das Passwort abzufangen. Dieser Angriff ist aber nur mit hohem Aufwand und nur an wenigen Stellen im Netzwerk möglich, so dass dieses Risiko gering sein dürfte.

Für den Client bietet ssh die Möglichkeit, sich über ein Passwort oder über einen Private Key des Users einzuloggen. Im Test wurde die Passwort-Lösung gewählt. Da ssh die Kommunikation stark verschlüsselt, besteht nicht wie bei telnet die Gefahr des Abhörens, so dass beide Verfahren annähernd gleich sicher sind.

Die tatsächliche Sicherheit steht und fällt jedoch mit der Qualität des Passworts. Denn eine Brute-Force-Attacke auf die Fritz Box mit einem Wörterbuch ist jederzeit möglich. Falls der Anwender die Lösung über Public/Private Key bevorzugt und damit quasi ein 1024-Bit-Random-Passwort nutzt, kann er das auch mit dem gewählten Dropbear-Server tun.

Server-Key und Passwort

Der Dropbear-Server benötigt zum Start eine Datei mit seinem privaten Schlüssel, sonst verweigert er den Dienst. Einen passenden 512-Bit-RSA-Key in der Datei /var/tmp/dropbear_rsa_ hostkey erzeugt man über folgende Kommandos:

ln -s/var/tmp/dropbear dropbear key

/var/tmp/dropbearkey -t rsa -f /var/tmp/dropbear_rsa_hostkey -s 512

Eine Übersicht der Optionen beim Erzeugen der Keys erhält der Anwender mit:

/var/tmp/dropbearkey -help

Vor dem Start des Servers muss man noch ein sicheres root-Passwort für den ssh-Login wählen und dieses selbst verschlüsseln. Hierzu bietet sich die Website http://www.flash.net/cgi-bin/pw.pl an. Diese liefert für den User "root" und das extrem unsichere Passwort "tecCHANNEL" des Beispiels den Hash "root: PBvr5tOlt/rao".

Der Hash-Wert des root-Passworts wird nicht wie die Passwörter von Programmen in die Datei /var/tmp/passwd eingetragen. Denn diese Datei muss für alle Anwendungen lesbar sein, was in den 80er Jahren ein Brute-Force-Angriff zur Ermittlung des zentralen Passworts ausnutzte. Seither liegt dieses Passwort in der Datei /var/tmp/shadow, die zumindest auf echten Linux-Systemen (nicht so in der Fritz Box) stark eingeschränkte Zugangsrechte hat.

Da das Eintragen des root-Passworts in die shadow-Datei später bei jedem Reboot der Box automatisch ablaufen soll, ist das etwas kryptische Kommando sed erforderlich.

Dieser Stream-Editor kann über so genannte reguläre Ausdrücke Zeichen in Textdateien finden und durch andere ersetzen. Hierzu gibt der Anwender folgende Befehle ein und ersetzt den Hashwert "PBvr5tOlt/rao" des Beispiel-Passworts durch den Hash seines eigenen Codeworts.

cp -p /var/tmp/shadow /var/tmp/tmp_shadow

sed -e "/root:/s#^root:[^:]*:#root:PBvr5tOlt/ra o:#" /var/tmp/tmp_shadow > /var/tmp/shadow

Mit diesen Befehlen erzeugt der Benutzer zunächst eine Kopie der shadow-Datei, ersetzt darin das Passwort und schreibt die geänderte Datei auf /var/tmp/shadow zurück. Nun kann er den ssh-Server erstmals starten. Beim Aufruf muss ihm lediglich die Position des vorher erzeugten RSA-Keys mitgeteilt werden:

/var/tmp/dropbear -r /var/tmp/dropbear_rsa_hostkey

Wenn der Nutzer mit dem Unix-Kommando ps die Prozessliste abruft, sollte Dropbear darin auftauchen.

Sollte dies nicht der Fall sein, kann er an den Aufruf noch den Parameter "-E" anhängen. Er erhält dann alle Fehlermeldung im Konsolenfenster angezeigt. Das Fehlen von DSS-Keys kann man getrost ignorieren, sie werden nicht benötigt.

Erstes Login mit putty

Nachdem der ssh-Server nun läuft, benötigt der Anwender einen Client für das Login. Der Klassiker dafür ist das rund 400 KB große Programm putty, das für Windows im Web zum Download bereitsteht. Der Nutzer testet den ssh-Zugang zunächst im lokalen Netz und ruft dazu putty.exe auf.

Meist muss der Anwender nur die IP-Adresse der Fritz Box eingeben, da Port 22 und ssh voreingestellt sind. Im lokalen Netz läuft die Fritz Box meist unter der Adresse 192.168.178.1, lediglich im Testnetzwerk hat sie die .100. Davon sollte man sich jedoch nicht irritieren lassen. Nach dem Klick auf "Open" erhält der PC-Nutzer eine Warnmeldung: putty kennt den Host-Key des Servers nicht, daher ist die Verbindung manuell zu autorisieren.

Ob man den Host-Key im Cache ablegt oder nicht, ist in unserem Fall egal, da sich dieser Key nach einem Reboot der Fritz Box sowieso ändert. Nach dem Klick auf "Yes" oder "No", beides führt zum Login, sollte sich die Fritz Box melden.

Fertiges Script zum Starten des PCs per etherwake

Hat bislang alles geklappt, fehlt nur noch ein kleines Script, das den PC per etherwake startet. Prinzipiell kann man zwar etherwake über ssh auf der Kommandozeile aufrufen, doch wer hat schon die MAC-Adresse seines PCs auswendig parat? Zum Erzeugen des Scripts start_pc1 im Verzeichnis /var/tmp genügt folgender Dreizeiler:

echo "/var/tmp/etherwake -i eth0 00:0c:6e:93:23:87" > /var/tmp/start_pc1

chmod +x /var/tmp/start_pc1

Dabei ersetzt der Anwender, wie weiter oben bei etherwake beschrieben, die MAC-Adresse des Test-PCs "00:0c: 6e:93:23:87" durch die des Rechners und ändert gegebenenfalls "eth0" durch den passenden Interface-Namen der Fritz Box. Über einen zweiten PC im Netz kann man sich nun per ssh mit der Fritz Box verbinden und über das Script den anderen PC starten.

Bislang wurden alle Änderungen manuell eingegeben. Nach einem Neustart der Fritz Box hat diese alles wieder vergessen. Der einzige Weg, Änderungen über den Reboot zu retten, ist die Datei debug.cfg im Verzeichnis/var/flash. Details dazu finden sich in dem Beitrag (http://www.tecchannel.de/server/ linux/432803/) auf Tecchannel.de. Alle erforderlichen Kommandos liegen in einer Script-Datei.

Update: Download des Scripts auf die Fritz Box

Zur Installation des neuen Start-Scripts begibt man sich mit ssh oder telnet auf die Kommandozeile der Box und wechselt in das Verzeichnis /var/tmp. Mit folgendem Befehl wird das Script geladen:

cd /var/tmp

wget http://www.tecchannel.de/ download/432967/debug.test.

Unter Umständen kann es sonst vorkommen, dass die Fritz Box noch keinen Zugang zum Internet hat, wenn sie die Dateien der Tecchannel.de nachladen will. Deshalb "pingt" das Gerät jetzt so lange die Site an, bis sie eine positive Antwort erhält.

# # # # # # # # # # Start des telnet-daemons

/usr/sbin/telnetd -l /sbin/ar7login.

# # # # # # # # # # Warten bis Fritz!Box den Server erreichen kann

while ! (ping -c 1 www.tecchannel.de); do

sleep 5

done

# # # # # # # # # # Installation FTP-Server

cd /var/tmp

wget http://www.tecchannel.de/ download/432803/bftpd.conf

wget http://www.tecchannel.de/ download/432803/bftpd

chmod +x bftpd

chmod 777 bftpd.conf

# Hier den Usernamen und den Passwort-Hash für den FTP-Server eintragen

echo "albert:Wrrsi4PbgAAMA:0:0:root:/:null" << /var/tmp/passwd

/var/tmp/bftpd -d -c /var/tmp/bftpd.conf

# # # # # # # # # # Installation Etherwake

wget http://www.tecchannel.de/ download/432967/etherwake

chmod +x /var/tmp/etherwake.

# Hier das Interface der Fritzbox und die MAC-Adresse des PCs eintragen

echo "/var/tmp/etherwake -i eth0 00:0c:6e:93:23:87" > /var/tmp/start_pc1

chmod +x /var/tmp/start_pc1

# # # # # # # # # # Installation ssh-Server

wget http://www.tecchannel.de/ download/432967/dropbear

chmod +x /var/tmp/dropbear

ln -s /var/tmp/dropbear dropbearkey

/var/tmp/dropbearkey -t rsa -f /var/tmp/dropbear_rsa_hostkey -s 512

cp -p /var/tmp/shadow /var/tmp/tmp_shadow

# Hier den Hash des root-Passworts eintragen

sed -e "/root:/s#^root:[^:]*:#root:PBvr5tOlt/ra o:#" /var/tmp/tmp_shadow > /var/tmp/shadow

/var/tmp/dropbear -r /var/tmp/dropbear_rsa_hostkey

In diesem Script müssen lediglich an den drei kommentierten Stellen die persönlichen Daten eingetragen werden. Elegant geht dies direkt mit dem Editor "vi" auf der Fritz Box.

Wer die Datei am PC bearbeitet, sei gewarnt: Der Editor muss unbedingt im Unix/Linux-Format abspeichern können, sonst läuft das Script nicht.

Nach den Änderungen kopiert man die Datei an ihren finalen Ort und startet die Box neu:

cp /var/tmp/debug.test /var/flash/debug.cfg

/sbin/reboot

Zuweisung einer IP-Adresse an den DSL-Port

Was der Fritz Box jetzt noch fehlt, um weltweit von außen erreichbar zu sein, ist eine feste Internet-Adresse. Doch kaum jemand wird sich nur dafür eine statische IP-Adresse leisten. Hier bietet sich Dynamic DNS als Lösung an.

Dabei legt der Anwender sich bei einem der Anbieter zunächst einen kostenlosen Dynamic-DNS-Account zu. Mit den Zugangsdaten loggt sich die Fritz Box in regelmäßigen Abständen und nach jedem IP-Wechsel durch den DSL-Provider ein. Die Box meldet ihre neue IP-Adresse des öffentlichen DSL-Ports, die der Dynamic-DNS-Provider dann in seinem DNS-Server einträgt. So kann er den Domain-Namen immer in die jeweils aktuelle IP-Adresse auflösen.

Einer der bekanntesten Anbieter dieser Lösung findet sich unter www.dyndns.org. Man muss beim Erzeugen eines neuen Accounts lediglich darauf achten, die kostenlose Version "Dynamic DNS" zu wählen.

Hat der Nutzer beispielsweise die Subdomain "tecchannel22" bei dyndns.org eingetragen, ist die Fritz Box unter tecchannel22.dyndns.org jederzeit aus dem Internet erreichbar, da dyndns.org diesen Namen zur jeweils aktuellen DSL-IP-Adresse auflöst. Auch putty benötigt diesen Domain-Namen, um von außen auf die Fritz Box zugreifen zu können.

Auf der Fritz Box findet man die Konfiguration zum automatischen Update der IP-Adresse im Menü unter Internet / Dynamic DNS.

Löcher in der internen Firewall schließen

Jetzt ist der Anwender fast am Ziel. Die Fritz Box kann man nun zwar theoretisch unter ihrem dyndns-Namen von überall aus dem Internet erreichen, doch die interne Firewall blockt noch alle Versuche ab. Aus Sicherheitsgründen erlaubt AVM über das Web-Interface auch nicht, Zugänge von außen zur Box freizuschalten. Also ist ein letztes Mal Handarbeit nötig.

Für die Firewall-Regeln ist die Datei ar7.cfg im Verzeichnis /var/flash zuständig. Durch eine manuelle Änderung lässt sich der Zugang über das Internet öffnen. Bearbeiten Sie dazu ar7.cfg mit nvi oder dem schon mehrmals beschriebenen Umweg über eine temporäre Kopie. Darin sucht der Anwender nach den "forward rules" und ergänzt sie um folgende Zeile, um den ssh-Port 22 vom WAN freizuschalten:

"tcp 0.0.0.0:22 0.0.0.0.22"

Nach einem Reboot der Fritz Box ist es vollbracht. Per ssh kann man sich über die dyndns-Adresse von jedem Ort der Welt aus sicher auf die Fritz Box einloggen. Anschließend wechselt der Nutzer in das Verzeichnis /var/tmp und kann den PC mit dem Befehl ./start_pc1 aufwecken.

Fernzugriff auf den PC über das Windows-Tool RDP

Jetzt läuft zwar der PC, aber darauf zugreifen kann man noch nicht. Für Windows XP bietet sich hierfür RDP an. Dieser integrierte Remote Desktop hat sich zum beliebten Tool für die Fernwartung gemausert. Unter Windows XP aktiviert man diesen Dienst über die Systemeigenschaften.

Um von außen auf den RDP-Dienst eines laufenden PC zugreifen zu können, müssen Anwender die Firewall der Fritz Box noch entsprechend freischalten. Man gibt dem PC vorab eine feste IP-Adresse im internen Netz, sonst funktioniert die Port-Freigabe nicht. RDP läuft über den TCP-Port 3389, den der PC-Anwender in der Fritz Box unter dem Menüpunkt Internet / Port-Freigabe an die IP-Adresse seines PCs weiterleitet. (fn)