OpenVPN für bestimmte IPs, eth0 für alles andere

9

Zusammenfassung: Ich möchte eine Verbindung zu meinem VPN herstellen und Zugriff auf bestimmte Server haben, aber für den gesamten anderen Datenverkehr möchte ich mein reguläres Netzwerk verwenden.

Ich habe einen OpenVPN-Server auf meinem VPS eingerichtet. Meine server.confDatei sieht folgendermaßen aus:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log         /var/log/openvpn.log
verb 4
push "route 10.132.0.0 255.255.0.0"

Ich verwende die folgende .ovpnDatei, um die VPN-Verbindung einzurichten:

client
dev tun
proto udp
remote <my.vpn.server.com> 1194
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
<ca>....</ca>
<cert>...</cert>
<key>...</key>

Schließlich habe ich im Netzwerk-Manager für die VPN-Verbindung unter IPv4-Einstellungen sichergestellt, dass die "Methode" auf "Nur automatische (VPN) Adressen" eingestellt ist.

VPN stellt eine gute Verbindung her, ich kann auf alle internen Server zugreifen, die ich benötige (10.132.xx), aber ich kann auf nichts anderes zugreifen (wie google.com). Ich möchte, dass meine eth0-Einstellungen für alles verwendet werden, außer für die IP-Adressen 10.132.xx, die ich über das VPN weiterleiten möchte.

PS basierend auf anderen Artikeln, die ich no-pullin der .ovpn-Datei verwendet und dort in meinen routeEinstellungen hinzugefügt habe , aber ohne Erfolg.

EDIT 1 :

Ergebnisse der Ausführung ip aund traceroutewährend der Verbindung mit VPN:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:dc:a6:ef brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 86320sec preferred_lft 86320sec
    inet6 fe80::f3d1:6eb3:e13e:d61b/64 scope link 
       valid_lft forever preferred_lft forever
15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.6 peer 10.8.0.5/32 brd 10.8.0.6 scope global tun0
       valid_lft forever preferred_lft forever

$ traceroute google.com
google.com: Temporary failure in name resolution
Cannot handle "host" cmdline arg `google.com' on position 1 (argc 1)

EDIT 2 : Ergebnisse vonip r

$ ip r
default via 10.8.0.5 dev tun0  proto static  metric 50 
default via 10.0.2.2 dev eth0  proto static  metric 100 
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15  metric 100 
10.8.0.1 via 10.8.0.5 dev tun0  proto static  metric 50 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6  metric 50 
10.132.0.0/16 via 10.8.0.5 dev tun0  proto static  metric 50 
104.236.239.153 via 10.0.2.2 dev eth0  proto static  metric 100 
169.254.0.0/16 dev eth0  scope link  metric 1000 
ThaDon
quelle
Könnten Sie die Ausgabe von ip aund traceroute google.comwährend der Verbindung mit dem VPN veröffentlichen? Die Konfiguration sieht für mich gut aus.
Lenniey
@ Lenniey hat die Frage mit den Ergebnissen aktualisiert. Nicht sicher, ob es sich lohnt, darauf hinzuweisen oder nicht, aber der Client-Computer befindet sich in einem VPN. Wenn ich traceroute google.comohne VPN verbunden bin , heißt es: `1 10.0.2.2 (10.0.2.2) 0.136 ms 0.092 ms 0.127 ms`
ThaDon
Entschuldigung, ich wollte ip r... die Routen sehen. Können Sie google.com auflösen / pingen, wenn Sie nicht mit dem VPN verbunden sind? Scheint nicht so, als ob du es kannst. Und wenn Sie nicht können: Wie sollten Sie eth0 verwenden können, um eine Verbindung zum Internet herzustellen, oder was auch immer?
Lenniey
Hoppla, bedeutet "der Client-Computer befindet sich in einer VM", nicht VPN.
ThaDon
@ Lenniey Ich glaube, das könnte ein VM-Netzwerk sein, das Streiche spielt. Ich kann google.com problemlos von Curl oder einem Browser laden, wenn keine Verbindung zum VPN besteht, obwohl die Traceroute mondän aussieht. Ich habe die Antwort mitip r
ThaDon

Antworten:

9

Das Kontrollkästchen " Diese Verbindung nur für Ressourcen in seinem Netzwerk verwenden " im nm-Verbindungseditor steuert, ob NetworkManager eine Standardroute über das VPN hinzufügen soll. Wenn diese Option aktiviert ist, werden nur Pakete, die an das VPN-Subnetz gerichtet sind, über das VPN-Gateway geleitet, und das System verwendet die vorhandene Standardroute für andere Ziele.

Sie können dieselbe Einstellung über die Befehlszeile mit nmcli ändern:

nmcli connection modify <VPN connection> ipv4.never-default yes
Bengalen
quelle
+1 Briljant! Dies ist die richtige Antwort, wenn Sie einen Fehler in Ihrem NetworkManager haben, der Sie daran hindert, Änderungen an Ihrer Verbindungskonfiguration zu speichern.
Bart Weber
7

Ich habe es geschafft, den gewünschten Effekt zu erzielen, indem ich mit der Client-GUI (Ubuntu NetworkManager) herumgespielt habe. Ich musste sicherstellen, dass das Kontrollkästchen unter IPv4 Settings -> Routes"Diese Verbindung nur für Ressourcen in seinem Netzwerk verwenden" aktiviert war:

"Verwenden Sie diese Verbindung nur für Resrouces in ihrem Netzwerk

Ich bin mir nicht ganz sicher, was ich in der .ovpn-Datei tun müsste, um dies zu replizieren.

Meine Routing-Tabelle sieht jetzt so aus:

$ sudo netstat -r -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.132.0.0      10.8.0.5        255.255.0.0     UG        0 0          0 tun0
104.236.239.153 10.0.2.2        255.255.255.255 UGH       0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

Denken Sie daran, dass ich das push "route 10.132.0.0 255.255.0.0"in meinem hatte, server.confdamit der Eintrag für erklärt wird 10.132.0.0und warum ich jetzt auf meine Server zugreifen kann, während alles andere außerhalb des VPN geroutet wird (dh der 0.0.0.0Eintrag).

Ohne dass diese Einstellung in der GUI überprüft wurde, sah meine Routing-Tabelle folgendermaßen aus:

$ sudo netstat -r -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.8.0.5        0.0.0.0         UG        0 0          0 tun0
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.132.0.0      10.8.0.5        255.255.0.0     UG        0 0          0 tun0
104.236.239.153 10.0.2.2        255.255.255.255 UGH       0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

Ich vermute, dass der erste 0.0.0.0Eintrag (Standardroute) alles durcheinander gebracht hat.

ThaDon
quelle
3
Es gibt also eine ovpn-Option zum Ausschalten dieses Use this connection only for resources on its networkVerhaltens, die aufgerufen wird redirect-gateway def1. Dies entspricht dem Deaktivieren des Kontrollkästchens. Wenn diese Einstellung nicht vorhanden ist, muss die Client-GUI entscheiden, ob standardmäßig der gesamte Datenverkehr über das VPN geleitet werden soll. Im Fall von Ubuntu NetworkManager wird OpenVPN standardmäßig mit gestartet, --redirect-gateway def1aber nicht, wenn Sie dieses Kontrollkästchen
aktivieren
3

Um die Antwort von jdmorei zu erläutern, benötigen Sie ein sogenanntes "Split-Tunnel" -VPN - Sie hatten tatsächlich fast die Lösung, als Sie sagten : P.S. based on other articles I've tried using no-pull in the .ovpn file and adding in my route settings there but to no avail..

Sie möchten Folgendes in Ihrer ovpn-Datei haben:

route-nopull # Make sure not to pull the default routes
route 10.8.0.0 255.255.255.0 # Route the /24 of 10.8.0.0 across the VPN
route 192.168.2.2 255.255.255.255 # Route the /32 (single IP) across the VPN

Der Schlüssel ist nun, dass Sie, da Sie Windows ausführen, die openvpn-Anwendung als Administrator ausführen müssen . Wenn Sie dies nicht tun, werden Einträge im Protokoll wie folgt angezeigt:

Sat Nov 13 11:31:05 2010 ROUTE: route addition failed using CreateIpForwardEntry
: Access denied.   [status=5 if_index=11]
The requested operation requires elevation. 
Sat Nov 13 11:31:05 2010 ERROR: Windows route add command failed [adaptive]: ret
urned error code 1
Sat Nov 13 11:31:05 2010 Initialization Sequence Completed
Brennen Smith
quelle
Tatsächlich ist die VM (wo sich der VPN-Client befindet) Ubuntu 16.04. Ich werde Ihre Vorschläge ausprobieren, danke!
ThaDon
Ah - Entschuldigung, als Sie Netzwerkmanager sagten, hatte ich Windows angenommen. Wenn Sie Ihr openvpn-Verbindungsprotokoll veröffentlichen könnten, wäre dies ebenfalls hilfreich
Brennen Smith,
Sieht so aus, als hätte ich das Rätsel gelöst, aber wissen Sie zufällig, wie ich das, was ich getan habe, über die .ovpn-Datei anstatt über die GUI konfigurieren kann, wie in meiner Antwort dargestellt?
ThaDon
0

wenn Ihr Server / 24 ist ( 10.8.0.X )

Server 10.8.0.0 255.255.255.0

und Route für Ihre Kunden ist / 16 ( 10.132.XX )

Drücken Sie "route 10.132.0.0 255.255.0.0".

Vielleicht wäre es kein Konflikt?

jdmorei
quelle