Freifunk-Gateway aufsetzen/Routing-ins-Internet

= Einleitung =
Es gibt verschiedene Möglichkeiten Traffic ins Internet zu routen.
* Einen anderen Router ins Internet routen lassen und dessen angebotene Route nutzen.
* Direkt am eigenen Server ins Internet routen
* Über einen VPN Anbieter ins Internet routen
= Über Babel an ein FFF-Exit-Gateway =
=== IPv4 ===
Babel trägt automatisch die von anderen Routern announcte "default-Route" in die 'fff' Tabelle ein.
Dadurch werden die Pakete, für die keine bessere ("more specific") Route gefunden wurde zu dem Server geleitet, der diese "default-Route" announct hat.
Es sollte darauf geachtet werden, dass die Option net.ipv4.icmp_errors_use_inbound_ifaddr (siehe oben) gesetzt ist.
Ansonsten passieren lustige Dinge mit MTU, die dazu führen können, dass manche Seite nicht laden.
Außerdem sollte MSS Clamping aktiviert werden, damit auch Webseiten funktionieren, die ICMP Pakete blockieren (pfui!). Dafür kann in /etc/network/interfaces bei jedem Interface, das Babel verwendet, folgender Zweizeiler im IPv4 Bereich ergänzt werden.
 post-up iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o $IFACE -j TCPMSS --clamp-mss-to-pmtu
 pre-down iptables -t mangle -D POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o $IFACE -j TCPMSS --clamp-mss-to-pmtu
Hintergrundinfos: https://de.wikipedia.org/wiki/Maximum_Segment_Size#MSS_Clamping
=== IPv6 ===
Bei IPv6 wird nicht wie bei IPv4 mit NAT gearbeitet. Daher sind öffentliche Adressen nötig, die dann auch passend geroutet werden müssen. (Nicht jeder Uplink lässt Pakete mit beliebigen Quelladressen durch).
Öffentliche IPv6 Adressen können hier bezogen werden.
Auch für diese Adressen gilt: die passenden Routen werden im Freifunk announced, daher ist nichts weiter zu tun.
.. Es können (und sollten, so die Möglichkeit besteht) natürlich auch eigene Adressen verwendet werden. :-)
= Traffic direkt am Server ins Internet ausleiten =
Bevor ihr "fremden" Traffic direkt ausleitet, solltet ihr euch unbedingt über die rechtlichen Konsequenzen informieren und euch mit eurem Provider oder Serververmieter in Verbindung setzen.
=== IPv4 ===
Hierfür ist ein NAT nötig, dass die internen Adressen auf die passende öffentliche Adresse übersetzen kann.
Weiterhin muss eine passende default Route in der 'fff' Tabelle angelegt werden:
~$ ip route show tab main | grep default
default via 192.0.2.4 dev ens3
~$ ip route replace default via 192.0.2.4 dev ens3 proto static tab fff
Das ganze muss dann noch Rebootfest gemacht werden. Dafür bietet es sich an, einen {pre-|post-}up Block in der Debian Interfacekonfiguration zu schreiben.
Anschließend muss noch ein passendes NAT aktiviert werden.
iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Will man diese default Route auch anderen Routern zur Verfügung stellen, muss der Filter in /etc/babeld.conf angepasst werden:
redistribute ip 0.0.0.0/0 eq 0
Diese Zeile bedeutet: "Announce alle Routen aus der import-table, die innerhalb von 0.0.0.0/0 liegen und die Prefixlänge 0 haben."
=== IPv6 ===
(Achtung ungetestet!)
Hier wird ein freies /64 Netz für jede Hood benötigt. Das vorgehen ähnelt im Prinzip sehr den fd43 Adressen nur das im radvd eine Default Route mitgegeben wird. Natürlich muss dafür gesorgt werden, dass das Subnetz ins Internet kann bzw. aus dem Internet erreichbar ist.
Folgendes muss getan werden:
Aus dem Subnetz muss eine einzelne IP an das bat Interface:
[...]
post-up ip -6 addr add 2001:db8::1/64 dev $IFACE
[...]
Eine Route muss in die fff Tabelle:
[...]
post-up ip -6 route replace 2001:db8::1/64 dev $IFACE proto static table fff
[...]
Im radvd muss eine default route announced werden dazu AdvDefaultLifetime nicht auf 0 setzen sondern erhöhen (z.b. 600). Weiterhin muss das Subnetz auch announced werden in /etc/radvd.conf:
[...]
 prefix 2001:db8::/64 {
 AdvOnLink on;
 AdvAutonomous on;
 };
[...]
=== Abuse minimieren ===
Wenn selbst Pakete ins Internet geleitet werden kann es sinnvoll sein folgende Dinge zu sperren.
Ausgehend:
* tcp-25
* tcp-137
* udp-137
* ip-10.0.0.0/8
* ip-172.16.0.0/12
* ip-192.168.0.0/16
* ip-100.64.0.0/10
* ip-169.254.0.0/16
* ip-192.0.0.0/24
* ip-192.0.2.0/24
* ip-198.18.0.0/15
* ip-198.51.100.0/24
* ip-203.0.113.0/24
* ip-0.0.0.0/8
Gateways, welche beim Hoster Hetzner stehen, sollte weitere Vorkehrungen treffen. Hetzner monitored den Traffic, den die Gateways verursachen. Sollten Verbindungsversuche zu nicht gerouteten IPs dabei sein, generiert Hetzner Abuse und schickt es (Achtung!) nicht an die hinterlegte Abuse-Adresse. Was man dagegen tun kann ist hier beschrieben: Hetzner
= VPN-Tunnel zu Anonymisierungsdienst =
Nicht zu empfehlen, sollte nur im Notfall verwendet werden wenn keine andere Option vorhanden ist!
https://wiki.freifunk-franken.de/w/Freifunk-Gateway_aufsetzen/VPN-Exit