[gelöst] Port Forwarding in OpenVPN-Tunnel

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

[gelöst] Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 02.10.2019 17:08:11

Hallo Zusammen,

ich bastel gerade an einer Machbarkeitsstudie bzw. einem Blog-Beitrag zu folgendem Konstrukt:

vServer mit Public IPv4-Adresse als OpenVPN-Server - Tunnel - pfSense als OpenVPN-Client - LAN

Auf dem vServer läuft Debian 10 Buster.

Die VPN-Verbindung läuft soweit und das Routing scheint i.O. zu sein, da sich die Gegenstellen anpingen können.

Ein Anliegen ist nun, wie man mit nftables ein Port-Forwarding vom vServer beispielsweise zu einem Webserver im LAN realisieren kann.

Ich habe schon einiges recherchiert und probiert, leider ohne Erfolg. Mir fehlt es da schlicht auch an Erfahrung mit Linux-Firewalls (hab' meistens mit pfSense und Securepoint UTM zu tun).

Anbei die aktuelle nftables.conf, die im wesentlichen von hier stammt: https://superuser.com/questions/985800/ ... ux/1480121

Code: Alles auswählen

#!/usr/bin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    # allow established/related connections
    ct state {established, related} accept

    # early drop of invalid connections
    ct state invalid drop

    # allow from loopback
    iifname lo accept

    # Allow from internal network
    iifname lan0 accept

    # allow icmp
    ip protocol icmp accept

    # allow ssh
    tcp dport 22 accept comment "SSH in"

    # allow OpenVPN
    udp dport 1194 accept

    reject
  }

  chain forward {
    type filter hook forward priority 0;

    # Allow outgoing via eth0
    oifname eth0 accept

    # Allow incoming on eth0 for related & established connections
    iifname eth0 ct state related, established accept

    # Drop any other incoming traffic on eth0
    iifname eth0 drop
  }

  chain output {
    type filter hook output priority 0;
  }

}

table ip nat {
  chain prerouting {
    type nat hook prerouting priority 0;

    # Forward traffic from eth0 to a LAN server
    iifname eth0 tcp dport 80 dnat 192.168.1.2 comment "Port forwarding to web server"
  }

  chain postrouting {
    type nat hook postrouting priority 0;

    # Masquerade outgoing traffic
    oifname eth0 masquerade
  }
}
Evtl. hat jemand damit bereits Erfahrung, in Zeiten von DS-Lite vmtl. nicht so selten.

Vielen Dank im Voraus.

Gruß

Andy
Zuletzt geändert von andydld am 25.06.2020 07:08:05, insgesamt 1-mal geändert.

andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 04.10.2019 17:11:03

Nach "etwas" weiterem trial and error bin ich weiter und das Weiterleiten zumindest von Port 80/tcp http funktioniert.
Noch nicht hünbsch formatiert und im wesentlichen aus den Examples zusammenkopiert sieht's gerade so aus:

Code: Alles auswählen

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
	chain input {
		type filter hook input priority 0;

		# accept any localhost traffic
		iif lo accept
	
		# accept traffic originated from us
		ct state established,related accept

		# accept ping
        	ip protocol icmp icmp type echo-request ct state new accept

		# activate the following line to accept common local services
		#tcp dport { 22, 80, 443 } ct state new accept
		tcp dport 22 ct state new accept

		# accept neighbour discovery otherwise IPv6 connectivity breaks.
		ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit,  nd-router-advert, nd-neighbor-advert } accept

		# count and drop any other traffic
		counter drop

	}
	chain forward {
		type filter hook forward priority 0;
	}
	chain output {
		type filter hook output priority 0;
	}
}

table nat {
  chain prerouting {
    type nat hook prerouting priority 0;
    # redirect port 80/tcp (http) to internal webserver
    iif eth0 tcp dport { 80 } dnat 192.168.1.2
  }
  chain postrouting {
    type nat hook postrouting priority 100;
    oif tun0 masquerade
  }
}

TomL

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von TomL » 04.10.2019 18:22:26

Ist immer schwierig, sich in solche fremden Konstrukte reinzudenken... :roll: ... deswegen beschränke ich mich da nur auf ein paar mir aufgefallene Merkwürdigkeiten.... über die man vielleicht nachdenken könnte.
  1. Ich würde bei IPv6-ICMP kein "nexthdr" verwenden, weil das eine unnötige Beschränkung ist. Extensionheader und fragmentierte Pakete würden damit wohl gar nicht beachtet werden. Keine Ahnung, welche tatsächliche Auswirkung das haben kann. Aber vermutlich ist der Match via Layer-4-Protokoll die bessere Wahl (meta l4proto).
  2. Du verwendest die inet-Tabellen, also die gemeinsamen Tabellen für IPv4 und IPv6, aber im Prerouting beachtest Du nur IPv4. Auch da weiss ich nicht, welche Auswirkung das auf IPv6-Verbindungen hat. Vermutlich können die gar keine Verbindung etablieren. Außerdem ist auch nicht ersichtlich, ob OpenVPN überhaupt mit IPv6 konfiguriert ist, so das es mit solchem Traffic umgehen kann. Also, wenn OpenVPN sowieso keine IPv6-Verbindungen annehmen kann, kann man auch drüber nachdenken, nur die 'ip'-Tabellen anstatt 'inet' zu verwenden.
  3. Du hast eine Input-Regel für die Ports 80 und 443 erstellt. Aber imho sollte dort zumindest Port 80 nie ankommen, weil Du den ja in der Prerouting-Chain auf einen anderen Host redirected hast, weswegen imho solche Pakete nie einen lokalen Prozess auf diesem Hosten erreichen können. Meiner Meinung nach muss 80/443 nur dann via Input-Chain beachtet werden, wenn auf diesen Ports ein lokaler Prozess lauscht.
  4. Der Comment-Hinweis "# redirect port 80/tcp (http) to internal webserver" passt eigentlich nicht zur obigen Aussage in #1, weil Du ja HTTP/S durch den Tunnel redirectest auf eine Maschine auf der anderen Seite des Tunnels, also kanns eigentlich kein 'internal webserver' sein.
Und was mich am meisten irritiert, ist die Frage, warum man eine sichere VPN-Verbindung durch einen unsicheren VServer schleusen will. Direkt von den Clients via OpenVPN auf den Web-Server wäre meiner Meinung nach der deutlich sicherere Weg. Ich habe auch den Sinn des Tunnels hier in diesem Szenario überhaupt noch nicht verstanden. Ob mit oder ohne macht doch fast keinen Unterschied. ... befürchte ich.

andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 04.10.2019 20:49:40

Hallo Thomas,

vielen Dank für deine umfangreiche Antwort.

Das Grundanliegen ist, an einem DS-Lite-Anschluss (der keine öffentliche IP-Adresse hat) über den vServer eine statische IP4-Adresse "dranzubasteln".

Das erste Konfig.-Beispiel kann man imho vergessen. Meine eigene Antwort von heute ist wie erwähnt im wesentlichen aus den Beispielen die nftables unter Debian Buster mitliefert zusammenkopiert.

Details und "Schönheit" sollen noch folgen. Ich fuchs' mich aktuell noch in nftables und das gesamte Thema noch ein, von daher: Danke für die Hinweise und be patient.

Zu "4) comment ..." ist schlicht ein Doku-Fehler, wobei man den "internal webserver" auch so interpretieren könnte, das dieser im internen Netz steht, wie auch immer, völlig togal erstmal bzw. siehe voriger Punkt.

> Und was mich am meisten irritiert, ist die Frage, warum man eine sichere VPN-Verbindung durch einen unsicheren VServer schleusen will.

Findet doch nach aktuellen Stand gar nicht statt. Das VPN dient nur als "virtuelles Netzwerkkabel" zwischen dem vServer und dem DS-Lite-Anschluss.
Eine VPN-Verbindung wird gar nicht über den vServer geschleust/weitergeleitet/wie auch immer, möglich wär's allerdings.

> Direkt von den Clients via OpenVPN auf den Web-Server wäre meiner Meinung nach der deutlich sicherere Weg.

Ja, aber darum geht's nicht, siehe Grundanliegen.
Der Redirect von http dient nur dem ersten/einfachsten Test.

TomL

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von TomL » 05.10.2019 10:14:47

Ich glaube, oder besser ich erahne in weiter Ferne, was Du da versuchst umzusetzen. Scheinbar gibt es einen "Heimserver" hinter einem DS-Lite-Account, also ein Netzwerk mit öffentlichen IPV6-Adressen (GUA). Anscheinend soll nun ein öffentlich auch mit IPv4-Adresse erreichbarer VServer sowas wie ein 6to4-NAT durch einen VPN-Tunnel durchführen oder über den Tunnel einfach nur das lokale IPv4 des Heimnetzes erreichbar machen. Weil der Heimserver aber nur via IPv6 öffentlich erreichbar ist, besteht primär ein Tunnel mit IPv6-Konfiguration. Aber dennoch muss der Tunnel auch IPv4 transportieren. Ist das so korrekt umrissen? :? Ist ziemlich schwierig sich bei solch lückenhafter Informationen ein Bild zu machen, was am Ende überhaupt rauskommen soll :roll:

andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 05.10.2019 12:29:01

Ja, genau darum geht es, (Heim)server bzw. Dienste via Public IPv4 verfügbar zu machen.

Sofern die IPv6-Adresse(n) am DS-Lite statisch wären, liese sich das Ganze auch mit 6tunnel umsetzen (habe ich auch so schon gebaut), das hilft bzw. funktioniert allerdings nicht immer und erfüllt seinen Zweck nur für TCP-Verbindungen.

IPv6 sowohl im Tunnel als auch direkt am Anschluss und dem vServer spielt zum jetzigen Stand keine Rolle, es geht rein im IPv4.

Mal etwas weiter gedacht kann es beispielsweise bei Mobilfunkanbindung(en) ja auch vorkommen, das man keinerlei öffentlich erreichbare IPv4- und IPv6-Adresse(n) bekommt.

Jedenfalls danke für die Hinweise und wie bereits erwähnt, ich bin an dem Thema noch dran, Update(s) werden also folgen.
Da es mittlerweile über 450 Zugriffe auf den Thread gibt, scheint das Ganze generell nicht uninteressant zu sein.

Mir geht es ums selber machen sowie lernen und verstehen.
Unabhängig davon gibt das es ja auch kommerzielle Angebote wie beispielsweise http://www.feste-ip.net/ gibt.

scriptorius
Beiträge: 175
Registriert: 20.02.2004 18:52:14

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von scriptorius » 22.10.2019 13:39:14

Hi,
bist Du weiter gekommen?
Ich habe hier ein ähnliches Problem.
Was ich bisher versucht habe:

https://www.amazon.de/OpenVPN-Schritt-f ... 073BBCQCN

... seit Erscheinen dieses Buches hat sich wohl einiges getan. Der Anleitung kann man nicht mehr Schritt für Schritt folgen.

https://www.heise.de/select/ct/2018/2/1515452696423264

Dies beschreibt einen anderen Ansatz. Den konnte ich allerdings noch nicht testen.

Hast Du mittlerweile einen Weg gefunden, der das Problem löst?
Für ein paar Tipps wäre ich dankbar ...
Zuletzt geändert von scriptorius am 22.10.2019 14:59:14, insgesamt 1-mal geändert.

andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 22.10.2019 14:04:42

Hallo scriptorius,

> bist Du weiter gekommen?

Ja. Soweit wie ich es im Moment habe läuft es, hatte aber leider noch keine Zeit weder hier noch in meinem Blog das zu posten.
Einen Beitrags-Entwurf gibt es bereits, ist halt noch nicht fertig, mir kam da leider die Arbeit dazwischen.

In meiner Testumgebung ist das Ganze soweit stabil, aktuell wird ein Webserver und OpenVPN "weitergeleitet".
Ich sammle noch weitere Erfahrung und habe noch ein paar Dinge/Tests vor.

> Ich habe hier ein ähnliches Problem.

Das sieht wie aus?

> Dies beschreibt einen anderen Ansatz. Den konnte ich aller konnte ich noch nicht testen.

Die verlinkten Bücher bzw. Artikel kenne ich leider nicht.
Wie sieht denn der Ansatz aus?

> Hast Du mittlerweile einen Weg gefunden, der das Problem löst?

Ein Problem war es in dem Sinne ja nicht, schlichtweg halt noch nicht so gemacht und mangelnde Erfahrung mit nftables.

> Für ein paar Tipps wäre ich dankbar ...

Gerne. Entweder hier im Thread, per PM oder einen anderen Kanal.

scriptorius
Beiträge: 175
Registriert: 20.02.2004 18:52:14

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von scriptorius » 22.10.2019 14:51:42

Hi,
"Problem" meinte ich allgemein (also keine öffentliche ipv4, weil ds-lite etc...).

Ein Lösungsansatz ohne OpenVPN, hier wird lediglich ein ssh-Tunnel zu einem vsever mit öffentlicher ipv4 "gebaut" (wenn ich das richtig verstanden habe, ich beschäftige mich auch erst seit kurzem damit).

Hast Du denn eine "Anleitung", die Du per PM schicken könntest?

andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 22.10.2019 15:12:44

Verstehe.

Das Ganze mit ssh (und wireguard) steht noch auf meiner ewigen ToDo-Liste.

Wie bereits erwähnt, fertig ist mein Beitrag/Anleitung noch nicht, auch nicht "Präsentationsreif".

Ich merke gerade, das ich keine PM schreiben kann, bin wohl zu selten hier.

Für den Anfang ist ja erstmal relevant, das der wie auch immer geartete Tunnel steht und das Routing passt, dann folgt das Port-Forwarding.

Von daher erstmal die Frage, wie weit du bis jetzt bist?

scriptorius
Beiträge: 175
Registriert: 20.02.2004 18:52:14

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von scriptorius » 22.10.2019 17:23:40

... also ich versuche gerade auf dem vserver OpenVPN zu installieren. Die Anleitung aus dem Buch bringt leider nicht viel, da die CA-Variabeln wohl mittlerweile anders konfiguriert werden. An dieser Stelle bleibe ich hängen ...

andydld
Beiträge: 35
Registriert: 26.10.2017 17:47:58

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von andydld » 22.10.2019 17:54:50

Ja da wird's dann gleich mitunter tricky.
Zum Start und um schneller testen zu können habe ich es erstmal mit static keys aufgebaut:

https://openvpn.net/community-resources ... ini-howto/

Zum Punkt ssh und ds-lite habe ich das hier gefunden:

https://www.computerbase.de/forum/threa ... l.1883158/

Habe es nicht getestet, liest sich allerdings soweit wie ich das beurteilen kann gut.

scriptorius
Beiträge: 175
Registriert: 20.02.2004 18:52:14

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von scriptorius » 22.10.2019 18:20:03

Was ich brauche ist eine in sich schlüssige Anleitung, um OpenVPN unter Debian 10 auf einem vServer zu installieren.
Nach welcher Anleitung bist Du denn vorgegangen?

TomL

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von TomL » 22.10.2019 18:22:37

scriptorius hat geschrieben: ↑ zum Beitrag ↑
22.10.2019 18:20:03
Was ich brauche ist eine in sich schlüssige Anleitung, um OpenVPN unter Debian 10 auf einem vServer zu installieren.
Soll der VServer ebenfalls als Relay-Server fungieren oder willst Du nur einen Tunnel zwischen Heimnetz und VServer erstellen?

scriptorius
Beiträge: 175
Registriert: 20.02.2004 18:52:14

Re: Port Forwarding in OpenVPN-Tunnel

Beitrag von scriptorius » 22.10.2019 18:33:03

Die Notwendigkeit eines Relay-Servers sehe ich momentan noch nicht.

Antworten