VPN Routing

djrick

Registered User
Hallo Zusammen,

Ich habe eine Frage zum Routing von meinem VPN Netzwerk.

Aufbau ist wie folgt:

Einige Clients verbinden sich per OpenVPN zu meinem Server.
Die Clients bekommen alle eine IP aus dem Pool: 10.1.0.0/24
Interface: tun0

Andere Clients verbinden sich über IPSec. Diese Verbinden sich aber mit einem kompletten Subnetz. zB:
192.168.10.0/24 oder 192.168.20.0/24
Der IPSec Server hat die IP 192.168.90.2

Nun möchte ich, dass die OpenVPN Clients die 192.168.10.1 erreichen können.

Dazu habe ich zunächst folgende Route eingetragen auf dem Server:
Code:
192.168.10.1  192.168.90.2    255.255.255.255 UGH   0      0        0 eth0
Nun kann ich vom Server aus alle OpenVPN Clients pingen und auch die 192.168.10.1. Jedoch nicht von den OpenVPN Clients aus.

Wie muss das Routing auf dem Server dafür aussehen und wie muss die OpenVPN Config aussehen?

Hier mal die aktuelle route:
Code:
vpn:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.1  192.168.90.2    255.255.255.255 UGH   0      0        0 eth0
192.168.10.1  10.1.0.2        255.255.255.255 UGH   0      0        0 tun0
10.1.0.2        *               255.255.255.255 UH    0      0        0 tun0
188.40.xxx.xxx    *               255.255.255.192 U     0      0        0 eth0
192.168.10.0    *               255.255.255.0   U     0      0        0 eth0
192.168.20.0    *               255.255.255.0   U     0      0        0 eth0
192.168.30.0    *               255.255.255.0   U     0      0        0 eth0
10.1.0.0        10.1.0.2        255.255.255.0   UG    0      0        0 tun0
192.168.90.0    *               255.255.255.0   U     0      0        0 eth0
default         xen0            0.0.0.0         UG    0      0        0 eth0

Hier die OpenVPN SERVER Config (relevante Teile):
Code:
client-to-client
route 192.168.10.1 255.255.255.255
push "route 10.1.0.0 255.255.255.0"
push "route 192.168.10.1 255.255.255.255"

Ich hoffe ihr könnt mir weiterhelfen
 
Last edited by a moderator:
Es muß heißen:
push "route 192.168.10.0 255.255.255.0"
Du willst ja das ganze Subnetz erreichen und nicht nur das Gateway. Der Befehl sorgt dafür, daß OpenVPN auf der Client-Seite die Routen setzt, so daß diese wissen, daß sie die Netze über das tun-Interface erreichen.
Es sollte außerdem ausreichen, die Routen zu deinen VPN-Netzen (IPSec und OpenVPN!) dem Default-Gateway bekannt zu machen, dann brauchst du sie nur an einer Stelle zu pflegen. Wenn du die Regeln weiter auf deinem OpenVPN-Gateway pflegen willst, dann mußt du übrigens auch eine Routing-Regel auf dem IPsec-Gateway für die IP-Range der OpenVPN-Clients eintragen, die auf das OpenVPN-Gateway zeigt (die Antwort-Pakete wollen ja schließlich auch geroutet werden)
Ich habe bei mir die Routen zu meinem VPN-Gateway daheim übrigens nur auf dem Default-Gateway (dem Internet-Router) eingetragen.
 
Kommt aus das Gateway an. Wenn es eine Fritzbox o.ä. ist, dann gibt es sicherlich Möglichkeiten im Webinterface (IP-Range und Maske der IPSec-Range, also z.B. 192.168.10.0/255.255.255.0 mit Gateway 192.168.90.2
Wenn das Gateway mit Linux läuft, einfach mit dem Route-Befehl festlegen:
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.90.2
Das ganze natürlich entsprechend für die zweite IPsec-Range wiederholen und für die OpenVPN-Range dann mit der IP des OpenVPN-Servers als Gateway.
Auf den beiden VPN-Gateways brauchst du dann keine statischen Routen mehr erstellen, wenn beide sich in der gleichen Range befinden, werden sie automatisch dynamische Routing-Regeln erstellen (so daß das Default-Gateway kaum zusätzliche Last bekommt).
 
Alles klar, die Route sieht jetzt so aus:
Code:
vpn:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.1.0.2        *               255.255.255.255 UH    0      0        0 tun0
188.40.xxx.xxx    *               255.255.255.192 U     0      0        0 eth0
192.168.10.0    192.168.90.2    255.255.255.0   UG    0      0        0 eth0
192.168.10.0    *               255.255.255.0   U     0      0        0 eth0
10.1.0.0        10.1.0.2        255.255.255.0   UG    0      0        0 tun0
192.168.90.0    *               255.255.255.0   U     0      0        0 eth0
default         xen0            0.0.0.0         UG    0      0        0 eth0

10.1.0.0 = Netz vom OpenVPN (10.1.0.2 = IP vom OpenVPN Server)
192.168.10.0 = Netz IPSec

auf diesem Server kann ich in alle Netze pingen. Vom OpenVPN Client kann ich aber keine IP aus dem Netz 192.168.10.0 pingen. Die Route wird aber gepusht, der OpenVPN Client zeigt mir die richtige Route an.

By the way: Es ist ein Linuxserver keine Fritzbox.
 
Du mußt auch eine Route für die OpenVPN-Range (ich gehe jetzt mal davon aus, daß du eine Class C-Range verwendest) eintragen. Wenn der OpenVPN-Server auf eth0 die 192.168.90.3 haben sollte, dann müßtest du auf dem Router oder IPsec-Gateway noch folgende Route anlegen:
route add -net 10.1.0.0 netmask 255.255.255.0 gw 192.168.90.3
Wie gesagt: Am sinnvollsten richtest du die Routen nur auf dem Default-Gateway (also der Maschine xen0) ein, denn dann greifen sie für jede Maschine, die dieses Gateway als Default-Gateway nutzt. Spezielle Routen auf den beiden VPN-Gateways brauchst du nicht.
Ach ja, eine Sache ist mir noch eingefallen: Du solltest in der OpenVPN-Config auch noch eine Route für das 192.68.90.0 Netz pushen, damit dieses auch von den VPN-Clients erreichbar ist.
 
Also die machine xen0 etc kannst du glaube ich vernachlässigen.

Ich habe mal ein Bildchen gemalt.
Ich möchte dass sich beide Clients über den Server erreichen können. Eigentlich ne ganze simple Sache...........dachte ich.
 

Attachments

  • Unbenannt6z.JPG
    Unbenannt6z.JPG
    18.4 KB · Views: 127
Also laufen IPsec und OpenVPN auf dem gleichen Server? Dann brauchst du auf dem Server gar keine Routen, da der Server die Netze ja alle kennt. Routen mußt du nur erstellen, damit die anderen Rechner in deinem LAN auch die Clients erreichen und von diesen erreicht werden können.
Das läßt bei mir die Vermutung aufkommen, daß das IP-forwarding auf deinem VPN-Server einfach nicht aktiviert ist (ohne erfolgt kein Routing von einem Interface zum anderen). Zum direkten aktivieren unter Linux:
Code:
echo 1 > /proc/sys/net/ipv4/ip_forward
Dauerhaft änderst du am besten die entsprechende Option in der /etc/sysctl.conf von 0 auf 1
 
Richtig, IPSec und OpenVPN sind auf der selben Kiste.

Die einen verbinden sich halt über die OpenVPN Software und dann haben wir wiederrum Clients die sich über einen Hardware Netgear Router per IPSec mit dem Server verbinden.

Das IPForwarding ist natürlich aktiviert :)
 
Kannst du mal einen Traceroute von einem OpenVPN-Client auf eine per IPsec angebundene Kiste machen? Das sollte ja zeigen, an welcher Stelle es klemmt.
 
Es klemmt, wie vermutet am Server :)

Ich hab mich mal per OpenVPN Verbunden (meine Client IP: 10.1.0.6) und dann einen traceroute gemacht:
Code:
C:\Dokumente und Einstellungen\djrick>tracert 192.168.20.250

Routenverfolgung zu 192.168.20.250 über maximal 30 Abschnitte

  1    15 ms    35 ms    16 ms  10.1.0.1
  2     *        *
die route wird gepusht und die IP ist vom Server aus auch pingbar.
10.1.0.1 ist natürlich die OpenVPN Server IP.

Die Route auf dem Server sieht im Moment so aus:
Code:
vpn:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.1.0.2        *               255.255.255.255 UH    0      0        0 tun0
188.40.xxx.xxx    *               255.255.255.192 U     0      0        0 eth0
192.168.20.0    192.168.90.2    255.255.255.0   UG    0      0        0 eth0
192.168.20.0    *               255.255.255.0   U     0      0        0 eth0
192.168.50.0    *               255.255.255.0   U     0      0        0 eth0
192.168.60.0    *               255.255.255.0   U     0      0        0 eth0
10.1.0.0        10.1.0.2        255.255.255.0   UG    0      0        0 tun0
192.168.90.0    *               255.255.255.0   U     0      0        0 eth0
default         xen0            0.0.0.0         UG    0      0        0 eth0
 
Last edited by a moderator:
Dieser Eintrag muß raus, den Eintrag hast du ja glaube ich händisch angelegt:
Code:
192.168.20.0    192.168.90.2    255.255.255.0   UG    0      0        0 eth0
Läßt sich denn vom OpenVPN-Client aus die 192.168.90.2 anpingen? Wenn ja, könnte es auch ein IPsec-Problem sein und IPsec ist nicht so mein Ding.
Überprüf auch auf dem OpenVPN-Client mal, ob die Routen dort auch wirklich aktiv werden - wenn es ein Windows-Client ist und der User keine Adminrechte hat, klappt das standardmäßig nicht.
 
Wenn ich diesen Eintrag rausnehme, dann läßt sich das 20er Netz auch vom Server nicht mehr pingen.

Mit oder ohne diesem Eintrag funktioniert es jedenfalls nicht.

Die 192.168.90.2 (Server) kann ich vom OpenVPN Client aus pingen.

Der Client ist ein WindowsXP Cient und die routen werden beim verbinden gesetzt.
 
Puh, dann gehen mir die Ideen aus, denke, das es am IPsec liegen könnte, aber IPsec ist nicht mein Ding
 
Ich habe überlegt den ganzen Traffic ließe sich doch bestimmt auch via iptables forwarden, oder?

Wie geht das? ;)
 
Back
Top