Routing zw. 2 Tunneln auf EINEM openVPN-Server
Ich betreibe einen Server, auf dem zwei openVPN-Tunnel laufen. Hinter jedem Tunnel hängt ein lokales Netz, welches jeweils komplett durch den Tunnel ins Internet geleitet wird. Einmal der IP-Bereich 192.168.178.x (tun1) und einmal 192.168.179.X (tun0). Nach außen haben also beide lokalen Netze die gleiche IP.
Die Netzwerke hinter den beiden Tunneln sollen strikt getrennt sein und es soll von dem einen Netz kein Zugriff auf das andere möglich sein, was auch soweit klappt. Nun gibt es aber einen PC (192.168.178.12) auf den auf dem Port 5800 auch aus dem Netz 192.168.179.X zugegriffen werden soll. Das bekomme ich nicht auf die Reihe. Ich habe eine iptables-Regel ausprobiert, mit der es meiner Meinung nach klappen sollte, aber das klappt leider nicht:
iptables -I FORWARD -s 10.8.0.0/24 -p tcp --dport 5800 -d 192.168.178.12 -j ACCEPT
Mache ich traceroute 192.168.178.12, kommt folgendes bei raus:
Es scheint also so, als würde die Anfrage aus dem openVPN-Server heraus ins Internet gehen.
Für Hilfestellungen wäre ich sehr dankbar. Sorry, wenn die Informationen nicht ausreichen sollten. Wenn ihr mir sagt, was ihr braucht, liefere ich den Rest natürlich nach.
Die Netzwerke hinter den beiden Tunneln sollen strikt getrennt sein und es soll von dem einen Netz kein Zugriff auf das andere möglich sein, was auch soweit klappt. Nun gibt es aber einen PC (192.168.178.12) auf den auf dem Port 5800 auch aus dem Netz 192.168.179.X zugegriffen werden soll. Das bekomme ich nicht auf die Reihe. Ich habe eine iptables-Regel ausprobiert, mit der es meiner Meinung nach klappen sollte, aber das klappt leider nicht:
iptables -I FORWARD -s 10.8.0.0/24 -p tcp --dport 5800 -d 192.168.178.12 -j ACCEPT
Mache ich traceroute 192.168.178.12, kommt folgendes bei raus:
traceroute to 192.168.178.12 (192.168.178.12), 64 hops max, 52 byte packets
1 192.168.179.4 (192.168.179.4) 1.290 ms 0.617 ms 0.565 ms
2 10.8.0.1 (10.8.0.1) 5.238 ms 5.073 ms 4.968 ms
3 defra-pvz09.dnwx.de (134.255.237.19) 5.047 ms 5.131 ms 4.978 ms
4 ae0-483.fra10.core-backbone.com (81.95.2.225) 5.456 ms 5.495 ms 5.717 ms
Es scheint also so, als würde die Anfrage aus dem openVPN-Server heraus ins Internet gehen.
Für Hilfestellungen wäre ich sehr dankbar. Sorry, wenn die Informationen nicht ausreichen sollten. Wenn ihr mir sagt, was ihr braucht, liefere ich den Rest natürlich nach.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 665606
Url: https://administrator.de/contentid/665606
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
25 Kommentare
Neuester Kommentar
Deine Regel kann ja nicht stimmen ! Sie besagt ja das alles was eine Absender IP 10.8.0.x mit Port TCP 5800 auf die Ziel IP 192..168.178.12 zugreifen kann.
Das steht ja im völligen Gegensatz zu dem was du oben schreibst, denn dort gibst du an das alle Rechner mit der Absender IP 192.168.179.x auf diesen Rechner zugreifen soll. Damit wäre dann die o.a. Regel unsinnig, denn sie definiert ja die völlig falsche Source IP. Was stimmt denn nun ??
Oder fummelst du in diesem Netz unnötigerweise mit NAT (IP Adress Translation) im Tunnel rum ?
Dort kann man sehen das die VPN Pakete gar nicht im Tunnel bleiben sondern ins öffentliche Internet gehen. Da stimmt also schon generell mal was mit deinem internen IP Routing nicht ! Interner Traffic sollte doch niemals ins Internet geroutet werden !! Aber ohne deine OVPN Konfig Files zu kennen ist das alles freie Raterei und "Shooting into the dark".... Weisst du auch selber.
Ansonsten einmal ins hiesige OpenVPN Tutorial sehen:
Merkzettel: VPN Installation mit OpenVPN
bzw. bei Site to Site:
OpenVPN - Erreiche Netzwerk hinter Client nicht
Dort steht alles was du zu dem Thema wissen musst.
Das steht ja im völligen Gegensatz zu dem was du oben schreibst, denn dort gibst du an das alle Rechner mit der Absender IP 192.168.179.x auf diesen Rechner zugreifen soll. Damit wäre dann die o.a. Regel unsinnig, denn sie definiert ja die völlig falsche Source IP. Was stimmt denn nun ??
Oder fummelst du in diesem Netz unnötigerweise mit NAT (IP Adress Translation) im Tunnel rum ?
Mache ich traceroute 192.168.178.12, kommt folgendes bei raus:
Uuuhhh wie gruselig... !!Dort kann man sehen das die VPN Pakete gar nicht im Tunnel bleiben sondern ins öffentliche Internet gehen. Da stimmt also schon generell mal was mit deinem internen IP Routing nicht ! Interner Traffic sollte doch niemals ins Internet geroutet werden !! Aber ohne deine OVPN Konfig Files zu kennen ist das alles freie Raterei und "Shooting into the dark".... Weisst du auch selber.
Ansonsten einmal ins hiesige OpenVPN Tutorial sehen:
Merkzettel: VPN Installation mit OpenVPN
bzw. bei Site to Site:
OpenVPN - Erreiche Netzwerk hinter Client nicht
Dort steht alles was du zu dem Thema wissen musst.
in jedem der beiden lokalen Netze befindet sich ein openVPN-Client (Raspberry Pi).
Also exakt das Setup hier, richtig ?!OpenVPN - Erreiche Netzwerk hinter Client nicht
Was etwas wirr ist deine OpenVPN Konfig. Normal lässt man die zentrale Site als Server laufen und die beiden Locations als Clients so wie es im obigen Beispiel zu sehen ist.
Was du da machst ist schon recht schräg, vermutlich 2 getrennte OpenVPN Instanzen laufen zu lassen ?!
Das ist recht unüblich und lässt so ein bischen vermuten das das eher ohne Plan und Kentniss der OVPN Gegebenheiten umgesetzt wurde.
Auch das beides mal mit einem Gateway Redirect gearbeitet wurde ist schon sehr fragwürdig.
So eine Konfig ist jedenfalls nicht der Weg wie man es richtig macht bzw. wie OpenVPN grundsätzlich designt ist...
Stell dir mal vor jemand hätte 10 Außenstellen. Da würdest du dann wirklich 10 separate Instanzen auf dem Server laufen lassen ??
Besser ist du überdenkst da nochmal dein gesamtes VPN Konzept ?!
Du willst doch eigentlich keine Client to Client Kommunikation. Warum aktivierst du das dann ?? Besser also weglassen.
Nochmal eine Frage vorab: Welchen Sinn hat es das du mit Gateway Redirect arbeitest und sämtlichen Traffic in den Tunnel routest ? Was ist da deine Intention ? Split Tunneling wäre doch viel sinnvoller, zumal ja sicher in den jeweiligen Locations eh bei allen Clients der Internet Router als Default Gateway eingetragen ist. Ein Gateway Redirect im OpenVPN wäre damit dann doch so oder so nutzlos ?!
Nur um Mal deine Intention dazu zu verstehen...
Der o.a. Fehler rührt vermutlich daher weil du vergessen hast für beide Client eine spezifische Konfig (Common Name) im Directory /etc/openvpn/ccd zu hinterlegen, kann das sein ? Jedenfalls erwähnst du es oben leider mit keinem Wort ?!
Im /ccd Verzeichnis müssen 2 Dateien stehen. Einmal "client1" und einmal "client2" wobei diese Namen immer identisch sein müssen zum konfigurierten Common Name des Clients.
"client 1" hat den Inhalt:
ifconfig-push 10.8.1.2 255.255.255.0
iroute 192.168.178.0 255.255.255.0
"client 2" hat den Inhalt:
ifconfig-push 10.8.1.3 255.255.255.0
iroute 192.168.179.0 255.255.255.0
Das bestimmt pro Client welche feste IP der im internen OVPN Netzwerk bekommt und welche Route zum lokalen IP Netz dahinter liegt. Bzw. das muss mit deinen Zuweiungen in der ipp2.txt übereinstimmen. Diese Pool Geschichte solltest du besser weglassen wenn du statisch routest.
Nur mal nebenbei: Hast du mal überlegt das mit WireGuard zu lösen ? Erheblich einfachere Konfig, bessere Filter Optionen und erheblich bessere VPN Performance:
Merkzettel: VPN Installation mit Wireguard
Nochmal eine Frage vorab: Welchen Sinn hat es das du mit Gateway Redirect arbeitest und sämtlichen Traffic in den Tunnel routest ? Was ist da deine Intention ? Split Tunneling wäre doch viel sinnvoller, zumal ja sicher in den jeweiligen Locations eh bei allen Clients der Internet Router als Default Gateway eingetragen ist. Ein Gateway Redirect im OpenVPN wäre damit dann doch so oder so nutzlos ?!
Nur um Mal deine Intention dazu zu verstehen...
Der o.a. Fehler rührt vermutlich daher weil du vergessen hast für beide Client eine spezifische Konfig (Common Name) im Directory /etc/openvpn/ccd zu hinterlegen, kann das sein ? Jedenfalls erwähnst du es oben leider mit keinem Wort ?!
Im /ccd Verzeichnis müssen 2 Dateien stehen. Einmal "client1" und einmal "client2" wobei diese Namen immer identisch sein müssen zum konfigurierten Common Name des Clients.
"client 1" hat den Inhalt:
ifconfig-push 10.8.1.2 255.255.255.0
iroute 192.168.178.0 255.255.255.0
"client 2" hat den Inhalt:
ifconfig-push 10.8.1.3 255.255.255.0
iroute 192.168.179.0 255.255.255.0
Das bestimmt pro Client welche feste IP der im internen OVPN Netzwerk bekommt und welche Route zum lokalen IP Netz dahinter liegt. Bzw. das muss mit deinen Zuweiungen in der ipp2.txt übereinstimmen. Diese Pool Geschichte solltest du besser weglassen wenn du statisch routest.
Nur mal nebenbei: Hast du mal überlegt das mit WireGuard zu lösen ? Erheblich einfachere Konfig, bessere Filter Optionen und erheblich bessere VPN Performance:
Merkzettel: VPN Installation mit Wireguard
Wenn ich allerdings im Server "push "redirect-gateway def1 bypass-dhcp"" entferne startet der VPN nicht mehr, also ist das scheinbar notwendig.
Nein, das ist NICHT notwendig aber ein Push Kommando fürs Routing entweder mit Gateway Redirect oder Split Tunneling musst du haben bei Site-to-Site sonst funktioniert das Routing nicht. Starten tut der Dienst aber auch ohne das Kommando.muss ebenfalls einen solche Datei angelegt werden. Richtig?
Nein, das ist NICHT richtig. Diese Dateien gelten rein nur für die Clients die eine Site-to-Site Kopplung machen. Logisch, denn die brauchen eine statische IP und die damit verbundene statische Route in ihr lokales Netz.Bei einem rein mobilen Client ist das natürlich nicht erforderlich und die werden dann normal, dynamisch aus dem /24 Pool des internen OVPN IP Netzes bedient. Ganz einfach und logisch...
Werden wohl von dieser Zeile ausgelöst:
Die ist auch nur kosmetisch und kannst du auskommentieren oder entfernen.Derzeit erreiche ich keinen Rechner aus dem anderen Netz.
Die Frage ist wie nach der "Gateway Redirect" Änderung jetzt deine finale Server Konfig aussieht ?? Es ist gut möglich das du die "push route.." Kommandos vergessen hast, damit ist dann kein Routing möglich.Ob das Routing sauber rennt kannst du in den beiden Clients immer selber sehen wenn du dort ip route show eingibst oder netstat -r -n.
In den Clients sollten die Routen für jeweils das Server Netz und das andere Client LAN in den Tunnel gehen.
Die Server Konfig sollte so aussehen (Auszug und Annahme das das OVPN Server Netz im IP Netz 192.168.1.0 /24 liegt !!):
server 10.8.1.0 255.255.255.0
client-config-dir ccd
route 192.168.178.0 255.255.255.0
route 192.168.179.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 77.109.148.136"
push "dhcp-option DNS 77.109.148.137"
In den Client Konfig Dateien musst du jeweils das remote Netz "pushen" lassen
ifconfig-push 10.8.1.2 255.255.255.0
iroute 192.168.178.0 255.255.255.0
push "route 192.168.179.0 255.255.255.0"
Bzw. bei Client 2
ifconfig-push 10.8.1.3 255.255.255.0
iroute 192.168.179.0 255.255.255.0
push "route 192.168.178.0 255.255.255.0"
Wenn du nun an jedem Client mit ip route show oder netstat -r -n die Routen kontrollierst solltest du sehen das jeder Client sowohl das lokale Server LAN als auch jeweils das LAN des gegenüberliegenden Clients in der Routing Tabelle hat.
Damit ist dann erstmal eine Any zu Any Kommunikation möglich und du kanns den Zugriff sauber testen.
Gut, es ist nicht das was du willst, da du ja eine gesamte Kommunikation der Clientnetze verhindern willst. Das ist dann kein Problem wenn du die Netzwerk Routen in den Clients in Hostrouten veränderst so das nur einzig die beteiligten Rechner in den Client Netzen kommunizieren können niemand anders aber sonst.
Die Client Konfig Dateien sehen dann so aus:
ifconfig-push 10.8.1.2 255.255.255.0
iroute 192.168.178.0 255.255.255.0
push "route 192.168.179.0 255.255.255.0"
Bzw. bei Client 2
ifconfig-push 10.8.1.3 255.255.255.0
iroute 192.168.179.0 255.255.255.0
push "route 192.168.178.12 255.255.255.255"
Du siehst dann mit ip route show oder netstat -r -n jetzt das die Clients im .179er Netz nur noch den .12er Host im .178er Netz kennen...
Das wars...
Hallo,
sonst wird das hier glaube ich nix.
Grüße
lcer
Zitat von @Gerdchen07:
Mein Server ist aber ein im Internet angemieteter. Welchen IP-Raum statt 192.168.1.0 muss ich dann eintragen? Er gehört ja zu keinem lokalen Netz.
Also vielleicht nimmst Du mal den besten Freund des Netzwerkadmins - den Bleistift - und zeichnest Deine Netzwerktopologie mal auf.Mein Server ist aber ein im Internet angemieteter. Welchen IP-Raum statt 192.168.1.0 muss ich dann eintragen? Er gehört ja zu keinem lokalen Netz.
- alle Router
- alle Netzwerksegmente
- alle vergebenen IP-Adressen
sonst wird das hier glaube ich nix.
Grüße
lcer
Hallo,
da fehlt jetzt nur noch das OS des Servers. Aber egal, bei Deinem Setup fehlen womöglich die iroute Anweisungen: https://docs.netgate.com/pfsense/en/latest/troubleshooting/openvpn-irout ...
Wenn Du verschiedene Subnetze für mehrere OpenVPN Server verwendest, musst Du auch die Routen für die Tunnel-Subnetze auf die Clients bringen.
Grüße
lcer
da fehlt jetzt nur noch das OS des Servers. Aber egal, bei Deinem Setup fehlen womöglich die iroute Anweisungen: https://docs.netgate.com/pfsense/en/latest/troubleshooting/openvpn-irout ...
Wenn Du verschiedene Subnetze für mehrere OpenVPN Server verwendest, musst Du auch die Routen für die Tunnel-Subnetze auf die Clients bringen.
Grüße
lcer
Mein Server ist aber ein im Internet angemieteter.
OK hattest du leider nicht erwähnt. Dann lässt du das Kommando natürlich komplett weg. Dann gibts nur die push Route Kommandos in den Client spezifischen Konfigs.push "route 10.8.1.0 255.255.255.0"
Das ist Blödsinn, denn das internen OVPN Netz wird immer automatisch gepusht. Den Unsinn kannst du löschen.dass dann auch ein push in die Client Config muss? So?
Wenn du damit die Client spezifische Konfig auf dem Server meinst ist das richtig. Diese beiden Konfig Dateien stehen auf dem Server im Verzeichnis /ccd und NICHT auf dem Client ! Nur das es da keine Missverständnisse gibt...!Die 10.8.2.1 an die Clients zu pushen ist Blödsinn, denn das ist immer die IP die der Server selber hast. Damit schaffst du also heilloses Adress Chaos im internen OVPN Netz. Richtig ist
Client 1 Konfig mit lokalem LAN 192.168.178.0 /24 im Server Verz. /ccd :
ifconfig-push 10.8.1.2 255.255.255.0
iroute 192.168.178.0 255.255.255.0
push "route 192.168.179.0 255.255.255.0"
Client 2 Konfig mit lokalem LAN 192.168.179.0 /24 im Server Verz. /ccd :
ifconfig-push 10.8.1.3 255.255.255.0
iroute 192.168.179.0 255.255.255.0
push "route 192.168.178.0 255.255.255.0"
Denk dran das der Name der Konfig Datei dem des Common Names des Clients entsprechen muss das du im Zertifikat angegeben hast.
Die Datei sorgt dann dafür das der Client 1 mit Common Name xyz die feste interne OVPN IP 10.8.1.2 erhält, die OVPN Route ins lokale .178er Netz im Server aktiviert wird auf die .2er IP und gleichzeitig das .179.0er netz an den Client gepusht wird. Analog dann das gleiche bei Client 2. Fertisch...
Eigentlich doch ein ganz einfaches Prinzip ?!
Hallo,
So nicht. Aber mit je einem Server(Instanz) pro Client (Server und Client müssen im gleichen/gemeinsamen Tunnel-Subnetz liegen). Dann musst Du aber die Route 10.8.0.0/16 -> 10.8.X.1 auf die Clients pushen. Aber wie @aqui oben schon ausführte - eigentlich so nicht gedacht und wozu auch?
Grüße
lcer
Zitat von @Gerdchen07:
Eine Frage hast du wahrscheinlich überlesen. Ich würde die Clients gerne aufteilen in verschiedene IP-Räume.
Server 10.8.1.1
Client1 10.8.1.2
Client2 10.8.2.1
Client3 10.8.3.1
Geht das? Wenn ja, wie?
Eine Frage hast du wahrscheinlich überlesen. Ich würde die Clients gerne aufteilen in verschiedene IP-Räume.
Server 10.8.1.1
Client1 10.8.1.2
Client2 10.8.2.1
Client3 10.8.3.1
Geht das? Wenn ja, wie?
So nicht. Aber mit je einem Server(Instanz) pro Client (Server und Client müssen im gleichen/gemeinsamen Tunnel-Subnetz liegen). Dann musst Du aber die Route 10.8.0.0/16 -> 10.8.X.1 auf die Clients pushen. Aber wie @aqui oben schon ausführte - eigentlich so nicht gedacht und wozu auch?
Grüße
lcer
Zitat von @Gerdchen07:
OK, danke. Ich dachte, es wird so übersichtlicher. Vor allem zum definieren der iptables.
Das ist Quatsch. Für die Firewall ist nur die Quell-IP (Deine beiden LANs) oder die Ziel-IP relevant. Nicht die IP des Tunnelnetzwerks.OK, danke. Ich dachte, es wird so übersichtlicher. Vor allem zum definieren der iptables.
Oder aber das eingehende Interface. Das ist aber abhängig vom OS des Servers nicht immer komplett für routing und Firewall verfügbar.
https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4 ...
tun devices encapsulate IPv4 or IPv6 (OSI Layer 3) while tap devices encapsulate Ethernet 802.3 (OSI Layer 2).
Mit TAP sollte das Interface routbar und für die Firewall verfügbar sein, mit TUN nicht unbedingt.
Grüße
lcer
PS: wo hast Du eigentlich überall das NAT aktiviert?
Hallo,
Das NAT gehört an die Schnittstelle, an der Dein privates Netz in das Öffentliche Netz übergeht. Das wäre das Internet-Interface des Servers. Wozu soll das NAT am Client sein? Du Routest ohne NAT bis zum Server und nur dort brauchst Du NAT.
Deine iptable-Rules in Zeile 8 und 9 passen nicht zu Zeile 4 (First match wins).
Grüße
lcer
Das NAT gehört an die Schnittstelle, an der Dein privates Netz in das Öffentliche Netz übergeht. Das wäre das Internet-Interface des Servers. Wozu soll das NAT am Client sein? Du Routest ohne NAT bis zum Server und nur dort brauchst Du NAT.
Deine iptable-Rules in Zeile 8 und 9 passen nicht zu Zeile 4 (First match wins).
Grüße
lcer
Ohne die kommen meine Rechner hinter dem Client nicht online
Zeigt das da grundlegend was falsch läuft mit dem Routing ! NAT sollte man nicht im internen Netz machen, denn damit schaffst du dir immer eine Einbahnstrasse, da Endgeräte die NAT Firewall ja nicht überwinden können. NAT ist überflüssig und meist auch kontraproduktiv im internen Netz besonders bei einer Site-to-Site Kopplung.