NAT von priv. Netz ins Freifunk

Aus Freifunk Franken

Diese Seite befindet sich noch im Entwurfsstadium.
Hilf mit sie zu verbessern!

Ich wünsche mir ein Review dieser Installation da ich mir selbst nicht sicher bin ob ich alle eventualitäten beachtet habe, sollte jemand ein Fehler auffallen bitte unbedingt melden!


Schon lange hat es mich gestört, das man von seinem Privaten Netzwerk nicht ins Freifunknetz kommt. In letzter Zeit haben einige Gespräche eine schöne Lösung ergeben, die ich gestern Abend umgesetzt habe.

Wichtige Informationen

  • Der eigene DSL/Kabel Router wird zu einem reinen Internetrouter degratiert, darüber läuft kein WLAN mehr!
  • Es wird ein weiterer OpenWRT Router benötigt (u.U. geht auch alles auf einem Gerät wird dann aber komplizierter), ich hab günstig einen wdr4300 geschossen, da dieser auch 5GHz kann, es geht aber auch mit 841er o.ä. man braucht nur mindestens 3 Ethernetports.
  • Das ganze ist nicht wunderschön, so mache ich ins Internet z.b. doppeltes NAT erst der OpenWRT Router und dann nochmals der Telekomrouter. Für meine Zwecke ist dies aber vollkommen ausreichen es wird vielleicht eklig wenn man Portforwarding einrichten möchte (aus dem Internet ins private Netz)
  • Aus dem Freifunknetz kann das private Netz nicht erreicht werden, es kann aber wie bei einem Internetrouter mit Portforwarding gearbeitet werden. Bildlich gesehen ist hier das "Freifunknetz ein Internet", unser OpenWRT Router macht mit dem Freifunknetz nichts anderes als jeder 0815 Internetrouter auch mit dem Internet.
  • Man ist in keine Hood direkt verbunden, das heißt es lassen sich gar keine fdff:: oder fe80:: IPv6 Adressen auflösen, man kommt nur per IPv4 Adressen ins Freifunknetz!

Installationsschema

Natfreifunk.jpg

Einrichtung

  • OpenWRT flashen
  • OpenWRT grundsätzlich einrichten, Passwort setzen, WLAN anlegen
  • DHCP Server konfigurieren, als DNS forwarder sollte ein Freifunk Gateway eingetragen werden sowie ein anderer DNS Server (z.b. 8.8.8.8), somit dürfte auch interne fff.community Namen auflösbar sein.
Einrichtung NAT DNS.png
  • Im LuCi unter Network -> Switch gucken welcher Port der Clientport zum Freifunkrouter ist (Netzwerkkabel anstecken und gucken welcher Port als belegt angezeigt wird). Unten bei VLAN auf Add klicken und ein neues VLAN anlegen (bei mir gab es bereits VLAN1 und VLAN2 das neue wurde somit VLAN3). Der Port der zum Freifunkrouter geht aus den anderen VLANs herausnehmen (auf off stellen) und im neu angelegten VLAN auf untagged stellen, sowie den Port zur CPU auf tagged. Alles abspeichern.
Einrichtung NAT VLAN.png
  • 1. Im LuCi unter Network -> Interfaces ein neues Interface erstellen "Add new Interface". Irgendeinen Namen ("Freifunk") und auf static adress stehen lassen. Als Interface des oben erzeugte VLAN benutzen.

2. Beim "Common Configuration" unter "General Setup" bei IP-Adresse die zuvor reservierte IP-Adresse eintragen. Diese sollte aus der eigenen Hood sein. Unter Gateway und DNS wieder die Daten von vorhin (DHCP und DNS Server) eingeben. 3. Unter Advanced Settings bei "Use gateway metric" eine 1 eintragen. 4. Unter Firewall Settings den Kreis bei "unspecified -or- create" anklicken und einen Namen eingeben ("Freifunk").

Das ganze abspeichern, es sollte nun ein neues Interface ethX.Y entstanden sein, wenn das Netzwerkkabel bereits im Freifunkrouter steckt, sollten darüber auch bereits Daten fliesen.

Anlegen des Interfaces (1)
Eingabe der IP-Adressen (2)
"Use gateway metric" (3)
Firewall settings (4)
  • Unter Network -> Static Routes muss noch eine Route ins Freifunknetz angelegt werden, auf Add klicken bei Interface das Interface das wir zuvor angelegt haben auswählen, bei Host-IP or Network geben wir 10.0.0.0/8 ein, alles abspeichern. Wenn man auch Zugang zum dn42 haben möchte, muss man als weitere statische Route noch 172.20.0.0/14 eintragen.
  • LuCi -> Network -> Firewall. Bin mir jetzt nicht mehr sicher wie das standartmäßig aussieht, ich glaube aber falsch. Es muss so angepasst werden:

Firewallnatff.jpg

Es ist ein recht blödes herumgeklicke bis man das so hinbekommen hat, teilweise geht danach erstmal gar nichts mehr richtig, ein reboot hilft da dann.

Wäre schön wenn jemand der das frisch einrichtet noch Schritt für Schritt protokolliert, ich hab es leider schon fertig hier stehen und weiß nicht mehr was man alles tun musste um dahin zu kommen.

Die Firewall sorgt dafür:

    • lan wird auf Freifunk und WAN genattet. Da WAN die bessere Metrik hat, wird zuerst immer WAN verwendet, wenn WAN nicht erreichbar ist oder ein Zugriff auf 10.0.0.0/8 erfolgen soll (static routes oben) wird auf Freifunk genattet.
    • WAN -> rejectet jeglicher Zugriff von WAN auf den Router wird blockiert
    • Freifunk -> rejectet jeglicher Zugriff von Freifunk auf den Router wird blockiert.

Achtung!

Da der private Router am Clientport des Freifunknetzes hängt, kann er unter umständen Router-Advertisements aus dem Freifunknetz erhalten. Es können dadurch unschöne Effekte entstehen (bei mir ist zeitweise sogar der priv. OpenWRT Router dadurch regelmäßig abgestürzt und hat neu gebootet!). Es macht daher Sinn auf den Freifunkrouter die RAs auf das eth0.1 (=Clientports am Freifunkrouter) zu blocken.

ebtables -A OUTPUT -p IPv6 -o eth0.1 --ip6-proto ipv6-icmp --ip6-icmp-type router-advertisement -j DROP

Bei der Geschichte bin ich mir noch ziemlich unsicher hatte damit aber starke Probleme. Bitte noch nicht 100%ig drauf verlassen was hier steht, gerne auch Bestätigung!

ToDo

  • Lässt sich evtl. in der eigenen Hood das fdff:: routen? Wer sich hier mit IPv6 auskennt, bitte melden!

Installation prüfen

Einen PC an den privaten Switch oder an einen der freien Ports des Router anschließen. Ebenso kann bzw. sollte das ganze auch vom neu geschaffenen WLAN aus geprüft werden.

Prüfen ob Internet über eigenen Anschluss geht:

C:\Users\Christian>tracert google.de

Routenverfolgung zu google.de [172.217.19.195] über maximal 30 Abschnitte:

  1    <1 ms    <1 ms    <1 ms  OpenWrt.lan [192.168.1.1]
  2    <1 ms    <1 ms    <1 ms  192.168.2.1
  3    17 ms    16 ms    16 ms  217.0.116.200
  4    17 ms    17 ms    16 ms  87.190.170.174
...

192.168.1.1 ist der OpenWRT Router, 192.168.2.1 ist mein Telekomrouter und von da geht es direkt ins Internet.

Prüfen ob das Freifunk geht, am besten mindestens 2 Hoods prüfen:

C:\Users\Christian>tracert 10.50.32.4

Routenverfolgung zu 10.50.32.4 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  OpenWrt.lan [192.168.1.1]
  2    36 ms    35 ms    34 ms  10.50.32.4

Ablaufverfolgung beendet.

C:\Users\Christian>tracert 10.50.40.10

Routenverfolgung zu 10.50.40.10 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  OpenWrt.lan [192.168.1.1]
  2    34 ms    34 ms    35 ms  10.50.32.4
  3    39 ms    39 ms    38 ms  10.50.40.10

Ablaufverfolgung beendet.

C:\Users\Christian>tracert 10.50.132.10

Routenverfolgung zu 10.50.132.10 über maximal 30 Abschnitte

  1    <1 ms    <1 ms    <1 ms  OpenWrt.lan [192.168.1.1]
  2    35 ms    34 ms    34 ms  10.50.32.4
  3    75 ms    76 ms    73 ms  10.50.252.10
  4   133 ms   133 ms   134 ms  10.50.252.89
  5   135 ms   136 ms   137 ms  10.50.132.10

Ablaufverfolgung beendet.
#ist ja dämlich das ich von mir zu Hetzner nach Rumänien zurück ins FabLab gehe, ich braucht mal noch ne direkte Verbindung ;)

Alle Hoods werden vom OpenWRT Router direkt ins Freifunknetz genattet welches dann weiter routet und sind erreichbar. Zur Sicherheit kann man jetzt noch prüfen ob aus dem Freifunknetz der eigene Router oder das eigene Netz erreichbar ist, da es aber keinen direkten Weg gibt, wüsste ich nicht mal welche IPs man da wie prüfen müssten. Es ist z.b. schon der OpenWRT Router nicht aus dem Freifunknetz erreichbar:

christiand@fff-gw-cd1:~$ curl 10.50.32.70
curl: (7) Failed to connect to 10.50.32.70 port 80: Connection refused
christiand@fff-gw-cd1:~$ ping 10.50.32.70
PING 10.50.32.70 (10.50.32.70) 56(84) bytes of data.
From 10.50.32.70 icmp_seq=1 Destination Port Unreachable
From 10.50.32.70 icmp_seq=2 Destination Port Unreachable
^C
--- 10.50.32.70 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 999ms

christiand@fff-gw-cd1:~$

Linux User kennen ihre Befehle garantiert selbst, die führ ich hier nicht auf.

Ich wünsche mir ein Review dieser Installation da ich mir selbst nicht sicher bin ob ich alle eventualitäten beachtet habe, sollte jemand ein Fehler auffallen bitte unbedingt melden!

Mit Fritzbox und Raspberry Pi

In Neunhof gab es das Problem, das ebenfalls vom priv. Netz ein Zugang ins Freifunknetz gewünscht war. Leider steht dort eine Fritzbox die nicht ausgetauscht werden soll. Die Fritzbox kann zwar statische Routen aber kein NAT in ein weiteres Netz. Daher übernimmt dies hier ein Raspberry Pi.

Benötigte Hardware

  • Raspberry Pi (eins mit WLAN)
  • Netzteil/Stromversorgung für Raspberry Pi
  • MikroSD Karte mindestens 4GB
  • Stück LAN Kabel

Aufbau

Das Raspberry Pi wird per WLAN ins Freifunknetz verbunden und per Kabel ins private Netz.

Installation

Raspian auf dem Raspi installieren (gibt genug Anleitungen erkläre ich hier nicht). Danach:

vi /etc/sysctl.conf 

dahin folgende Zeilen die führende # entfernen:

...
net.ipv4.ip_forward=1
...
net.ipv6.conf.all.forwarding=1
...

danach

vi /etc/rc.local 

und folgende Zeile einfügen:

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE &

danach

vi /etc/wpa_supplicant/wpa_supplicant.conf

und folgende Zeilen einfügen:

network={
    ssid="franken.freifunk.net"
    key_mgmt=NONE
}

Danach das Raspberry Pi neu starten und per Kabel an der Fritzbox anschließen.

In die Fritzbox einloggen und das Raspberry Pi suchen und den Haken setzen das dieses Gerät immer die gleiche IP bekommen soll. Die IP merken.

Unter statische Routen eintragen:

  • IP: 10.0.0.0
  • Subnetzmask: 255.0.0.0
  • Gateway: IP DES RASPBERRY PI

abspeichern und von nun an sollte man vom priv. Netz ins Freifunk kommen

IPv6 Routing auf die fd43 vom priv. Netz

!! ACHTUNG!!

Diese Anleitung ist garantiert noch Fehlerhaft und bedarf auf jeden Fall eine weitere Überarbeitung. Bitte aktuell nur als Konzept ansehen

!! ACHTUNG !!

Heimrouter muss ein weiteres ULA Netz vergeben, hier generieren: https://cd34.com/rfc4193/ einfach MAC eingeben von Netzwerkkarte und generieren drücken. Bitte keinesfalls(!!!) einfach selbst irgendwelche Netze nehmen, das RFC4193 ist nicht umsonst da! https://tools.ietf.org/html/rfc4193

Dieses Netz vom Heimrouter zusätzlich an Endgeräte vergeben lassen.

Heimrouter braucht Verbindung zum Freifunknetz

Heimrouter eine statische route setzen: fc00::/7 via IP dev ????

  • bin mir mit device unsicher, bei OpenWRT tut es br-lan, sieht bei mir so aus: fc00::/7 via MEIN:ULA::ffff:1 dev br-lan
    • MEIN:ULA::ffff:1 hat mein Gateway das über ein extra VLAN im Heimrouter erreichbar ist (nächster Schritt).

das ganze kann bei mir nur funktionieren, da am br-lan natürlich auch mein dezentrales Freifunk Gateway eine IP hat. Mit einem GW im RZ muss man das vermutlich anders umsetzen.

  • als IP muss ein Gateway ebenfalls eine IP aus deinem ULA Netz bekommen, der Heimrouter muss diese IP erreichen können (über die obere Verbindung ins Freifunknetz)

Heimrouter muss dieses ULA Netz per radvd o.ä. ins priv. Netz verteilen so das alle Clients davon auch eine IP bekommen, sollte dann etwa so aussehen auf den Clients:

root@christian-pc:/home/christiand# ifconfig
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.108  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::d250:99ff:fe04:6b0a  prefixlen 64  scopeid 0x20<link>
        inet6 MEIN:ULA:0:569:6dd6:5bdc:d0fd  prefixlen 64  scopeid 0x0<global>
        inet6 MEIN:PUBLIC:569:6dd6:5bdc:d0fd  prefixlen 64  scopeid 0x0<global>
        inet6 MEIN:PUBLIC::da3  prefixlen 128  scopeid 0x0<global>
        inet6 EIN:ULA::da3  prefixlen 128  scopeid 0x0<global>
        ether d0:50:99:04:6b:0a  txqueuelen 1000  (Ethernet)
        RX packets 126939620  bytes 70871100640 (66.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 115079619  bytes 20962269263 (19.5 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xee900000-ee920000  

Damit sollte der "Hinweg" funktionieren.

Damit auch der Rückweg aus dem Freifunknetz ins Heimnetz klappt, muss im Freifunknetz das eigene ULA Netz bekannt gemacht werden. Auf dem Gateway folgendes in der babel.conf hinzufügen:

Entweder UCI (bei LEDE/OpenWRT):

config filter
        option type 'redistribute'
        option local 'true'
        option ip 'MEIN:ULA::/48'
config filter                     
        option type 'redistribute'
        option ip 'MEIN:ULA::/48'

oder in die babel.conf (auf Debian&co):

 redistribute local ip 10.50.0.0/16
 redistribute local ip 10.83.0.0/16
 redistribute local ip 144.76.70.189/32
 redistribute local ip fd43:5602:29bd::/48
 redistribute local ip MEIN:ULA::/48 #NEU!!
 redistribute local ip 2a0b:f4c0::/32
 redistribute local deny
 redistribute ip 10.50.0.0/16
 redistribute ip 10.83.0.0/16
 redistribute ip 144.76.70.189/32
 redistribute ip fd43:5602:29bd::/48
 redistribute ip MEIN:ULA::/48 #NEU!!
 redistribute ip 2a0b:f4c0::/32
 redistribute ip 0.0.0.0/0

Auf dem Gateway muss auch noch eine statische Rückroute ins eigene Netz gesetzt werden:

MEIN:ULA::/48 dev $DEV  proto static
  • als $DEV das device verwenden, worüber das private Netz erreichbar ist

Ebenfalls sollte auf dem Gateway die Firewall erweitert werden, damit aus dem FF Netz das priv. Netz nicht erreichbar ist (falls gewünscht):

ip6tables -A FORWARD -m state --state NEW -o $DEV -j DROP
  • als $DEV das device verwenden, worüber das private Netz erreichbar ist