Ich muss den Verkehr über einen VPN-Server zu einem Host im Internet weiterleiten.
Aufbau:
Computer: Ubuntu-12.04
eth0 - xxxx/24
tun0 - Inet-Adresse: 10.8.0.6 PtP: 10.8.0.5 Maske: 255.255.255.255
Es gibt einen OpenVPN-Server (Amazon):
Ubuntu-12.04
eth0 - jjjj/24
tun0 - Inet-Adresse: 10.8.0.1 PtP: 10.8.0.2 Maske: 255.255.255.255
Es gibt einen Host im Internet IP: qqqq
Ich möchte, dass der Datenverkehr zu qqqq über einen OpenVPN-Server geleitet wird. Dazu mache ich Folgendes:
iptables:
Ich markiere Pakete in der Tabelle Mangle:
sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2
Ich sende Verkehr an qqqq throw tun0:
sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6
iproute2:
Ich erstelle Tabelle "100" in /etc/iproute2/rt_tables
sudo ip rule add fwmark 2 table 100
sudo ip route add default via 10.8.0.5 table 100
tcpdump auf dem 1. Computer:
14:22:04.554399 IP 10.8.0.6 > qqqq.clodo.ru: ICMP-Echoanforderung, ID 11717, Sequenz 1, Länge 64
14:22:04.681918 IP qqqq.clodo.ru > 10.8.0.6: ICMP-Echo-Antwort, ID 11717, Sequenz 1, Länge 64
14:22:05.562577 IP 10.8.0.6 > qqqq.clodo.ru: ICMP-Echoanforderung, ID 11717, Sequenz 2, Länge 64
14:22:05.690240 IP qqqq.clodo.ru > 10.8.0.6: ICMP-Echo-Antwort, ID 11717, Sequenz 2, Länge 64
Aber es gibt keinen Ping. 2 Pakete gesendet, 0 empfangen, 100 % Paketverlust.
Antwort1
Sie müssen die Pakete nicht markieren. Für das, was Sie vorhaben, benötigen Sie Folgendes
Fügen Sie in der Serverkonfigurationsdatei Folgendes hinzu:
"push route q.q.q.q 255.255.255.255"
Das Obige leitet die Route an die Clientseite weiter, sodass der gesamte Datenverkehr, der vom Client an diese IP gesendet wird, durch den OpenVPN-Tunnel gesendet wird.
Auch auf der Serverseite müssen Sie den eingehenden Datenverkehr vom Client akzeptieren. Sie können den gesamten Datenverkehr, der vom Client-Subnetz kommt, wie folgt akzeptieren
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
das hier könntest du auch brauchen, bin mir nicht sicher:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
Sie müssen den eingehenden Datenverkehr vom Client zur Serverseite naten [tun Sie dies auf der Serverseite]
iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER
Und Sie benötigen weder iproute2 noch die Mangle-Tabelle.
Die Reihenfolge der Regeln ist wichtig, also bitte sie vor einer passenden Drop-Regel