Ich habe eine neue VPN-Verbindung (mit openvpn), mit der ich einige ISP-Einschränkungen umgehen kann. Während es gut funktioniert, nimmt es den gesamten Verkehr über den VPN. Dies führt zu Problemen beim Herunterladen (meine Internetverbindung ist viel schneller als der VPN zulässt) und beim Fernzugriff. Ich verwende einen SSH-Server und einen Daemon, mit dem ich Downloads über mein Telefon planen kann.
Ich habe meine bestehende Ethernet-Verbindung auf eth0 und die neue VPN-Verbindung auf tun0.
Ich glaube, ich muss die Standardroute einrichten, um meine vorhandene eth0-Verbindung im Netzwerk 192.168.0.0/24 zu verwenden, und das Standardgateway auf 192.168.0.1 einstellen (mein Wissen ist wackelig, da ich dies seit einigen Jahren nicht mehr getan habe ). Wenn das richtig ist, bin ich mir nicht ganz sicher, wie ich es machen soll!. Meine aktuelle Routing-Tabelle lautet:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
0.0.0.0 10.51.0.169 0.0.0.0 UG 0 0 0 tun0 0 0 0
10.51.0.1 10.51.0.169 255.255.255.255 UGH 0 0 0 tun0 0 0 0
10.51.0.169 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 0 0 0
85.25.147.49 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0 0 0 0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 0 0 0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 0 0 0
Nach dem Korrigieren des Routings muss ich iptables verwenden, um das Prerouting oder Masquerading zu konfigurieren und alles für den Zielport 80 oder 443 über tun0 zu erzwingen. Auch hier bin ich mir nicht ganz sicher, wie ich das machen soll!
Alles, was ich im Internet gefunden habe, versucht, etwas viel Komplizierteres zu tun, und der Versuch, das Holz von den Bäumen zu sortieren, erweist sich als schwierig.
Jede Hilfe wäre sehr dankbar.
AKTUALISIEREN
Bisher habe ich aus den verschiedenen Quellen Folgendes zusammengeschustert:
#!/bin/sh
DEV1=eth0
IP1=`ifconfig|perl -nE'/dr:(\S+)/&&say$1'|grep 192.`
GW1=192.168.0.1
TABLE1=internet
TABLE2=vpn
DEV2=tun0
IP2=`ifconfig|perl -nE'/dr:(\S+)/&&say$1'|grep 10.`
GW2=`route -n | grep 'UG[ \t]' | awk '{print $2}'`
ip route flush table $TABLE1
ip route flush table $TABLE2
ip route show table main | grep -Ev ^default | while read ROUTE ; do
ip route add table $TABLE1 $ROUTE
ip route add table $TABLE2 $ROUTE
done
ip route add table $TABLE1 $GW1 dev $DEV1 src $IP1
ip route add table $TABLE2 $GW2 dev $DEV2 src $IP2
ip route add table $TABLE1 default via $GW1
ip route add table $TABLE2 default via $GW2
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
ip rule add from $IP1 lookup $TABLE1
ip rule add from $IP2 lookup $TABLE2
ip rule add fwmark 1 lookup $TABLE1
ip rule add fwmark 2 lookup $TABLE2
iptables -t nat -A POSTROUTING -o $DEV1 -j SNAT --to-source $IP1
iptables -t nat -A POSTROUTING -o $DEV2 -j SNAT --to-source $IP2
iptables -t nat -A PREROUTING -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j CONNMARK --restore-mark
iptables -t nat -A PREROUTING -i $DEV1 -m state --state NEW -j CONNMARK --set-mark 1
iptables -t nat -A PREROUTING -i $DEV2 -m state --state NEW -j CONNMARK --set-mark 2
iptables -t nat -A PREROUTING -m connmark --mark 1 -j MARK --set-mark 1
iptables -t nat -A PREROUTING -m connmark --mark 2 -j MARK --set-mark 2
iptables -t nat -A PREROUTING -m state --state NEW -m connmark ! --mark 0 -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -i $DEV2 -m state --state NEW -p tcp --dport 80 -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -i $DEV2 -m state --state NEW -p tcp --dport 443 -j CONNMARK --set-mark 2
route del default
route add default gw 192.168.0.1 eth0
Nun scheint das zu funktionieren. Außer es ist nicht!
Verbindungen zu den blockierten Websites werden hergestellt , Verbindungen, die nicht an den Ports 80 und 443 angeschlossen sind, verwenden die Nicht-VPN-Verbindung.
Jedoch Port 80 und 443 Verbindungen , die nicht sind auf die gesperrten Webseiten werden mit der Nicht-VPN - Verbindung auch!
Da das allgemeine Ziel erreicht wurde, bin ich relativ glücklich, aber es wäre schön zu wissen, warum es nicht genau richtig funktioniert.
Irgendwelche Ideen?
Als Referenz habe ich jetzt 3 Routing-Tabellen, main, internet und vpn. Die Auflistung von ihnen ist wie folgt ...
Main:
default via 192.168.0.1 dev eth0
10.38.0.1 via 10.38.0.205 dev tun0
10.38.0.205 dev tun0 proto kernel scope link src 10.38.0.206
85.removed via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.73 metric 1
Internet:
default via 192.168.0.1 dev eth0
10.38.0.1 via 10.38.0.205 dev tun0
10.38.0.205 dev tun0 proto kernel scope link src 10.38.0.206
85.removed via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.73 metric 1
192.168.0.1 dev eth0 scope link src 192.168.0.73
VPN:
default via 10.38.0.205 dev tun0
10.38.0.1 via 10.38.0.205 dev tun0
10.38.0.205 dev tun0 proto kernel scope link src 10.38.0.206
85.removed via 192.168.0.1 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.73 metric 1