PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenVPN und Routing



DFYX
05.11.2009, 15:08
Ums kurz zu machen, ich würde gerne folgendes Szenario realisieren, möglichst mit OpenVPN:


Server: steht im Rechenzentrum und hat eine feste Adresse, kein Problem, soll im VPN die 10.8.0.1 erhalten
Stationärer Client 1 (bei mir daheim): Rechner oder Router, sitzt in einem 192.168.0.0/24 Subnetz, das komplett auf 10.8.1.0/24 gemappt werden soll.
Stationärer Client 2 (bei einem Freund daheim): Rechner oder Router, sitzt in einem 192.168.0.0/24 Subnetz, das komplett auf 10.8.2.0/24 gemappt werden soll.
[...]
Mobile Clients: (Laptops in der Uni etc.) sollen feste Adressen aus 10.8.0.0/24 erhalten.

Im Idealfall sollten die mobilen Clients ihre Adressen sogar dann behalten, wenn sie sich physikalisch in den Netzen der stationären Clients sitzen. Also etwa wenn ich meinen Laptop daheim an den Router klemm, ohne einen eigenen VPN Client zu starten. Das ist aber mehr nette Dreingabe.

Das Ganze ist eine Menge Routingaufwand, weshalb es ganz gut zu wissen wäre, ob das überhaupt ohne mehrtägigen Aufwand mit OpenVPN realisierbar ist, bevor ich mich da großartig einles. Auf dem Server läuft Ubuntu, als stationäre Clients sind derzeit Rechner mit Ubuntu und Windows 2003 Server XP in Betrieb, die anderen Rechner in den LANs der stationären Clients und die mobilen Clients haben wohl Windows XP, Windows 7 und OS X Snow Leopard, vielleicht auch noch Ubuntu.

dead_orc
07.11.2009, 23:00
Ums kurz zu machen, ich würde gerne folgendes Szenario realisieren, möglichst mit OpenVPN:


Server: steht im Rechenzentrum und hat eine feste Adresse, kein Problem, soll im VPN die 10.8.0.1 erhalten
Stationärer Client 1 (bei mir daheim): Rechner oder Router, sitzt in einem 192.168.0.0/24 Subnetz, das komplett auf 10.8.1.0/24 gemappt werden soll.
Stationärer Client 2 (bei einem Freund daheim): Rechner oder Router, sitzt in einem 192.168.0.0/24 Subnetz, das komplett auf 10.8.2.0/24 gemappt werden soll.
[...]
Mobile Clients: (Laptops in der Uni etc.) sollen feste Adressen aus 10.8.0.0/24 erhalten.

Im Idealfall sollten die mobilen Clients ihre Adressen sogar dann behalten, wenn sie sich physikalisch in den Netzen der stationären Clients sitzen. Also etwa wenn ich meinen Laptop daheim an den Router klemm, ohne einen eigenen VPN Client zu starten. Das ist aber mehr nette Dreingabe.

Das Ganze ist eine Menge Routingaufwand, weshalb es ganz gut zu wissen wäre, ob das überhaupt ohne mehrtägigen Aufwand mit OpenVPN realisierbar ist, bevor ich mich da großartig einles. Auf dem Server läuft Ubuntu, als stationäre Clients sind derzeit Rechner mit Ubuntu und Windows 2003 Server XP in Betrieb, die anderen Rechner in den LANs der stationären Clients und die mobilen Clients haben wohl Windows XP, Windows 7 und OS X Snow Leopard, vielleicht auch noch Ubuntu.

Schlagt mich nicht tot, wenns falsch ist, aber ich bin halt kein Netzwerkexperte...

Soweit ich weiß müsste das sogar recht einfach realisierbar sein. Du solltest dir aber evtl. überlegen, ob du das Setup wirklich so haben willst. Denn so ist es mit eigentlich unnötigem NAT verbunden (10.8.1.0 <-> 192.168.0.0, 10.8.2.0 <-> 192.168.0.0). Wenn möglich könntest du die IP-Bereiche in den beiden Heimnetzen direkt als 10.8.1.0 und 10.8.2.0 (oder auch 192.168.1.0 und 192.168.2.0 oder wwi) konfigurieren. Denn das NAT wird garantiert das schwerste an der Sache, das ich dir höchstens mit iptables zeigen kann (folglich bist du beim Windoof-Rechner auf dich allein gestellt).

Aber ich fang einfach mal an zu schreiben: Auf dem Server richtest du den OpenVPN Server ein. Wie das generell geht weißt du ja wahrscheinlich, der bekommt halt u.a. die Optionen

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
dev tap
und außerdem noch 2 Routen:

route add 10.8.1.0/24 gw 10.8.0.2
route add 10.8.2.0/24 gw 10.8.0.3
Wobei ich jetzt mal davon ausgehe, dass die beiden stationären Clients/Router die IPs .2 und .3 im VPN haben. Außerdem solltest du sicherstellen, dass einige sysctls richtig stehen:

sysctl net.ipv4.conf.tap0.forwarding=1
# evtl. auch net.ipv4.conf.all.fowarding=1, wenns nicht geht
vim /etc/sysctl.conf
# damit das ganze nen Reboot überlebt
Dann verbindest du erst den einen und dann den anderen Router (ich geh hier davon aus, dass du es auf den Routern machst, ansonsten denk dir überall statt Router "stationärer Client") und richtest jeweils das NAT ein. Falls du dafür ne GUI im Router-Menü oder im Windoof hast: Benutz die und versuch das irgendwie umzusetzen. Ich werd versuchen, es mit iptables zu machen. Scheinbar ist die einzige Methode dafür aber wirklich, jede Adresse einzeln zu NAT'en (vielleicht gehts eleganter, so müsste es aber funktionieren):

for i in 1 2 3 4 ... 254; do
iptables -t nat -A PREROUTING -d 10.8.1.$i -j DNAT --to-destination 192.168.0.$i
iptables -t nat -A POSTROUTING -o tap0 -s 192.168.0.$i -j SNAT --to-source 10.8.1.$i
done (10.8.1. halt beim einen durch 10.8.2. ersetzen).
Außerdem müssen wieder die forwarding sysctls gesetzt werden (diesmal ziemlich sicher auch bei eth0, oder was das LAN-Interface deines Routers ist). Desweiteren müssen die beiden privaten LANs auf irgendeine Weise die Routen

route add 10.8.0.0/24 gw <Router-IP>
route add 10.8.1.0/24 gw <Router-IP>
route add 10.8.2.0/24 gw <Router-IP> (die Route des eigenen Netzes evtl. weglassen, obwohl der Router das auch richtig machen sollte, eig.)

Disclaimer: Ich habe nicht die GERINGSTE Ahnung, ob das auch nur annährend richtig ist. Solltest du auf Seite der privaten LANs die Router als Router fürs VPN benutzen empfehle ich dir dringend, die iptables-Rules zu checken und zu testen was das Zeug hält ob du damit evtl. die Firewall zunichte gemacht hast. Außerdem kann es dir jederzeit passieren, dass du irgendwas irgendwie vom Netz abschneidest, wenn du mit sowas rumspielst. Und ich hatte einfach keine Möglichkeit, das zu testen, da ich kein derartiges Setup habe, sorry. Ich helf aber gerne beim Debugging, ich find das Thema interessant.