Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
gatewaykonfiguration [2015/03/10 21:44] – angelegt adlerweb | gatewaykonfiguration [2015/03/25 20:44] – [Routing] ataflinski | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
**Achtung - Nicht benutzen, noch in Arbeit!** | **Achtung - Nicht benutzen, noch in Arbeit!** | ||
- | + | ===== Einleitung ===== | |
Dieser Guide beschreibt die Einrichtung eines Supernodes für das FF-MYK-Netz mit optionalem Internet-Uplink unter Arch Linux. Die Informationen sollten sich mit geringen Änderungen auch auf anderen Distributionen nutzen lassen. | Dieser Guide beschreibt die Einrichtung eines Supernodes für das FF-MYK-Netz mit optionalem Internet-Uplink unter Arch Linux. Die Informationen sollten sich mit geringen Änderungen auch auf anderen Distributionen nutzen lassen. | ||
Zeile 10: | Zeile 9: | ||
Achtung: Supernodes nutzen komplexe Routingmethoden - es werden fundierte Linux und Netzwerkkenntnisse vorausgesetzt. | Achtung: Supernodes nutzen komplexe Routingmethoden - es werden fundierte Linux und Netzwerkkenntnisse vorausgesetzt. | ||
+ | ===== Benötigte Software ===== | ||
- | ---- | + | * [[https:// |
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | ==== Optional (Karte/ | ||
+ | * python | ||
+ | * batman-alfred | ||
+ | * batman-alfred-json-git | ||
+ | * ffmap | ||
+ | * ffmap-backend (patched) | ||
+ | * ffapi-updater (adlerweb) | ||
+ | * Ein Haufen Workarounds… | ||
- | Todo: | + | ===== Konfiguration ===== |
- | * ICVPN | + | |
- | * BGP (bird/ | + | |
- | ---- | + | |
- | fastd | + | ==== Standardkonfiguration ==== |
- | dhcpd | + | |
- | radvd | + | |
- | named | + | |
- | OpenVPN (mullvad) | + | |
- | haveged (Entropie) | + | |
+ | Das OS sollte vollständig konfiguriert sein. Es sollte eine öffentliche IPv4-Adresse und optimalerweise auch IPv6-Adresse besitzen. | ||
- | ---- | + | ==== NTP ==== |
- | ref | + | Um Probleme auf Grund von unterschiedlichen Systemzeiten zu vermeiden wird NTP genutzt. Dieser ist auch aus dem FF-Netz erreichbar. Es ist auf eine korrekte Zeitzone des Systems zu achten. Die Quelle kann nach eigenem Ermessen gewählt werden. |
- | https:// | + | |
+ | <code ini / | ||
+ | # Associate to Arch's NTP pool | ||
+ | server 0.arch.pool.ntp.org | ||
+ | server 1.arch.pool.ntp.org | ||
+ | server 2.arch.pool.ntp.org | ||
+ | server 3.arch.pool.ntp.org | ||
- | ---- | + | # By default, the server allows: |
- | <code bash init.sh> | + | # - all queries from the local host |
- | ip link set up dev eth0 | + | # - only time queries from remote hosts, protected by rate limiting and kod |
- | ip addr add 10.9.0.10/24 dev eth0 | + | restrict default kod limited nomodify nopeer noquery notrap |
- | ip route add default via 10.9.0.1 | + | restrict 127.0.0.1 |
+ | restrict ::1 | ||
- | screen -AmSd fastd fastd -c /etc/fastd/vpn/config --log-level debug | + | # Location of drift file |
- | sleep 5 | + | driftfile |
- | ip link set down address 02: | + | </ |
- | ip link set up dev ffmyk-mesh-vpn | + | |
- | batctl if add ffmyk-mesh-vpn | + | NTP sollte automatisch starten |
- | batctl gw server | + | |
- | batctl it 10000 | + | |
- | ip link set up dev bat0 | + | |
- | brctl addbr br-ffmyk | + | ==== Haveged ==== |
- | brctl addif br-ffmyk bat0 | + | |
- | ip link set up dev br-ffmyk | + | Der Server muss z.T. einiges an Crypto abarbeiten und kann daher - vorallen da keine Tastatur/ |
- | ip addr add 10.222.100.1/ | + | ==== Fastd ==== |
- | ip addr add 2a01: | + | |
- | #Nur Stat-Server | + | Fastd ist ein VPN-Server/Client, welcher zur Verbindung mit den Knoten verwendet wird. Er ist durch die geringen Speicheranforderungen optimal für Router geeignet. Als Methode kommt salsa2012+gmac zum Einsatz, zur Kompatibilität mit älteren Firmwareversionen wird auch salsa2012+umac akzeptiert. Eine unverschlüsselte Verbindung, welche bei einigen Communitys zur Steigerung der Performance angeboten wird, ist nicht aktiv. Verbindungen werden über udp/5000 abgewickelt. Für jeden Client muss der öffentliche Schlüssel hinterlegt werden. Auf unseren Gateways lassen wir ausschließlich Knoten zu, welche über das Webinterface registriert wurden (dies gilt nur für VPN, Mesh ist immer möglich!). Ein Abgleich erfolgt über ein PHP-Script, welches die öffentlichen Schlüssel der Clients aus der Datenbank abruft und passende Konfigurationsdateien erzeugt. |
- | screen | + | |
- | screen -AmSd batadv-vis batadv-vis -i bat0 -s | + | |
- | echo 128 > /sys/class/net/bat0/mesh/hop_penalty | + | (" |
+ | <code ini /etc/fastd/ff/fastd.conf> | ||
+ | log to syslog level info; | ||
+ | interface " | ||
+ | method " | ||
+ | method " | ||
+ | secure handshakes yes; | ||
+ | bind 0.0.0.0: | ||
+ | hide ip addresses yes; | ||
+ | hide mac addresses yes; | ||
+ | mtu 1426; | ||
+ | include peers from " | ||
+ | secret " | ||
+ | </code> | ||
- | sysctl | + | <code php / |
+ | # | ||
+ | <?php | ||
+ | $url = ' | ||
+ | $out = '/ | ||
- | systemctl start openvpn@mullvad | + | if(!is_dir($out)) die(' |
+ | if(!is_writable($out)) die(' | ||
- | iptables -t mangle -A PREROUTING -i br-ffmyk -j MARK --set-xmark 0x1/ | + | $data = file_get_contents($url); |
- | iptables -t nat -A POSTROUTING -o mullvad -j MASQUERADE | + | $data = unserialize($data); |
- | ip route add unreachable default table 42 | + | foreach($data as $router) { |
- | ip rule add from all fwmark 0x1 table 42 | + | if(!preg_match('/ |
- | ip rule add from 10.222.0.0/16 table 42 | + | trigger_error(' |
- | ip route add 10.222.0.0/16 dev br-ffmyk table 42 | + | }elseif(!preg_match('/ |
+ | trigger_error(' | ||
+ | }else{ | ||
+ | $filename=' | ||
+ | $fp=fopen($out.$filename, ' | ||
+ | fwrite($fp, | ||
+ | fclose($fp); | ||
+ | $active[] = $filename; | ||
+ | } | ||
+ | } | ||
- | systemctl restart dhcpd4 | + | $dh = opendir($out); |
+ | while(($file = readdir($dh)) !== false) { | ||
+ | if($file != ' | ||
+ | if(!in_array($file, | ||
+ | unlink($out.$file); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | exec(' | ||
+ | |||
+ | ?> | ||
</ | </ | ||
- | ---- | + | Das PHP-Script sollte mindestens alle 10 Minuten via Cron aufgerufen werden (cd / |
- | <code ini mullvad.conf> | + | |
+ | Hinweis: Ggf. muss in der php.ini die Variable open_basedir ergänzt oder auskommentiert werden. | ||
+ | |||
+ | * ERR: Inter Supernode VPN | ||
+ | |||
+ | ==== DHCP ==== | ||
+ | |||
+ | Der DHCP-Server verteilt IPv4-Adressen an die Clients und verteilt Router und DNS-Informationen. Die IPs sind passend zur [[IPs|Liste]] zu wählen. Der Node selbst ist dabei DNS und Gateway. | ||
+ | |||
+ | <code ini / | ||
+ | default-lease-time 600; | ||
+ | max-lease-time 3600; | ||
+ | |||
+ | authoritative; | ||
+ | |||
+ | log-facility local7; | ||
+ | |||
+ | subnet 10.222.0.0 netmask 255.255.0.0 { | ||
+ | range 10.222.xxx.xxx 10.222.xxx.xxx; | ||
+ | |||
+ | option routers 10.222.xxx.xxx; | ||
+ | option domain-name-servers 10.222.xxx.xxx; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | dhcpd4 sollte automatisch starten | ||
+ | |||
+ | * TODO: Feste IPs via API | ||
+ | * TODO: Alternative DNS-Server via Liste? | ||
+ | * TODO: NTP via Liste? | ||
+ | |||
+ | ==== DNS ==== | ||
+ | |||
+ | Im FF-MYK-Netz wird neben dem " | ||
+ | |||
+ | <code ini / | ||
+ | options { | ||
+ | directory "/ | ||
+ | pid-file "/ | ||
+ | |||
+ | listen-on-v6 { 2a01: | ||
+ | listen-on port 53 { 127.0.0.1; 10.222.xxx.xxx; | ||
+ | |||
+ | dnssec-validation auto; | ||
+ | |||
+ | auth-nxdomain no; # conform to RFC1035 | ||
+ | |||
+ | allow-recursion { 10.222.0.0/ | ||
+ | allow-transfer { none; }; | ||
+ | allow-update { none; }; | ||
+ | |||
+ | forwarders { | ||
+ | 85.214.20.141; | ||
+ | 213.73.91.35; | ||
+ | }; | ||
+ | |||
+ | version none; | ||
+ | hostname none; | ||
+ | server-id none; | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type master; | ||
+ | file " | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type master; | ||
+ | file " | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type master; | ||
+ | file " | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type master; | ||
+ | file " | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type master; | ||
+ | file " | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type hint; | ||
+ | file " | ||
+ | }; | ||
+ | |||
+ | zone " | ||
+ | type master; | ||
+ | file " | ||
+ | allow-query { any; }; | ||
+ | allow-transfer { none; }; | ||
+ | }; | ||
+ | |||
+ | </ | ||
+ | |||
+ | <code ini / | ||
+ | $ORIGIN . | ||
+ | $TTL 60 ; 1 minute | ||
+ | ffmyk IN SOA ns.ffmyk. hostmaster.adlerweb.info. ( | ||
+ | 2014070359 ; serial | ||
+ | 28800 ; refresh (8 hours) | ||
+ | 7200 ; retry (2 hours) | ||
+ | 604800 | ||
+ | 39600 ; minimum (11 hours) | ||
+ | ) | ||
+ | NS ns | ||
+ | A | ||
+ | MX 10 mail.freifunk-myk.de. | ||
+ | |||
+ | ns.ffmyk | ||
+ | AAAA 2a01: | ||
+ | |||
+ | ntp.ffmyk | ||
+ | AAAA 2a01: | ||
+ | |||
+ | www.ffmyk | ||
+ | AAAA 2a01: | ||
+ | |||
+ | 1.ntp.ffmyk | ||
+ | AAAA 2a01: | ||
+ | |||
+ | </ | ||
+ | |||
+ | DNS/ | ||
+ | |||
+ | * ERR: Das ist für Master, wir bräuchten Multimaster oder Slaves | ||
+ | * TODO: Interne DNS via API | ||
+ | * TODO: NTP-Liste | ||
+ | |||
+ | ==== OpenVPN ==== | ||
+ | |||
+ | Es besteht z.Zt. ein Vertrag über Mullvad, welcher das Internet-Breakout darstellt. Es sind 3 Verbindungen möglich. Zum Connect wird OpenVPN verwendet. Die Vertragsdaten liegen bei adlerweb. | ||
+ | |||
+ | <code ini / | ||
client | client | ||
Zeile 144: | Zeile 331: | ||
</ | </ | ||
- | ---- | + | <code bash / |
- | <code bash mullvad-up> | + | |
#!/bin/bash | #!/bin/bash | ||
+ | #/sbin/ip route replace default via $4 table 42 | ||
sleep 3 | sleep 3 | ||
echo Reroute via $4 | echo Reroute via $4 | ||
Zeile 153: | Zeile 340: | ||
exit 0 | exit 0 | ||
+ | |||
</ | </ | ||
+ | chmod +x nicht vergessen! | ||
- | ---- | + | OpenVPN wird über das Routing-Script gestartet und ist nicht als Systemdienst hinterlegt. |
- | < | + | |
- | log to syslog level info; | + | |
- | interface "ffmyk-mesh-vpn"; | + | ==== Traffic-Statistik ==== |
- | method " | + | |
- | method " | + | Um den Überblick zu behalten verwenden wir vnstat um Trafficstatistiken (nur Interface-Auslastung) zu sammeln. |
- | secure handshakes yes; | + | |
- | bind 0.0.0.0:5000; | + | Nach der Installation müssen die Interfaces einmalig registriert werden |
- | hide ip addresses yes; | + | < |
- | hide mac addresses yes; | + | vnstat -u -i enp3s0 |
- | mtu 1426; | + | vnstat -u -i br-ffmyk |
- | include peers from " | + | vnstat |
- | secret " | + | </ |
+ | |||
+ | Im Anschluss wird der Daemon vnstatd gestartet und als Systemdienst eingerichtet. | ||
+ | |||
+ | * TODO: Zentrales sammeln | ||
+ | |||
+ | ==== Routing ==== | ||
+ | |||
+ | Beim Start des Servers sollte ein Script die grundlegende Konfiguration durchführen. Dies beinhaltet u.A. die Einrichtung der Routingtablellen und Netzwerkbrücken. | ||
+ | |||
+ | [[MAC-Adressen|MAC-Adresse]] aus der Liste wählen - diese wird genutzt um das Gerät in der Map als Gateway zu identifizieren. | ||
+ | |||
+ | Vor dem Ausführen des Scripts muss das Kernelmodul batman-adv geladen sein. | ||
+ | <code bash / | ||
+ | batman-adv | ||
</ | </ | ||
- | ---- | ||
- | <code php fastd-api.php> | ||
- | <?php | ||
- | $url = ' | ||
- | $out = '/ | ||
- | if(!is_dir($out)) die(' | + | <code bash init.sh> |
- | if(!is_writable($out)) die(' | + | # Fastd starten |
+ | screen -AmSd fastd fastd -c / | ||
- | $data = file_get_contents($url); | + | #Warten sodass fastd die devices sicher erstellt hat |
- | $data = unserialize($data); | + | sleep 5 |
- | foreach($data as $router) { | + | #MAC-Adresse des VPN-Interface einrichten |
- | if(!preg_match('/ | + | ip link set down address 02:FF:4D:59:4B:10 dev ffmyk-mesh-vpn |
- | trigger_error(' | + | ip link set up dev ffmyk-mesh-vpn |
- | }elseif(!preg_match('/ | + | |
- | trigger_error(' | + | |
- | }else{ | + | |
- | $filename=' | + | |
- | $fp=fopen($out.$filename, | + | |
- | fwrite($fp, | + | |
- | fclose($fp); | + | |
- | $active[] = $filename; | + | |
- | } | + | |
- | } | + | |
- | $dh = opendir($out); | + | # |
- | while(($file = readdir($dh)) !== false) { | + | batctl |
- | if($file != '.' && $file != '..') { | + | |
- | if(!in_array($file, | + | |
- | unlink($out.$file); | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | exec(' | + | #Server-Modus (=kann Broadcast empfangen, für DHCP) |
+ | batctl gw server | ||
- | ?> | + | #Intervall der Originator-Beacons |
+ | batctl it 10000 | ||
+ | |||
+ | # | ||
+ | ip link set up dev bat0 | ||
+ | |||
+ | # | ||
+ | brctl addbr br-ffmyk | ||
+ | brctl addif br-ffmyk bat0 | ||
+ | ip link set up dev br-ffmyk | ||
+ | |||
+ | #IPs vergeben | ||
+ | ip addr add 10.222.xxx.xxx/ | ||
+ | ip addr add 2a01: | ||
+ | |||
+ | #Nur Stat-Server | ||
+ | #screen -AmSd alfred alfred -i br-ffmyk -b bat0 -m | ||
+ | #screen -AmSd batadv-vis batadv-vis -i bat0 -s | ||
+ | |||
+ | # | ||
+ | echo 128 > / | ||
+ | |||
+ | # | ||
+ | sysctl -w net.ipv4.ip_forward=1 | ||
+ | |||
+ | #OpenVPN starten | ||
+ | systemctl start openvpn@mullvad | ||
+ | |||
+ | # | ||
+ | iptables -t mangle -A PREROUTING -i br-ffmyk -j MARK --set-xmark 0x1/ | ||
+ | |||
+ | #Alles auf dem Interface mullvad (via OpenVPN) macht NAT-Masquerading | ||
+ | iptables -t nat -A POSTROUTING -o mullvad -j MASQUERADE | ||
+ | |||
+ | # | ||
+ | ip route add unreachable default table 42 | ||
+ | |||
+ | #Alles, was mit 0x1 markiert wird gehört zu Tabelle 42 | ||
+ | ip rule add from all fwmark 0x1 table 42 | ||
+ | |||
+ | #Alles mit Freifunk-IP - woher auch immer - gehlrt zu Tabelle 42 | ||
+ | ip rule add from 10.222.0.0/ | ||
+ | |||
+ | #Tabelle 42 routet das Ziel mit Freifunk-IPs über das Device br-ffmyk | ||
+ | ip route add 10.222.0.0/ | ||
+ | |||
+ | #DHCP brauch bei neu auftauchenden devices (start fastd) einen restart | ||
+ | systemctl restart dhcpd4 | ||
</ | </ | ||
+ | |||
+ | ---- | ||
+ | ===== Es folgt Schrott ===== | ||
+ | |||
+ | Todo: | ||
+ | * ICVPN | ||
+ | * BGP (bird/ | ||
+ | * radvd | ||
+ | |||
+ | ---- | ||
+ | |||
+ | * fastd | ||
+ | * dhcpd | ||
+ | * radvd | ||
+ | * named | ||
+ | * OpenVPN (mullvad) | ||
+ | * haveged (Entropie) | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ref | ||
+ | https:// | ||
+ | |||
+ | |||
+ | ---- |
gatewaykonfiguration.txt · Zuletzt geändert: 2020/10/17 20:04 von 127.0.0.1