Futro S550 und Futro S550-2
Dieser Artikel ist veraltet
Dieser Beitrag ist veraltet! Eine vollständig erneuerte Beschreibung findet sich hier: Futro S900.
Überblick
Diese Platform bietet für wenig Geld einen lautlosen schnellen VPN-Offloader.
Diese Anleitung wurde ursprünglich basierend auf Gluon 1.3 und früher entwickelt und geschrieben, wurde im Oktober 2019 aber vollkommen unverändert erfolgreich mit Gluon 1.7 erprobt. Gluon 1.9 erfordert eine kleine Anpassung, die unten ausgewiesen ist.
Installation
Einfach die unterstützte Freifunk x86-generic factory-firmware von der Firmware-Seite herunterladen.
Dieses Image dann entpacken und auf die CF-Karte schreiben. Dazu entweder
- einen CF-Cardreader benutzen, das Image direkt mit dd auf die CF-Karte schreiben und CF-Karte dann in den Futro einbauen, oder
- Futro bei ausgebauter CF-Karte mit einem Live-Linux starten und dann das Image mit dd auf die CF-Karte schreiben, oder
- zur Not das Image über Gluon2Futro zu installieren.
Hier die Kommandos zum Entpacken des Images und Kopieren auf die CF-Karte:
# gzip -d gluon-ffs-1.7%2B2019-09-15-g.43e01839-s.300ff17-x86-generic.img.gz # dd if=gluon-ffs-1.7%2B2019-09-15-g.43e01839-s.300ff17-x86-generic.img of=/dev/path-to-cfcard
Diese beschriebene CF-Karte ggf. wieder in den Futro bauen und diesen erst einmal ohne zusätzliche Netzwerkkarte booten. Der Futro startet dann in den Config-Modus zur weiteren Konfiguration.
Konfiguration
Den zum Konfigurieren verwendeten Coputer mit dem Netzwerkkabel an dem Onboard-Netzwerkport des Futros anschliessen und die IP-Adresse des Clientcomputers auf 192.168.1.2/24 stellen. Statt mit statischer IP kann man auch DHCP benutzen. In diesem Fall warten, bis der DHCP-Server auf dem Futro seinen Dienst erledigt und dem Clientcomputer eine IP-Adresse zugewiesen hat.
Dann mit dem Browser Eurer Wahl http://192.168.1.1 aufrufen. Nun sollte die LuCi Oberfläche des Embedded-Linux des Futro auftauchen.
Dort zuerst unter dem Reiter „Expert Mode“ (Experteneinstellung) die eigenen SSH-Keys einfügen und kontrollieren, ob diese auch übernommen worden sind. Dazu einfach nach dem Speichern auf den Info-Reiter klicken und wieder zurück zu den SSH-Einstellungen. Tauchen die SSH-Keys wieder auf, ist alles gut. Eine nachträgliche Korrektur ist bei fehlendem SSH-Zugriff nur mit Monitor/Tastatur an der lokalen Konsole möglich, falls der Futro nicht wieder geöffnet werden soll.
Die restlichen Einstellungen vornehmen und speichern und dann den Futro neu starten.
Zusätzliche Netzwerkschnittstellen
Jetzt kann eine zweite Netzwerkkarte eingebaut werden. Dazu Futro wieder abschalten und die Netzwerkkarte über die PCI-Risercard einbauen. Das Halteblech nicht vergessen. Anschließend den Futro wieder einschalten.
Durch das Einsetzen der zweiten (und bei Dual-Port Netzwerkkarte der dritten) NIC hat sich wahrscheinlich die Reihenfolge der Netzwerkkartennumerierung geändert. Die Onboard-Karte ist vermutlich nicht mehr eth0 (falls sich die andere(n) Netzwerkkarte(n) vor die interne Realtek-Karte drängeln, was z.B. bei Intel-Karten meist der Fall ist), sondern eth1 (eine zusätzliche Netzwerkkarte) bzw. eth2 (bei Dual-Port Netzwerkkarte).
Diesem Umstand werden wir entgegenwirken, in dem wir uns am einfachsten lokal mit Tastatur und Monitor auf die Kiste einloggen. Das geht natürlich auch über SSH. Der DHCP-Server im Netzwerk sollte einem der Ports bei eingestecktem Kabel eine IP zuweisen. Diese benutzen, um sich mit ssh root@$IP auf dem Futro einzuloggen.
Die genauen Befehle im weiteren gehen von einem Futro S550-2 mit einer Intel Dual-Port Netzwerkkarte aus. Bei einer Erweiterungskarte mit nur einer NIC die Befehle sinngemäß abwandeln.
Für die weiteren Dateibearbeitungen verwenden wir den integrierten Editor VI. Dieser ist gewöhnungsbedürftig, aber sehr mächtig. Eine Kurzbeschreibung findet sich z.B. hier: https://www.cs.colostate.edu/helpdocs/vi.html
Für die Bearbeitung auf der lokalen Konsole sind zwei Dinge zu beachten. Zum einen ist als Default-Keyboard-Layout eine US-Tastatur eingestellt. Bitte ggf. nachlesen, wo sich welches Zeichen befindet. Zum anderen wird im Laufe des Bootvorgangs nur bei Gluon 1.6 die Monitorauflösung an das angepaßt, was der Monitor unterstützt. Das kann dazu führen, daß auf dem Monitor ca. 1 Minute keine Ausgabe mehr zu sehen ist.
Nun die Datei /etc/config/network öffnen. Nun im Abschnitt config interface 'wan' die folgende Zeile suchen:
option ifname 'eth0'
Diese Zeile nun ändern auf die interne NIC:
option ifname 'eth2'
Dann die Änderungen abspeichern und den Editor verlassen.
Für Gluon bis 1.7 sind in der Kommandozeile noch folgende Befehle auszuführen, um die zusätzlichen Interfaces eth0 ins Client- und eth1 ins Mesh-Netzwerk einzubinden:
uci set network.mesh_lan=interface uci set network.mesh_lan.ifname=eth0 uci set network.mesh_lan.macaddr=bor(m1,0x02):m2+1:m3+1:m4:m5:m6 uci set network.mesh_lan.mesh=bat0 uci set network.mesh_lan.proto=batadv uci set network.mesh_lan.auto=0 uci set network.mesh_lan1=interface uci set network.mesh_lan1.ifname=eth1 uci set network.mesh_lan1.macaddr=bor(m1,0x02):m2+1:m3+2:m4:m5:m6 uci set network.mesh_lan1.mesh=bat0 uci set network.mesh_lan1.proto=batadv uci set network.mesh_lan1.auto=1
Für Gluon 1.9 stattdessen folgende Befehle ausführen (anderes Protokoll):
uci set network.mesh_lan=interface uci set network.mesh_lan.ifname=eth0 uci set network.mesh_lan.macaddr=bor(m1,0x02):m2+1:m3+1:m4:m5:m6 uci set network.mesh_lan.mesh=bat0 uci set network.mesh_lan.proto=gluon_wired uci set network.mesh_lan.auto=0 uci set network.mesh_lan1=interface uci set network.mesh_lan1.ifname=eth1 uci set network.mesh_lan1.macaddr=bor(m1,0x02):m2+1:m3+2:m4:m5:m6 uci set network.mesh_lan1.mesh=bat0 uci set network.mesh_lan1.proto=gluon_mesh uci set network.mesh_lan1.auto=1
Diese Kommandos erzeugen die Konfiguration für die beiden neuen Netzwerkschnittstellen. Um die Änderungen abschließend auch auf die Platte zu schreiben, diese mit…
uci commit
…auf die CF-Karte schreiben.
Das zusätzliche Interface eth0 muss nun noch zum Client Netzwerk hinzugefügt werden, wenn (und nur dann!) für eth0 wie im obigen Beispiel network.mesh_lan.auto=0 gesetzt wurde. Dazu nochmals mit dem Editor VI die Datei /etc/config/network öffnen. Im Abschnitt config interface 'client' nun noch list ifname 'eth0' hinzufügen, die Datei abspeichern und VI beenden. der Abschnitt sollte dann in etwa so aussehen:
config interface 'client' option type 'bridge' option macaddr '00:19:99:a7:2d:ba' list ifname 'bat0' list ifname 'eth0' option proto 'dhcpv6' option reqprefix 'no' option robustness '3' option query_interval '2000' option query_response_interval '500' option peerdns '1' option sourcefilter '0'
Wenn (also anders als im obigen Beispiel) auch network.mesh_lan1.auto=0 gesetzt ist, dann muss zusätzlich die Zeile list ifname 'eth1' aufgenommen werden:
config interface 'client' option type 'bridge' option macaddr '00:19:99:a7:2d:ba' list ifname 'bat0' list ifname 'eth0' list ifname 'eth1' option proto 'dhcpv6' option reqprefix 'no' option robustness '3' option query_interval '2000' option query_response_interval '500' option peerdns '1' option sourcefilter '0'
Nun ist der Futro fertig konfiguriert. Und zum Abschluss noch ein
reboot
auf die Kommandozeile abfeuern, um das System neu zu starten.
Alternative mit Bridge-Interface
Das ganze geht auch schöner mit einem Bridge-Interface:
uci set network.mesh_lan=interface uci set network.mesh_lan.type=bridge uci set network.mesh_lan.ifname=eth0 eth1 uci set network.mesh_lan.mesh_no_rebroadcast=1 uci set network.mesh_lan.auto=1 uci set network.mesh_lan.macaddr=bor(m1,0x02):m2+1:m3+1:m4:m5:m6 uci set network.mesh_lan.mesh=bat0 uci set network.mesh_lan.proto=batadv
Dann jeweils die Interfaces (eth0, eth1) in jeweils nur eine der Bridge-Interfaces client oder mesh_lan hinzufügen.
list ifname 'eth0' list ifname 'eth1'
Für den Fall beider LAN-Interfaces als Mesh-on-LAN:
uci set network.mesh_lan.type=bridge uci set network.mesh_lan.ifname='eth0 eth1' uci set network.mesh_lan.auto=1 uci commit
Für den Fall beider LAN-Interfaces als Clientnetzwerk:
uci set network.client.ifname='bat0 eth0 eth1' uci set network.mesh_lan.auto=0 uci commit
Für den Fall eines Clientnetzwerkes auf eth0 und des Mesh-on-LAN auf eth1:
uci set network.mesh_lan.type=bridge uci set network.mesh_lan.ifname=eth1 uci set network.mesh_lan.auto=1 uci set network.client.ifname='bat0 eth0' uci commit
Und zum Abschluss noch ein…
reboot
…auf die Kommandozeile abfeuern, um das System neu zu starten.
Wenn auf einem LAN-Interface Mesh gesprochen (oder nicht mehr gesprochen) werden soll, bitte diese Vorgehensweise befolgen.
MAC Adressen
Die oben allgemein angegebenen MAC-Adressen m1:m2:m3:m4:m5:m6 werden von der primären MAC Adresse abgeleitet. Hier im Beispiel ist das 00:19:99:a7:2d:ba .
Für das LAN-Interface wird die erste Stelle (m1) der MAC mit einem bitwise or mit 0x02 modifiziert und die zweite Stelle (m2) um 1 hochgezählt. Außerdem wird die dritte Stelle (m3) um 1 hochgezählt.
Bei einem weiteren LAN-Interface wird die dritte Stelle (m3) nochmal um 1 weiter hochgezählt.
Beispiel Testumgebung:
network.client.macaddr='00:19:99:a7:2d:ba' network.bat0.macaddr='00:19:99:a7:2d:ba' network.mesh_lan.macaddr='02:1a:9a:a7:2d:ba' network.mesh_lan1.macaddr='02:1a:9b:a7:2d:ba'
Persistenz
Um diese Einstellungen auch nach einem factory-reset oder upgrade beizubehalten, sollten in
- in /lib/gluon/core/sysconfig/wan_ifname das WAN-Interface angegeben werden (im Beispiel eth2),
- in /lib/gluon/core/sysconfig/lan_ifname das LAN-Interface angegeben werden (im Beispiel eth0),
- in /lib/gluon/core/sysconfig/primary_mac die primäre MAC auf die interne Netzwerkkarte geändert werden (im Beispiel 00:19:99:a7:2d:ba ).