Im Moment habe ich ein PPTP-VPN auf meinem entfernten Ubuntu-VPS eingerichtet. Ich möchte, dass bestimmte Anwendungen über das VPN auf das Internet zugreifen (ua rtorrent, irssi). Derzeit ist es so eingerichtet:
eth0 Link encap: Ethernet HWaddr 00: 16: 3e: 94: 38: ce inet addr: 66.xxx.xxx.xxx Bcast: 66.xxx.xxx.xxx Maske: 255.255.255.0
eth1 Link encap: Ethernet HWaddr 00: 16: 3e: d7: 58: a1 inet addr: 10.2.0.111 Bcast: 10.255.255.255 Maske: 255.0.0.0
lo Link encap: Lokaler Loopback inet addr: 127.0.0.1 Maske: 255.0.0.0
ppp0 Link encap: Point-to-Point-Protokoll Inet Adr: 192.168.10.244 P-t-P: 192.168.9.1 Maske: 255.255.255.255
Im Wesentlichen ist die Art, wie ich dieses Problem manifestiert habe, so.
Wenn ich renne
curl --interface eth0 checkip.dyndns.com
Ich bekomme
<html><head><title>Current IP Check</title></head><body>Current IP Address: 66.xxx.xxx.xxx</body></html>
Und wenn ich renne
curl --interface ppp0 checkip.dyndns.com
Ich bekomme
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
Welches ist richtig.
Allerdings wenn ich renne
curl --interface 192.168.10.244 checkip.dyndns.com
es mal raus und ich bekomme nichts. Das scheint keinen Sinn zu ergeben, da 192.168.10.244 die IP-Adresse von ppp0 ist, und es scheint mir nicht so, dass sie sich vom obigen Befehl unterscheiden sollte. Fehlt mir etwas? Wenn ich das in curl zum Laufen bringen kann, werde ich es in rtorrent und irssi zum Laufen bringen können, wie ich auch möchte. Gibt es gute Ansatzpunkte, um dieses Problem anzugehen?
BEARBEITEN: Behoben! So habe ich es gemacht.
Zuerst habe ich eine neue Routing-Tabelle erstellt:
# echo "200 vpn" >> /etc/iproute2/rt_tables
Dann erstellte ich eine Regel für Anforderungen, die von meiner ppp0-IP-Adresse abgerufen wurden, um aus dieser neuen Tabelle nachzuschlagen
# ip rule add from 192.168.10.244 table 200
Dann habe ich eine Regel in dieser Tabelle erstellt, um ppp0 zu verwenden.
# ip route add default dev ppp0 table 200
Es funktioniert perfekt! Wenn ich jetzt den zuvor fehlgeschlagenen curl-Befehl versuche:
# curl --interface 192.168.10.244 checkip.dyndns.com
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
Antworten:
Ihre Begründung ist falsch. Beim Binden an eine IP-Adresse wird nur die Quell-IP-Adresse ausgewählt. Es hat keine Auswirkung auf die Route, die Sie zum Ziel führen. Dies ist das, was Sie steuern möchten.
Um das zu tun, was Sie tun möchten, müssen Sie eine Form des Richtlinienroutings einrichten, das als quellenbasiertes Routing bezeichnet wird. Dazu werden normalerweise zwei Routingtabellen erstellt, eine für jede Verbindung, und die zu verwendende Routingtabelle basierend auf der lokalen Quell-IP-Adresse festgelegt. Sehen Sie eine der vielen wie man s auf Richtlinienrouting .
quelle