
Ich möchte meine Linux-Workstation als VPN-Gateway für mein lokales Netzwerk verwenden. Dieselbe Workstation wird als Webserver verwendet. Wenn ich die Workstation mit VPN verbinde, ist es nicht mehr möglich, diesen Webserver von einem externen Netzwerk aus zu erreichen.
Mein Setup ist wie folgt:
ISP-Router – IP 192.168.0.1 (Standard-Gateway, Port-Mapping aktiviert, um nicht standardmäßigen öffentlichen Port zu verwenden)
Linux-Workstation – feste IP 192.168.0.20 (DHCP-Server, da mein Router keine Änderung der Gateway-Adresse, OpenVPN, Apache, DNS-Server zulässt)
Ausgabe von „ip route show“
0.0.0.0/1 via 10.8.3.1 dev tun0
default via 192.168.0.1 dev eth0 src 192.168.0.20 metric 202
10.8.3.0/24 dev tun0 proto kernel scope link src 10.8.3.12
37.120.143.221 via 192.168.0.1 dev eth0 (VPN external IP)
128.0.0.0/1 via 10.8.3.1 dev tun0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.20 metric 202
Konfiguration wie folgt:
net.ipv4.ip_forward = 1
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Mir fällt auf, dass mein ISP-Router bei aktiviertem VPN auf der Workstation nicht die richtige lokale IP-Adresse für meine Linux-Workstation in der Liste der verbundenen Clients auflistet. Manchmal ist sie richtig, aber manchmal sieht sie einfach wie eine zufällige IP aus.
Wenn ich die folgende Route hinzufüge: EXTERNAL_IP via 192.168.0.1 dev eth0 (wobei EXTERNAL_IP die WAN-IP ist), kann ich den Webserver im lokalen Netzwerk erreichen, aber immer noch nicht von einem anderen Netzwerk aus.
Antwort1
Mit deinem Setup ist alles in Ordnung, der Fehler liegt in deinem Routing.
Wenn Ihr Server funktioniertbeideals WebserverUndals VPN-Client für einen Remote-Server erhält jeder Benutzer, der versucht, auf den Webserver zuzugreifen, eine Antwort vom Remote-VPN-Server (nichtdirekt vom Webserver), da die Routing-Tabelle Ihres lokalen Servers ihn anweist,allesüber den Remote-OpenVPN-Server. Jeder Rechner, der eine Anfrage an Site A sendet, aber eine Antwort von B erhält, verwirft die Antwort aus offensichtlichen Sicherheitsgründen automatisch. Dadurch wird der Webserver unzugänglich.
Es gibt viele, viele Möglichkeiten, Ihr Problem zu lösen. Meine Lieblingslösung wäre, den Webserver unberührt zu lassen und den OpenVPN-Client in einen Linux-Container zu verschieben, der auf demselben Server gehostet wird. Anschließend ändern Sie Ihre Routerkonfiguration auf Ihren DHCP/dnsmasq-Server (was auch immer), um die gesamte LAN-Kommunikation über den Linux-Container zu leiten. Das ist viel einfacher, als es klingt.
Eine weitere Möglichkeit ist die EinrichtungzweiRouting-Tabellen, wobei die Haupttabelle für die OpenVPN-Clients reserviert ist, während die zweite alsidentischzur Routing-Tabelle, die Sie haben, wenn das VPNnichtaktiv und weisen Sie dann Ihren Kernel an, den gesamten vom Server (selbst!) stammenden Datenverkehr über diese zweite Routing-Tabelle zu leiten. Der verbleibende Datenverkehr (der aus Ihrem LAN stammt und den Sie über OpenVPN leiten möchten) verwendet standardmäßig die Haupt-Routing-Tabelle.
Auch das ist ganz einfach zu tun, finden SieHiereine ausgezeichnete, sehr kurze Einführung in LinuxPolitik(oderQuelle)-Routing.
Oder Sie könnten sich entscheiden, Ihren Webserver auf derselben Maschine zu hosten, auf der sich auch Ihr OpenVPN-Server befindet, was Ihr Problem ebenfalls lösen würde. In diesem Fall wäre es am einfachsten,SpiegelIhre lokale Website auf dem Remote-Server, sodass Sie alle Änderungen lokal vornehmen können.
Die Entscheidung liegt ganz bei Ihnen.