Wie kann ich OpenVPN-Client-Routing ohne NAT auf Linode erreichen?

Wie kann ich OpenVPN-Client-Routing ohne NAT auf Linode erreichen?

Ich habe ein OpenVPN-Netzwerk eingerichtet und es funktioniert einwandfrei, da ich vom Remote-Client aus auf die internen/LAN-Rechner zugreifen kann. Mein Problem ist jedoch, dass der gesamte Datenverkehr von den Remote-Rechnern für die LAN-Rechner so aussieht, als käme er vom OpenVPN-Server-Rechner und nicht vom Client-Rechner.

Zur besseren Erklärung betrachten Sie meine Netzwerktopologie:

Netzwerktopologie

Maschine R stellte eine Verbindung zum OpenVPN-Server auf Maschine A her und erhielt die IP-Adresse 10.200.200.5 zugewiesen.

Maschine R sendet dann eine Anfrage an Apache, das auf Maschine B läuft. Die Anfrage kommt ordnungsgemäß an und ich erhalte eine Antwort. Das Problem besteht darin, dass Maschine B die Anfrage von 192.168.0.10 (IP von Maschine A) und nicht von 10.200.200.5 kommen sieht.

Mir wäre letzteres lieber.

Mein aktuelles Setup

Maschine A

Dies ist ein Ausschnitt der relevanten iptables-Regeln:

*nat
:PREROUTING ACCEPT [18:1080]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -o eth0 -j MASQUERADE

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

// snip

# accept incoming VPN connections
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT

# forward VPN traffic
-A FORWARD -s 10.200.200.0/25 -d 192.168.128.0/17 -i tun0 -j ACCEPT
-A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

Ich habe auch IP-Forwarding aktiviert:

echo 1 > /proc/sys/net/ipv4/ip_forward

.. und habe die entsprechenden Änderungen an /etc/sysctl.conf vorgenommen, um es dauerhaft zu machen.

In der OpenVPN-Konfiguration habe ich:

server 10.200.200.0 255.255.255.128
push "route 192.168.0.0 255.255.255.0"

Maschine B

Da Maschine A nicht das Gateway von Maschine B ist, habe ich auf Maschine B manuell eine Route wie folgt hinzugefügt:

ip route add 10.200.200.0/25 via 192.168.0.10 dev eth0

Um zu testen, welche IP geroutet wird, habe ich ein kleines PHP-Skript namensshowip.php:

<?php echo "Your IP is: ", $_SERVER['REMOTE_ADDR'], "\n"; ?>

Maschine R

# wget -q -O - http://192.168.0.11/showip.php
Your IP is: 192.168.0.10

Wie bringe ich es dazu, 10.200.200.5 anzuzeigen?

Aktualisieren

Zur Klarstellung: In meinem speziellen Fall verfügt Maschine A über eine Netzwerkkarte (eth0), die sowohl das LAN als auch das WAN bedient.

Antwort1

Beantwortung meiner eigenen Frage:

Als weiterer Hintergrund: Diese Maschinen werden auf Linode gehostet. Es stellt sich heraus, dass sie statische Karten in ihren Switches verwenden, um den Verkehr an bestimmte Knoten im LAN zu leiten. Da die VPN-Quell-IPs nicht Teil dieser statischen Karten sind, wurde der Verkehr nirgendwohin geleitet.

Es scheint sich also um ein Linode-spezifisches Problem zu handeln, aber hoffentlich hilft es anderen, das zu wissen.

Antwort2

Da Sie festgestellt haben, dass es sich bei der Verbindung zwischen Maschine A und Maschine B nicht wirklich um ein Switched Ethernet handelt und dass nur Datenverkehr über die Ihnen zugewiesenen IP-Adressen verarbeitet werden kann, müssen Sie eine andere Lösung finden.

Dies kann durch die Verwendung eines Tunnels erreicht werden. Es gibt verschiedene Arten von Tunneln, die verwendet werden können. Eine davon ist die Verwendung eines VPN, was am einfachsten sein dürfte, da Maschine A bereits ein VPN-Server ist. Dann müssen Sie nur noch Maschine B zu einem VPN-Client machen und dann Routing-Tabelleneinträge hinzufügen, um die benötigten Präfixe über diese VPN-Verbindung weiterzuleiten.

Eine weitere Möglichkeit ist die Verwendung eines GRE-Tunnels oder einfach IP über IP. Diese Tunnel und zugehörigen Routen könnten statisch konfiguriert werden, was ihnen gegenüber dem VPN-Ansatz Vorteile verschaffen würde.

Antwort3

Auf Maschine A haben Sie eine NAT-Regel, die dazu führt, dass die Client-IP geändert wird, bevor die Pakete an Maschine B weitergeleitet werden. Als Erstes müssen Sie diese NAT-Regel entfernen, sodass die Pakete ohne Änderungen an Maschine B weitergeleitet werden.

Diese Änderung kann dazu führen, dass die Verbindungen nicht mehr funktionieren, wenn die Routing-Tabelle auf Maschine B unvollständig ist. In diesem Fall werden Pakete zwar korrekt an Maschine B übermittelt, aber es gibt keine Route, um die Antworten zurückzuschicken. Das führt entweder dazu, dass sie überhaupt nicht antwortet oder die Antworten ins Internet statt an den VPN-Server sendet.

Auf Maschine B können Sie versuchen, mit dem folgenden Befehl eine Route hinzuzufügenip route add 10.200.200.0/24 via 192.168.0.10

verwandte Informationen