Ich möchte einen VPN-Tunnel vom Internet zu meinem OpenVPN-Server an der Adresse 192.168.1.45 aufbauen können. Die Einrichtung meines Heimnetzwerks ist etwas komplex, da ich einen Raspberry Pi als Gateway verwende, um den gesamten Datenverkehr in meinem Heimnetz über ein anderes VPN zu leiten (in der Abbildung VPN 1 genannt und durch die dicke Linie dargestellt).
Link zum Schema des Netzwerkaufbaus(Ich kann anscheinend noch keine Bilder einbetten)
Mein Setup funktioniert einwandfrei, außer dass ich in dieser Konfiguration keine Verbindungen über VPN 2 herstellen kann.
Weitere Konfigurationsdetails: Alle Gateways haben feste IPs. Das LAN-Gateway wird vom VPN1-Gateway verwendet und leitet eingehenden Datenverkehr auf Port 8787 an Port 1194 weiter (Regelsatz über die GUI meines ISP GW). Hier sind die iptables-Regeln für das VPN 1-Gateway:
Chain PREROUTING (policy ACCEPT 15038 packets, 1421K bytes)
num pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 10 packets, 1246 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 344 packets, 25041 bytes)
num pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 183 packets, 13486 bytes)
num pkts bytes target prot opt in out source destination
3 9959 1007K MASQUERADE all -- any tun0 anywhere anywhere
Chain INPUT (policy DROP 3111 packets, 248K bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- lo any anywhere anywhere
2 8 688 ACCEPT icmp -- eth0 any anywhere anywhere
3 3507 233K ACCEPT tcp -- eth0 any 192.168.1.0/24 anywhere tcp dpt:ssh
4 0 0 ACCEPT tcp -- eth0 any 10.8.0.0/24 anywhere tcp dpt:ssh
5 193K 202M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
6 0 0 ACCEPT udp -- eth0 any anywhere anywhere udp dpt:openvpn
Chain FORWARD (policy DROP 16 packets, 1408 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- eth0 eth0 anywhere anywhere tcp spt:ssh
2 0 0 ACCEPT tcp -- eth0 eth0 anywhere anywhere tcp dpt:ssh
5 97203 12M ACCEPT all -- eth0 tun0 anywhere anywhere
6 190K 190M ACCEPT all -- tun0 eth0 anywhere anywhere state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT 104K packets, 18M bytes)
num pkts bytes target prot opt in out source destination
Ich habe versucht, Regeln wie die folgenden hinzuzufügen:
sudo iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.45 --dport 1194 -j SNAT --to-source 192.168.1.43
sudo iptables -t nat -A PREROUTING -p tcp --sport 1194 -j DNAT --to-destination 192.168.1.1:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.1 --sport 1194 -j SNAT --to-source 192.168.1.45
sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT
aber es hat nicht funktioniert. Ich stecke jetzt fest und konnte online keine Lösung finden ... Ich bin leider auch ein ziemlicher Neuling auf diesem Gebiet, ich habe das nur zum Spaß gemacht und nur durch Ausprobieren gelernt. Jede Hilfe ist sehr willkommen :)
Antwort1
Erfolg! Endlich konnte ich die Pakete so weiterleiten, wie ich es wollte. Die Lösung war, dass iptables allein nicht ausreichte. Ich musste auch das Routing meiner VPN-Pakete ändern und mit dem ip
Befehl eine neue Regel hinzufügen.
So habe ich es geschafft, falls jemand etwas Ähnliches machen möchte:
# do port forwarding to the VPN 2 server and allow forward traffic
iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT
# mark all packets that have to be routed through the 192.168.1.1 gateway
iptables -t mangle -A PREROUTING -p tcp --sport 1194 -j MARK --set-mark 1
# define desired specific route for marked packets
echo 201 openvpn1194.out | tee --append /etc/iproute2/rt_tables
ip rule add fwmark 1 table openvpn1194.out
ip route add default via 192.168.1.1 dev eth0 table openvpn1194.out
Beachten Sie, dass diese Änderungen nach einem Neustart nicht bestehen bleiben und Sie sie dauerhaft machen müssen, wenn Sie damit einverstanden sind.