OpenVPN Routing Frage

pechspilz

Neuer User
Mitglied seit
1 Okt 2010
Beiträge
17
Punkte für Reaktionen
0
Punkte
0
Servus allerseits!

Ich möchte auf meiner 7390 (standard image) einen openvpn client laufen lassen und bestimmte Netzwerke über einen externen Server routen.

Installiert ist soweit mal alles und der Client kann sich erfolgreich mit dem Server verbinden. Auf dem Server kann ich die Box pingen und von der Box den Server. Das war's dann aber schon. Der Ping vom Netz hinter der Box kommt auf dem VPN Server nicht an. Die 7390 läuft auf dem 192.168.178.0 Netz, der VPN Server im 10.8.0.0.

Fritzbox-Tun Device:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255


VPN-Server Tun Device:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255


In der server.conf sieht das so aus:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
route 192.168.178.0 255.255.255.0
comp-lzo
persist-key
persist-tun

Die Routingtabelle in der Box schaut so aus:
Code:
10.8.0.5        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
10.8.0.1        10.8.0.5        255.255.255.255 UGH   0      0        0 tun0
192.168.180.1   0.0.0.0         255.255.255.255 UH    2      0        0 dsl
192.168.180.2   0.0.0.0         255.255.255.255 UH    2      0        0 dsl
192.168.178.201 0.0.0.0         255.255.255.255 UH    2      0        0 dsl
192.168.178.0   0.0.0.0         255.255.255.0   U     0      0        0 lan
192.168.179.0   0.0.0.0         255.255.255.0   U     0      0        0 guest
x.x.x.x         0.0.0.0         255.255.252.0   U     2      0        0 dsl
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 lan
0.0.0.0         0.0.0.0         0.0.0.0         U     2      0        0 dsl

Auf dem VPN Server:
Code:
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.178.0   10.8.0.2        255.255.255.0   UG    0      0        0 tun0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 eth0
Was fehlt mir denn hier noch, damit der Ping vom/zum VPN aus dem 192.168.178.0 Netz funktioniert?
 
Zuletzt bearbeitet:
Wichtig ist, dass die 7390 in dem Netz 192.168.178.0 auch das Default-Gateway ist. Sonst finden die PCs aus dem Netz den VPN-Server nicht.

Kann der OpenVPN-Server die FB auch mit ihrer IP im 192.168.178.0-Netz erreichen?

Da sich prinzipiell mehrere Clients verbinden könnten, müsstest du eigentlich sicher stellen, dass die Pakete für das Netz 192.168.178.0 auch zum "richtigen" Client geroutet werden. Dafür müsstest du auf dem Server mit "client-config-dir" arbeiten, wobei dem Client (abhängig vom Namen im Zertifikat) eine IP zugeordnet wird und dafür auch das Routing angelegt werden kann (mit "iroute"). Woher sollte der Server sonst wissen, bei welchem Client das Netz ist?
Du siehst die prinzipielle Problematik schon oben:
Der Client hat die IP 10.8.0.6 bekommen, der Server hat aber die Route zu 10.8.0.2 eingetragen. Das ist so zwar hier "egal", denn der Eintrag ist nur für den Kernel, damit der OpenVPN-Prozess die Pakete bekommt, aber zum richtigen Weiterrouten benötigt das OpenVPN dann noch "iroute" Einträge. So dürftest du beim Server Meldungen bekommen mit "MULTI: bad source address from client ... ".
 
Vielen Dank für deine Antwort. Muss zwar zuerst etwas darüber brüten aber das wird schon :)
 
Melde dich, wenn das Brüten fertig ist, oder du nicht weiter kommst ;-).

Du kannst aber doch schon mal die zwei Sachen "ausprobieren", die oben stehen
(Ping auf die LAN-IP der Box und VPN-Log auf dem Server ansehen, nachdem du Zugriffe von PCs aus deinem LAN gemacht hast. Wenn du im Server-Log die o.g. Fehlermeldung siehst, benötigst du "client-config-dir".)

Das CCD ist ein Ordner auf dem Server, in dem eine Textdatei mit dem Namen deines Clients steht, so wie du ihn im Zertifikat genannt hast (CN). Heißt die Box "client01" und dein Ordner "/var/openvpn/CCD" , so sollte es eine Datei "/var/openvpn/CCD/client01" geben, die mindestens diesen einen Eintrag enthalten sollte:

Code:
iroute 192.168.178.0 255.255.255.0

In der Config des Servers dann zusätzlich:
Code:
client-config-dir /var/openvpn/CCD
 
Habe es dank deiner Hilfe hinbekommen. In der client-config steht drin:
ifconfig-push 10.8.0.10 10.8.0.9
push "route 192.168.178.0 255.255.255.0"
iroute 192.168.178.0 255.255.255.0

Zusätzlich musste in die server.conf rein (nimmt openvpn in der ccd config nicht an):
route 192.168.178.0 255.255.255.0

Nun ist vom VPN-Server das interne Netz der 7390 sichtbar und umgekehrt. So weit so gut. Wie muss ich nun vorgehen, wenn ich beispielsweise diese Adresse hier:
174.132.254.58 (von http://www.cmyip.com - zeigt die IP Adresse des aufrufers an) nur über das VPN routen möchte?

In meiner Netzwerk-Naivität habe ich einfach mal probiert, mit Netmask 255.255.255.255 diese Adresse genau gleich wie oben beschrieben zusätzlich zu routen. Ergebnis ist, dass mir beim Seitenaufruf immer meine DSL-IP angezeigt wird statt meiner VPN-Server IP. Auf die 7390 wird diese Route zwar gepushed beim Verbindungsaufbau, aber der Client legt sie in der Routing-Tabelle nicht an. Wo ist denn hier mein Denkfehler?
 
In der client-config steht drin:
push "route 192.168.178.0 255.255.255.0"
Das ist eigentlich nicht so eine gute Idee, damit schickst du dem Client den Befehl, er solle sich eine Route zu 192.168.178.0 über das VPN eintragen. Das ist aber sein lokales Netz, das soll er lieber lokal nutzen und nicht ins VPN routen ;-).
Für die Route zu bestimmten Zielen ist das aber eigentlich o.k.

Versuche doch mal diese Config:
Code:
ifconfig-push 10.8.0.10 10.8.0.9
push "route-gateway 10.8.0.9"
push "route 174.132.254.58 255.255.255.255"
iroute 192.168.178.0 255.255.255.0
Gab es irgendeine Meldung, warum die 7390 die "gepushte" Route nicht eingetragen hatte???
 
Mit der von dir genannten Config werden alle Routen eingetragen.

Auf der 7390 sieht das jetzt so aus:

Code:
174.132.254.58  10.8.0.9        255.255.255.255 UGH   0      0        0 tun0
192.168.180.1   0.0.0.0         255.255.255.255 UH    2      0        0 dsl
192.168.180.2   0.0.0.0         255.255.255.255 UH    2      0        0 dsl
192.168.178.201 0.0.0.0         255.255.255.255 UH    2      0        0 dsl
10.8.0.9        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.178.0   0.0.0.0         255.255.255.0   U     0      0        0 lan
192.168.179.0   0.0.0.0         255.255.255.0   U     0      0        0 guest
10.8.0.0        10.8.0.9        255.255.255.0   UG    0      0        0 tun0
x.x.x.x         0.0.0.0         255.255.252.0   U     2      0        0 dsl
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 lan
0.0.0.0         0.0.0.0         0.0.0.0         U     2      0        0 dsl

Auf dem VPN-Server so:
Code:
174.132.254.58  10.8.0.2        255.255.255.255 UGH   0      0        0 tun0
10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.178.0   10.8.0.2        255.255.255.0   UG    0      0        0 tun0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0

Die Route für 192* habe ich in der server.conf eingetragen.

Code:
...
route 192.168.178.0 255.255.255.0
Wenn ich die 192* in der server.conf weglasse funktioniert sonst das VPN nicht.

Der Ping auf den 174* Host funktioniert von der 7390, allerdings nicht von einem Client hinter dem 192 Subnet.

Die CCD config habe ich 1:1 von dir übernommen. IP-Forwarding auf dem VPN-Server ist natürlich an und funktioniert auch, wenn ich direkt von meinem PC ein VPN auf den Server aufbaue.

Wäre toll wenn du noch einen guten Tipp auf Lager hättest.
 
Zuletzt bearbeitet:
Das mit der "route ..." in der Server-Config ist immer so (hatte ich oben mal versucht zu erklären: das sorgt dafür, dass der Kernel die Pakete überhaupt zum OpenVPN schickt, das iroute im ccd sorgt dann dafür, dass es zum richtigen Client kommt).

Ich vermute mal, der Zugriff aus dem LAN auf diese IP läuft dann "ins Leere"? Ein "trace" endet auf dem Server?
Dann musst du wohl dem Server noch "beibringen", dass auch das Netz 192.168.178.0 auf seine offizielle IP zu Natten ist. Das OpenVPN-Netz ist ja angeschlossen, das "kennt" er vermutlich, aber Adressen aus 192.168.178.0 nicht.
 
Genau, der ping auf den 174er Host aus einem Client im 192er Netz kommt im VPN-Server auf tun0 an. Ich sehe ihn allerdings nicht auf venet0 rausgehen.
 
Hoppla falsch, stimmt nicht:

22:01:16.032093 IP 192.168.178.20 > 174.132.254.58: ICMP echo request, id 45320, seq 44, length 64
22:01:17.032993 IP 192.168.178.20 > 174.132.254.58: ICMP echo request, id 45320, seq 45, length 64
22:01:18.034457 IP 192.168.178.20 > 174.132.254.58: ICMP echo request, id 45320, seq 46, length 64
22:01:19.035992 IP 192.168.178.20 > 174.132.254.58: ICMP echo request, id 45320, seq 47, length 64
22:01:20.036812 IP 192.168.178.20 > 174.132.254.58: ICMP echo request, id 45320, seq 48, length 64

Das heisst also, der Rückweg passt noch nicht?
 
Gibts da eine Firewall, der das auch noch "beigebogen" werden muss? Also einmal muss es natürlich zum passenden Interface raus (dürfen), zum andern dabei auch noch "genatted" werden....
 
Es handelt sich hier um eine virtualisierte openVZ Umgebung, dahinter gibt's bestimmt eine Firewall irgendwo - auf die habe ich natürlich keinen Einfluss.
 
Naja, raus scheint es ja zu gehen. Gibt es iptables auf der Box? Mit welcher Config?
( iptables -L ; iptables -t nat -L)

EDIT: mit "Box" meinte ich hier die openVZ Kiste ;-)
 
Zuletzt bearbeitet:
Musste mich erst mal schlau machen was natten ist, wie gesagt ich bin da noch nicht so ganz zu Hause bei diesen Netzwerk-Geschichten. Jetzt habe ich jedenfalls verstanden was du meintest und mit folgender Regel funktioniert alles wie gewünscht:
iptables -t nat -A POSTROUTING -s 192.168.178.0/24 -o venet0 -j SNAT --to-source $(ifconfig venet0:0 | grep -i 'inet' | cut -d: -f2 | awk '{ print $1}')

(SNAT wird bei diesen virtuellen openVZ Kisten benötigt)

Ganz herzlichen Dank für deine Hilfe, das hat mir vermutlich Tage des Brütens erspart ;-)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.