
Ich habe die folgende Anleitung verwendet, um meinen Raspberry Pi als Zugriffspunkt einzurichten:
Raspberry Pi 3 als WLAN-Zugangspunkt
Ich leite meinen gesamten Datenverkehr wlan0
weiter eth0
und verwende NAT. Funktioniert super!
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Jetzt möchte ich die gleichen Regeln einrichten, außer Schnittstelle verwenden tun0-00
und weiterleitenallemein Datenverkehr durch meinen VPN-Tunnel. Ich möchte ihn vollständig senden und nicht, dass etwas in das Host-Netzwerk gelangt. Ich denke, es läuft ungefähr so ab:
sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0-00 -j ACCEPT
Leider weiß ich, dass diese iptables-Regeln nicht vollständig sind. Das Problem besteht darin eth0
, dass sie bestehen bleiben. Die ursprüngliche Regel zur Weiterleitung des Datenverkehrs ist eth0
weiterhin vorhanden.
Ich möchte meinen gesamten Datenverkehr durch den Tunnel schicken, sofern dieser geöffnet ist. Wenn nicht, reicht mir die Verwendung von aus eth0
.
Aktualisieren:
Habe das Flag -I verwendet, um meine Regeln einzufügen:
sudo iptables -t nat -I POSTROUTING 1 -o tun0-00 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0-00 -j ACCEPT
Die FORWARD-Kette:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- wlan0 tun0-00 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- tun0-00 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 0 0 ACCEPT all -- eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 0 0 ACCEPT all -- wlan0 eth0 0.0.0.0/0 0.0.0.0/0
5 0 0 ACCEPT all -- wlan1 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 0 0 ACCEPT all -- wlan0 wlan1 0.0.0.0/0 0.0.0.0/0
Immer noch kein Erfolg, die Weiterleitung scheint nicht zu funktionieren.
Client-VPN-Konfiguration
Ich habe Dinge entfernt, die sensibel aussahen:
dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote XXX.XXX.XXX.XXX PORT_NUM udp
lport XXX
verify-x509-name "VPN_Certificate" name
pkcs12 CERT_NAME.p12
tls-auth CERTIFICATE-tls.key 1
ns-cert-type server
redirect-gateway local def1
Die Verbindung zum Pi funktioniert einwandfrei und zeigt eine andere öffentliche IP-Adresse an. Die Clients zeigen den Pi zwar immer noch als Gateway an, können aber keine Verbindung mehr herstellen.
Lösung
redirect-gateway def1
Zuerst musste ich es in die .ovpn-Datei auf dem Pi einfügen .
Dann musste ich den Namen meiner Schnittstelle tatsächlich richtig eingeben ... Ugh. Ich komme mir wie ein Verrückter vor, aber anscheinend habe ich es tun0-00
am Anfang gesehen und das war das einzige Mal, dass es existierte. Die Schnittstelle ist eigentlich nur tun0
.
Die entsprechenden iptables-Befehle waren also:
sudo iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0 -j ACCEPT
Funktioniert jetzt super!
Antwort1
Sie benötigen beide Regelsätze innerhalb von iptables
. Die beiden Regelsätze stellen sicher, dass der Datenverkehr, der über die angegebenen Schnittstellen abgeht, entsprechend maskiert wird. Hier ist mein Vorschlag, der etwas einfacher ist als Ihrer:
# Masquerade outgoing traffic
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Allow return traffic
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward everything
iptables -A FORWARD -j ACCEPT
Das fehlende Puzzleteil ist das Routing. Wenn der Tunnel aktiv ist, soll ihn „der gesamte“ ausgehende Verkehr nutzen. Andernfalls verwenden Sie die normale Route.
Dies wird behandeltinnerhalb von OpenVPNverwenden Sie den redirect-gateway def1
Parameter in Ihrer Clientkonfiguration.
Antwort2
Das praktische Tool besteht darin, vorhandene Regeln mit Zeilennummern aufzulisten:
iptables --line-numbers -t filter -L FORWARD
Sie können die Regeln mit -D
der folgenden Option löschen:
iptables -t filter -D FORWARD 1
Sie können mit der folgenden Option an der angegebenen Stelle eine neue Regel einfügen -I
:
iptables -t filter -I FORWARD 0 blah-blah-blah
Dadurch wird eine neue Regel ganz am Anfang einer Tabelle eingefügt, sodass sie als Erstes konsultiert wird.
Bearbeiten:
Im Allgemeinen benötigen Sie nur eine Regel in der FORWARD
Tabelle, die zutrifft -m state --state RELATED,ESTABLISHED
:
-I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
da durch Verbindungsverfolgung alle bereits bekannten Verbindungen weitergeleitet werden könnten.
Und ja, Sie müssen einrichtenRichtlinienroutingum Ihren Datenverkehr nicht an das Standard-Gateway weiterzuleiten wlan
, das höchstwahrscheinlich über Ihre ethernet
Schnittstelle erreichbar ist, sondern über die vpn
Schnittstelle.