VPN Client Ports über OpenVPN Server as Proxy erreichen

  • Da ich leider einen DS-Lite Internetanschluss besitze und meine Docker-Umgebung (Webserver, Git und co) auch über IPV4 erreichen möchte, habe ich mich für einen VServer mit OpenVPN Image entschieden (Web UI Image + Ubuntu 16), um auf meinen Mac Mini als Server zugreifen zu können.

    Ich habe den Server wie in der entsprechenden netcup Anleitung konfiguriert und kann mich auch mit dem Client verbinden. Der Client erhält die statische IPV4 Adresse des Servers und ich kann ganz normals ins Internet, so weit so gut.


    Leider habe ich es bisher nicht bekommen, den verbundenen Client und seine Services über das Internet zu erreichen. Ich habe auf dem Server IPV4-Forwarding aktiviert und die IP-Tabelle wie in mehreren Foren nachgelesen angepasst, leider ohne Erfolg.

    Code
    1. sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
    2. sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT


    Ich hoffe mir kann jemand weiterhelfen da ich davon ausgehe, dass ich lediglich eine Kleinigkeit falsch verstanden oder vergessen habe.


    Danke schon mal im Voraus,

  • Hay,


    kurz zur Aufklärung: Du möchtest von außerhalb auf einen Webservice zuhause zugreifen?


    Von "überall" (bzw. jeder darf) darauf zugreifen oder von einem Gerät, welches sich ebenfalls ins OpeVPN einwählt?


    Von überall: Masquerading einschalten und Portforward auf die IP des häuslichen Clients.

    OpenVPN: peer-to-peer aktivieren in der Config von OpenVPN.


    CU, Peter

  • Hallo Peter,


    Ich möchte über meine Domain von Überall auf meinen Server zugreifen können. Der VPN Server dient mir nur dazu, eine statische IPv4 Adresse zu erhalten.

    Wie muss ich die Masquerading Einstellungen anpassen um von der vergebenen IP-Adresse 94.16.116.179 auf das VPN-Subnet 172.27.224.0/20 zugreifen zu können? Die IP-Adressen der VPN-Clients sind erst einmal nicht statisch, daher möchte ich einfach auf das angegebene Subnetz weiterleiten.

    Der Mac Client hat mittlerweile die feste IP 10.0.10.100 erhalten.

  • Hay,

    Die IP-Adressen der VPN-Clients sind erst einmal nicht statisch, daher möchte ich einfach auf das angegebene Subnetz weiterleiten.

    das musst Du schon konkret machen, woher soll der OpenVPN-Server wissen, was er mit den eintrudelnden Paketen auf dem Port 80 anfangen soll?


    Er kann sie ja schlecht als Broadcast ans Subnetz schicken (oder doch? Nie gemacht, nie gesehen...:D) in der Hoffnung, dass ein Server dort antwortet. Wenn der "zuhause-Client" eine feste IP bekommen soll, musst Du ein Profil ins ccd-Verzeichnis von OpenVPN legen, der feste VPN-IP-Adressen zuweist.


    Wegen Masq melde ich mich gleich nochmal, sofern kein Kollege schneller war... bin gerade unterwegs.


    CU, Peter

  • Ja da hatte ich gerade einen kurzen Denkfehler gehabt und dementsprechend meinen vorherigen Post bearbeitet. Der VPN-Client bekommt jetzt eine feste IP-Adresse zugeteilt (10.0.10.100).


    Danke schon mal für deine schnelle Hilfe.

  • Hay,

    Code
    1. iptables -t nat -A POSTROUTING -j MASQUERADE
    2. iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.10.100:80
    3. iptables -t nat -A POSTROUTING -p tcp -d 10.0.10.100 --dport 80 -j SNAT --to-source <ip des servers>

    (aus dem Kopf; ohne Gewähr).


    CU, Peter

  • Bei der letzen angegebenen Zeile verstehe ich nicht ganz, weshalb ich eine weitere IP Adresse angeben muss. Sollte der Server nicht bereits die 10.0.10.100 IP erhalten, sobald dieser per VPN verbunden ist?

  • Hay,

    Sollte der Server nicht bereits die 10.0.10.100 IP erhalten, sobald dieser per VPN verbunden ist?

    die (externe) IP-Adresse des OpenVPN-Servers. Die Pakete müssen ja von zuhause wieder zurückgeroutetmaskiert werden :)


    Nachtrag: das ganze natürlich dann noch für Port 443.


    CU, Peter

  • Das macht natürlich Sinn :/

    Ich habe alle Einstellungen vorgenommen und kann ich weiterhin nicht mit dem Tom-Server verbinden. Ein Scan der offenen Ports ergibt, dass weiterhin nur der SSH-Port 22 geöffnet ist.

  • Auch, wenn Dein Problem wahrscheinlich mit den iptables-Regeln bereits besser gelöst ist,
    möchte noch auf socat - Multipurpose relay (SOcket CAT) hinweisen.


    Dieses im Userspace laufende (und schon deshalb gegenüber iptables/netfilter im Nachteil seiende) Tool kann man benützen, um Anfragen in allen erdenklichen Variationen umzuleiten. Socket auf block oder char-device, v4-Socket auf v6-Port, v6-Adresse/Port auf v4-Adresse/Port, um nur einige Beispiele zu nennen. Es ist vielleicht in diesem Fall nicht die optimale Lösung, kann aber u.a. auch für eine quick-and-dirty IPv4-IPv6-Transition benützt werden.


    Ein paar (auch nicht ausgegorene) Überlegungen dazu sind neben Zusammenfassungen hier zu finden:

    https://technicalexperiments.w…socat-multipurpose-relay/


    Die „originalen“ Kochrezepte gibt es hier:

    https://github.com/craSH/socat/blob/master/EXAMPLES


    Weiters - weil der offene SSH-Port genannt wurde: wie wäre es mit einem SSH-reverse tunnel?

    https://blog.devolutions.net/2…verse-ssh-port-forwarding


    Zum besseren Verständnis der Ausgangslage bitte um Hilfe...?


    [DOCKER-CONTAINER]~[DOCKER auf MAC Mini]---[MODEM|DS-LITE]---[netcup SERVER+OPENVPN]?

    ░▒▓Blog: https://grundsoli.de/▓▒░

    ░▒▓Gutscheine: https://netcup-groupie.de/▓▒░

  • Die Ports des V-Servers. Im Heimnetz selber (und über meinen alten VPN-Anbieter) kann ich den Heim-Server erreichen.

    Müsste der V-Server jetzt nicht einfach alle eingehenden Port 80 und 443 Verbindungen an die statische IP des VPN-Clients weitergeben?

  • Hay,

    Die Ports des V-Servers. Im Heimnetz selber (und über meinen alten VPN-Anbieter) kann ich den Heim-Server erreichen.

    Es "lauscht" ja auch nichts an Port 80 des Vservers, also gibts am Port 80 über z.B. nmap kein Ergebnis.


    Müsste der V-Server jetzt nicht einfach alle eingehenden Port 80 und 443 Verbindungen an die statische IP des VPN-Clients weitergeben?

    Er gibt "nur" die Pakete weiter, nicht die Verbindung.


    Was kommt denn jetzt als Ergebnis wenn Du http://<öffentliche-vserver-ip> machst?


    CU, Peter

  • Es erscheint lediglich die Fehlermeldung: "94.16.116.179 hat die Verbindung abgelehnt. ERR_CONNECTION_REFUSED".

    Auf meinem Heim-Server läuft selbstverständlich weiterhin mein Webserver auf den Ports 80 und 443.

  • Hay,


    also irgendwas funktionert jedenfalls... über https://ip kommt das bei mir.


    pasted-from-clipboard.png


    Das kann aber ev. ein Webserver auf dem OpenVPN-Server sein. Das wäre natürlich fatal, weil der ggf. alles auf Port 443 wegfischt.


    Kann es sein, dass der Dienst auf dem Server auf der Seite des MAC-Mini nichts von seiner 10er-Adresse weiss?

    Ja, das kann es auch sein - dass die Dienste ev nicht an die 10er IP gebunden sind. Notfalls an 0.0.0.0 binden zum testen.


    CU, Peter

  • Über HTTPS statt HTTP gelange ich auch auf die OpenVPN Connect Seite. Also scheint der VServer zumindest Anfragen an den Port 433 anzunehmen, nicht jedoch an den Client weiterzugeben.

    Wieso müsste der Heim-Server von seiner neuen IP-Adresse bescheid wissen, wenn dieser per VPN verbunden ist? Der VPN-Server kann den Client über seine lokale IP-Adresse 192.168.0.100 erreichen.

  • Hay,

    Wieso müsste der Heim-Server von seiner neuen IP-Adresse bescheid wissen, wenn dieser per VPN verbunden ist? Der VPN-Server kann den Client über seine lokale IP-Adresse 192.168.0.100 erreichen.

    dann routest Du das ganze Netzwerk 192.168... über das VPN und hast nicht einen einzelnen Client angeschlossen? ping 192.168.0.100 funktioniert also vom VServer aus? Und telnet 192.168.0.100 80 bringt einen Connect?


    In dem Fall müssten dann in den iptables-Einträgen von mir statt der 10.er IPs die 192.168.0.100 eingetragen werden.


    CU, Peter

  • Der VPN-Server kann den Client über seine lokale IP-Adresse 192.168.0.100 erreichen.

    Pardon? IP 10.0.10.100? 192.168.0.100? VPN-Subnet 172.27.224.0/20...

    Ich komme gerade nicht mit.


    Läuft der OpenVPN-Client auf dem Mac-Mini als Host oder im Docker-Gast?

    Dass Docker selbst Port-Forwarding kann, hast Du wahrscheinlich berücksichtigt, denn sonst kämst Du von Server nicht dorthin.

    Wenn Du auf dem (nc) Server den Port ohnehin erfolgreich aufrufen kannst, dann stimmt mit den ipables-Regeln etwas noch nicht. Eventuell nicht als Target Masqerading verwenden, sondern mit SNAT respektive DNAT auf der anderen Seite arbeiten.

    ░▒▓Blog: https://grundsoli.de/▓▒░

    ░▒▓Gutscheine: https://netcup-groupie.de/▓▒░