Layer3Firmware
Allgemeine Informationen
Die Gatewayfirmware kann sehr einfach mithilfe des Skripts configuregateway auf Basis von Hoodfile (/www/hood/keyxchangev2data) und der Gatewaykonfiguration (/etc/config/gateway) konfiguriert werden.
Das Skript konfiguriert den Router entsprechend der /etc/config/gateway und des Hoodfile und muss bei Änderungen erneut ausgeführt werden. configuregateway wird nie automatisch ausgeführt, entsprechend verliert der Router bei einem Update alle Einstellungen! (Es werden zwar die o.g. Dateien beim Upgrade KOPIERT, jedoch muss eben manuell configuregateway ausgeführt werden, um sie ANZUWENDEN ...)
ACHTUNG: Unbekannte Einstellungen werden möglicherweise entfernt!
ULA und Wifi bezieht das Skript aus der Hoodfile, den Rest aus /etc/config/gateway.
Variante Fabian: Hostname und Position müssen aktuell manuell in /etc/config/fff eingetragen werden, das Webinterface ist aus $Gründen kaputt.
Variante Adrian: Das Webinterface funktioniert wie bei einem normalen Knoten. Alle Gateway-spezifischen Einstellungen müssen weiterhin wie oben beschrieben manuell per SSH/Config-Datei gesetzt werden.
Die Gatewayfirmware wird aktuell größtenteils hier entwickelt:
- https://github.com/fblaese/firmware/tree/l3
- https://github.com/adrianschmutzler/fff-firmware/tree/fork-gw
Fertige Builds gibt es entsprechend den Tags aus dem o.g. Repository hier:
- http://fw.sgstbr.de/gateway/
- https://freifunk.jubt.org/fff-firmware.php (Variante gw_* wählen!)
Eine Bespielkonfiguration mit einem direkten Peer und einem Wireguardpeer gibts hier: https://gist.github.com/fblaese/ca4d903b20b4d7033553f48625b93ca6
ACHTUNG: Die VLAN Settings hier sind für den wdr4900 für andere Geräte muss z.b. geprüft werden auf welchen Port der WAN liegt. Eine Liste ist ganz unten zu finden oder in der offiziellen Firmware https://github.com/FreifunkFranken/firmware/tree/master/src/packages/fff/fff-network/ar71xx
Typischer Ablauf einer Installation
- Router flashen
- Als Client mit dem Router per SSH verbinden oder aus dem Heimnetzwerk über die WAN-IP des Routers per SSH verbinden
- Peering-Partner für Wireguard suchen oder sich für eine Richtfunkstrecke absprechen
- Wireguard-Keypair generieren falls wireguard verwendet wird
- Die Gateway-Konfiguration auf das Gerät kopieren (/etc/config/gateway)
- Das Hood-File auf das Gerät kopieren (/www/hood/keyxchangev2data)
- Mit "configuregateway -c" die Einstellungen aus der Gatewayconfig in die Openwrt Configs übernehmen.
- Mit "configuregateway -t" die Einstellungen testen, falls das Script nicht manuell abgebrochen wird, werden nach 200 Sekunden die Einstellungen zurück gesetzt
- falls der Router noch erreichbar ist, das Script beenden (STRG+C) falls man von der SSH Session heruntergeflogen ist, innerhalb 200 Sekunden erneut verbinden und das configuregateway skript killen (z.B. mit killall configuregateway). Sollte man auf den Router nicht mehr drauf kommen, werden nach 200 Sekunden alle Einstellungen zurück gesetzt und man ist wieder im Ursprungszustand
- alle Einstellungen prüfen
- Mit "configuregateway -a" werden alle Einstellungen fest gespeichert, erst hiermit wird alles rebootfest geschrieben. Davor kann durch einen reboot jederzeit der Urzustand wieder erreicht werden.
Peering-Partner
https://wiki.freifunk-franken.de/w/Portal:Layer3Peering
VPN-Tunnel
Wenn du über das Internet peeren willst, muss die Gegenseite Wireguard sprechen.
Für Wireguard musst du dir einen Peering-Partner suchen (= mit einem Menschen reden, ob er mit dir ein Peering eingehen will). Für Redundanz sollten (mindestens) zwei Peerings eingestellt werden, zum Testen reicht eines aber völlig aus. (Sinnvoll ist es auch, wenn nicht beide Peerings einfach per Tunnel abgedeckt werden sondern z.b. ein weiteres peering per Richtfunk, somit läuft das Netz auch weiter wenn der Internetanschluss ausfällt).
Es ist aktuell in der Firmware nicht möglich aber man kann natürlich auch andere Tunneltechnologien (z.b. GRE eignet sich sehr gut) für Babel verwenden.
Per LAN Kabel / Glasfaser
Es kann am Gateway Babel auch auf einen Ethernetport (wenn nötig auch VLAN-getagget) gelegt werden. Somit kann auch über Kabel gepeered werden. Natürlich kann das Kabel auch durch Richtfunk oder Glasfaser oder sonstige Technologien (z.b. Internet-Exchange) ersetzt werden.
Generieren der Keys für wireguard
Ausführliche Anleitung: https://www.wireguard.com/quickstart/
Für wireguard muss ein Keypair generiert werden. Am einfachsten macht man dies direkt am Gateway-Router:
wg genkey | tee privatekey | wg pubkey > publickey
Den privatekey in der gleichnamigen Datei trägst du in deine gatewayconfig ein. Den publickey teilst du deinem Peering-Partner mit.
Prinzipiell ist es möglich, pro Router jeweils ein Keypair zu generieren oder immer das gleiche Keypair für alle Gateways zu verwenden (mit größerem Risiko bei "Verlust").
Es empfiehlt sich, den privatekey zu sichern, da man sonst vom Peering-Partner gehauen wird, wenn deswegen der Tunnel neu eingerichtet werden muss.
hood file
Das Hood File ist konzeptionell identisch zu der unter V2 verwendeten Datei.
Details zum Hood-File unter: Hood file
Benutzte IP-Adressbereiche eintragen!
IPv4: Portal:Netz
IPv6: Portal:Netz/IPv6
Babel Metrik
Für Nürnberg/Fürth wurde sich für folgende Babel Metriken entschieden:
- Ethernet: 96
- Richtfunk
- >100Mbit: 256
- 30-100Mbit: 512
- 10-30Mbit: 1024
- bis 10Mbit: 4096
- VPN (z.B. Wireguard): 4096 - 16384
Je nach Situation können Links auch schlechter hier angegeben bewertet werden. Auf eine Aufwertung sollte jedoch verzichtet werden. Pro Link sollte maximal 16384 verwendet werden, damit auch bei vielen Hops das Maximum von 65535 nicht erreicht wird.
Begründung:
Wir wollen Richtfunklinks mit mehr Hops (z.b. fbl -> stm -> Hardhöhe -> Neunhof) bevorzugen vor VPN (z.b. fbl -> per VPN zu einen HetznerGW -> per VPN nach Neunhof) da dies meist schneller ist.
Ob dieses Metrikbeispiel auch in anderen Städten übernommen werden will, muss im Einzelfall entschieden werden.
configuregateway
Folgende Parameter können übergeben werden:
- -c: Konfiguriert das Gateway mit uci. Kein commit, kein Anwenden der Einstellungen!
- -t: Startet alle Dienste neu, damit werden die Einstellungen aus -c angewendet. Skript wartet bis zu 200s darauf, dass es beendet wird (Strg + c wenn ssh nicht verloren geht, ansonsten kill(all)). Wird das Skript in dieser Zeit nicht beendet, werden die Einstellungen zurückgesetzt und die Dienste erneut neu gestartet.
- -a: Applied die Änderungen (uci commit), startet Dienste neu.
- -r: Revert changes.
/etc/config/gateway
Benutzte IP-Adressbereiche eintragen:
IPv4: Portal:Netz
IPv6: Portal:Netz/IPv6
gateway
Name | Type | Required | Description |
---|---|---|---|
name | string | no | |
peer_ip | IPv4 Adresse | no | IPv4 Adresse für Peerings |
peer_ip6 | IPv6 Adresse | no | IPv6 Adresse für Peerings |
vlan
Name | Type | Required | Description |
---|---|---|---|
comment | string | no | |
port | list | no | Ports auf dem Standard-Switch |
client
Name | Type | Required | Description |
---|---|---|---|
iface | interface | no | Clientnetz auf Interface legen |
vlan | number | no | Clientnetz auf VLAN mit angegebener IP auf dem Standard-Switch legen (Alternativ zu iface!!) |
ipaddr | IPv4 Adresse | no | Router-IP im Client-Netz (CIDR Notation) |
ip6addr | IPv6 Adresse | no | Router-IP im Client-Netz (CIDR Notation) |
dhcp_start | IPv4 Adresse | no | DHCP Startadresse |
dhcp_limit | number | no | Maximale Anzahl an DHCP-Leases |
dns
Name | Type | Required | Description |
---|---|---|---|
server | list | no | DNS-Server, auf den geforwarded wird |
batman
Name | Type | Required | Description |
---|---|---|---|
iface | interface | no | Batman auf physikalisches auf Interface legen |
vlan | number | no | Batman auf VLAN mit angegebener IP auf dem Standard-Switch legen (Alternativ zu iface!!) |
babelpeer
Name | Type | Required | Description |
---|---|---|---|
iface | interface | no | Babel auf physikalisches Interface legen |
vlan | number | no | Babel auf VLAN mit angegebener IP auf dem Standard-Switch legen (Alternativ zu iface!!) |
type | babel-type | no | Babel Verbindungstyp (z.B. wired, tunnel, ..) |
wireguardpeer
Name | Type | Required | Description |
---|---|---|---|
endpoint_host | host oder ip | yes | |
endpoint_port | port | yes | |
persistent_keepalive | seconds | no | |
public_key | wireguard pubkey | yes | |
private_key | wireguard privkey | no | automatically generated if unspecified |
Hardware Port Belegungen
Die Switch Port Belegung für die gängigen und genutzten Router für die VLAN Konfiguration.
TP-Link WDR4900 v1.3
Port | Switch Port |
---|---|
CPU | 0 |
WAN | 1 |
LAN 1 | 2 |
LAN 2 | 3 |
LAN 3 | 4 |
LAN 4 | 5 |
TP-Link WR1043ND v1
Port | Switch Port |
---|---|
WAN | 0 |
LAN 1 | 1 |
LAN 2 | 2 |
LAN 3 | 3 |
LAN 4 | 4 |
GMII | 5 |
TP-Link WR1043ND v2.x + v3.x
Port | Switch Port |
---|---|
WAN | 5 |
LAN 1 | 4 |
LAN 2 | 3 |
LAN 3 | 2 |
LAN 4 | 1 |
GMII | 0 |
ACHTUNG: Bei den Modellen WR841N v8 - v11 ist der Blaue WAN Port IMMER WAN!
TP-Link WR841N v8
Port | Switch Port |
---|---|
CPU | 0 |
LAN 1 | 2 |
LAN 2 | 3 |
LAN 3 | 4 |
LAN 4 | 1 |
TP-Link WR841N v9 + v10 +v11
Port | Switch Port |
---|---|
CPU | 0 |
LAN 1 | 4 |
LAN 2 | 3 |
LAN 3 | 2 |
LAN 4 | 1 |