Portweiterleitung zum VPN-Client

0

Ich habe einen Router auf Tomato (shibby), auf dem ein OpenVPN-Server läuft (mit TAP; Schnittstelle ist tap21 auf dem Router). Verschiedene Ressourcen (einschließlich einiger Workstations) sind physisch verbunden eth0 auf diesem Router. Ich habe ein anderes physisches Gerät im ganzen Land, auf dem Nginx und andere Dienste ausgeführt werden. Ich weiß, dass dies keine großartige topografische Einrichtung ist, aber unveränderliche Umstände erfordern, dass auf dem Gerät Nginx ausgeführt wird Muss Sie müssen ein Client des Router-VPN sein und der gesamte eingehende und ausgehende Datenverkehr dieses Geräts an den Ports 80 und 443 muss über diese VPN-Verbindung getunnelt werden.

Was also im Grunde passieren muss, ist:

  1. example.com löst die IP des WAN auf dem Router auf
  2. Der Router leitet die Ports 80 und 443 weiter tap21 Schnittstelle zum Nginx-Server
  3. Die Antwort des Nginx-Servers kommt zurück tap21 und wird über WAN zurückgeleitet

Der zweite Teil ist das, womit ich Probleme habe.

Der Server ist derzeit in der Lage, mit anderen Geräten im Subnetz zu kommunizieren (und andere Ressourcen im VPN sowie Ressourcen, mit denen eine physische Verbindung besteht, zu pingen) eth0 auf dem Router) und kann über das VPN auf das Internet zugreifen. Ich konnte jedoch keine Ports vom WAN an die Adresse des Servers im VPN weiterleiten. Der erste Versuch, den ich unternahm, bestand darin, einfach die GUI für die Portweiterleitung in Tomato zu testen (dies scheint jedoch nicht für IPs im VPN zu funktionieren, sondern nur für diejenigen, die aktiviert sind eth0 oder wlan0 ). Wenn das nicht funktionierte, habe ich versucht, iptables-Regeln hinzuzufügen, aber da ich mich mit iptables immer noch nicht wohl fühle, konnte ich nur Ausschnitte aus anderen Antworten für Fragen finden, die sich nicht wirklich auf diese seltsame und problematische Netzwerkeinrichtung beziehen . Hier ist, was ich versuche (mit 10000 als Testport mit nc Hören):

iptables -t nat -I PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 192.168.12.53:10000
iptables -I FORWARD -d 192.168.12.53 -p tcp --dport 10000 -j ACCEPT

Ich kann jedoch nicht herausfinden, was mit Paketen passiert, die auf diese Weise umgeleitet werden - sie erreichen den Server mit Sicherheit nicht. Meine Frage ist im Wesentlichen, wie ich eingehende Verbindungen an bestimmten Ports an ein bestimmtes Gerät in einem VPN weiterleiten kann. Ausgehender Datenverkehr über die Ports 80 und 443 von anderen Ressourcen auf dem Router eth0 darf natürlich nicht betroffen sein.

Vielen Dank für jede Hilfe, die Sie zur Verfügung stellen können!

Chris Brendel
quelle

Antworten:

0

Nachdem ich viel gebastelt hatte, fand ich es heraus (obwohl ich alle Kommentare begrüße, die es erklären könnten Warum das funktioniert). Erstens nicht mit einem POSTROUTING Regel veranlasste offenbar den Server, die Pakete zu verwerfen. Durch die Untersuchung der iptables Regeln, die Tomato über die GUI erstellt, habe ich für ähnliche Einträge erstellt WANPREROUTING, wanin, und INPUT; Ich bin mir nicht ganz sicher, warum das so ist INPUT Regel ist notwendig; Vielleicht könnte es entfernt werden und die -m flag könnte hinzugefügt werden wanin?

iptables -t nat -I WANPREROUTING -i vlan2 -p tcp -m tcp --dport 80 -j DNAT --to-destination {SERVER_IP}:80
iptables -I wanin -d {SERVER_IP} -i vlan2 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp -i vlan2 --dport 80 -m state --state NEW -j shlimit

Die Tomaten-GUI wird nicht erstellt POSTROUTING Regeln automatisch, so musste ich das auch tun:

iptables -t nat -I POSTROUTING -p tcp -d {SERVER_IP} --dport 80 -o tun22 \! -s {GATEWAY_IP} -j SNAT --to-source {GATEWAY_IP}

Ich habe solche Regeln für die Ports 80 und 443 festgelegt und kann jetzt über das VPN aus dem Internet auf den Server zugreifen.

Chris Brendel
quelle