Fragen zu MASQUERADE

Vulpecula

Commander
Registriert
Nov. 2007
Beiträge
2.249
Hallo zusammen!

Ich bin gerade dabei, einen Raspberry Pi (mit Debian Stretch Lite) als Access Point zu konfigurieren. Die Anleitung auf raspberrypi.org ist an sich soweit klar, nur ein Punkt ist leider etwas unverständlich (siehe Bild). Ich bin mir nicht ganz sicher, was genau hier passiert. Vielleicht kann mir jemand ein paar Takte dazu erzählen.

(Falls es von Interesse ist: Ich möchte zwar, dass der Raspberry Pi via eth0 am Netzwerk hängt, allerdings soll er auch als AP dienen, mit dem sich diverse ESP8266 verbinden können um Daten in eine InfluxDB Datenbank einzutragen. Jedoch soll wlan0 nicht zu eth0 gebrückt werden; sprich: Die ESPs sollen nicht 'nach draußen kommen'.)

Vielen Dank und Grüße,
Vulpecula



Screenshot 2018-06-03 13.16.52.png
 
Zuletzt bearbeitet:
Mit den Kommandos baust du keinen Accesspoint, sondern einen Router. Was von dir auch gewünscht ist.
Die Kommandos:
- net.ipv4.ip_forward=1 -> ermöglicht es dem System NAT durchzuführen
- iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -> iptables führt NAT auf alle Datenpakete aus, die eth0, und maskiert diese entsprechend, nimmt aber auch entsprechend adressierte Pakete auf eth0 an
- iptables-save > /etc/iptables.ipv4.nat -> Speicher die aktuell aktiven iptables Regeln in die Datei /etc/iptables.ipv4.nat
- iptables-restore in rc.local -> Die iptables Regeln werden beim Systemstart aus der Datei /etc/iptables.ipv4.nat wiederhergestellt
 
Ich versuche mal, es möglichst einfach zusammenzufassen:

Du baust da einen (Paket-)Router, d.h. dieses Gerät hat mehrere Interfaces und ist mit verschiedenen Netzen verbunden. Ein Router dient als Mittler (Gateway) zwischen Netzen. D.h. ein Gerät im Netz 192.168.1.0/24 kann durch dieses Gateway hindurch mit einem Gerät im Netz 192.168.2.0/24 sprechen, ohne zu wissen, wie die Pakete dorthin gelangen.

Nun hast du beim Router meistens auch mindestens ein WAN interface, durch das der Traffic in die Welt raus geht. Dabei können durchaus noch weitere Hops im Intranet o.ä. dazwischen sein. Hier bei deiner Regel ist es so, dass über eth0 der Traffic ins LAN/WAN raus geht.

Nun zur Erläuterung von MASQUERADE:
Die Herausforderung ist - dein Netz 192.168.1.0/24 ist ja nicht einzigartig, da es ein privater Adressraum ist, der überall außerhalb des WWW verwendet wird. Ein Paket hat neben der Ziel-IP auch einen Absender, an den doch bitte die Antwort geschickt werden soll, die zurück kommt. Wenn du nun ein Paket zu 8.8.8.8 schickst und der Server dort die Antwort zusammenschnürt, dann wird er mit 192.168.1.42 nicht viel anfangen können. Die Gateways dazwischen würden das Paket ohnehin recht zügig verwerfen, weil private Netze eben nicht übers WWW geroutet werden.
Um das zu lösen, wird die Quell-IP "maskiert", d.h. dein eth0-Interface stempelt seine eigene WAN-IP als Absender drauf und merkt sich gleichzeitig, zu welcher Intranet-IP das Paket zurück geroutet werden muss, wenn denn eine Antwort kommen sollte. Du könntest stattdessen mit einer SNAT-Regel auch hart eine Absender-IP setzen, aber dann verlierst du die Flexibilität der automatischen Anpassung, wenn sich die IP von eth0 mal ändert (z.B. weil der DHCP im LAN nun eine andere IP zuweist).
 
Bezieht sich das Routing hier denn auf die beiden Interfaces eth0 und wlan0? Denn genau das möchte ich ja nicht - eth0 dient dazu, um den Pi in das eigene Netzwerk einzubinden (damit ich auf mein Frontend zugreifen kann), während die ESPs via wlan0 ihre Daten in die InfluxDB Datenbank schieben (welche auf dem Raspi läuft). Zwischen den Interfaces soll nicht geroutet werden. Oder habe ich da etwas falsch verstanden?
 
Eine Verbindung kommt nur zustande, wenn du den "bridging"-Teil deiner verlinkten Anleitung durchführst. Bei einem Access Point ist das wohl der häufigste Anwendungsfall, aber wenn du das nicht willst/brauchst, musst du das nicht tun. Wenn ich dich richtig verstehe, startest du irgendeinen Prozess, der sowohl einen Socket auf dem eth0-Interface als auch auf dem wlan0-Interface bindet, damit du in beide Netze funken kannst. Dadurch hast du innerhalb dieses Prozesses selbst in der Hand, welche Pakete wohin fliegen. Die erwähnte MASQUERADE-Regel bezieht sich ja explizit nur auf ausgehende Pakete an eth0.
 
Das mit dem Socket ist eine gute Frage. Kann ich das irgendwie überprüfen?

Nervermind... Ich hab es gerade mal ausprobiert: Ich komme von beiden Seiten (wlan0 bzw. eth0) aus an den InfluxDB Server.
 
Zuletzt bearbeitet:
Zurück
Oben