OpenVPN port forwarding iptables

Gemeinsam ins Internet mit Firewall und Proxy.
DJannik
Beiträge: 15
Registriert: 13.06.2016 18:13:09

OpenVPN port forwarding iptables

Beitrag von DJannik » 26.01.2020 12:06:00

Hallo zusammen,
und zwar habe ich einen OpenVPN Server auf meinem Debian 9 aufgesetzt, funktioniert soweit auch, nur würde ich jetzt gerne bestimmte Ports an einen Clienten weiterleiten.
Auf dem richtigen Weg bin ich auf jeden Fall, nur die Praxis sieht mal wieder anders aus :evil:

Internet-Link: ens3
OpenVPN: tun0
VPN-Client-Adresse: 10.8.0.2
Server-Host: OVH

Was ich bisher an iptables gemacht habe

VPN-Betrieb

Code: Alles auswählen

iptables -A INPUT -i ens3 -m state --state NEW -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o ens3 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ens3 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE
iptables -A OUTPUT -o tun+ -j ACCEPT
Die Portweiterleitung

Code: Alles auswählen

iptables -t nat -A PREROUTING -i ens3 -p udp --dport 1500 -j DNAT --to-dest 10.8.0.2
iptables -t nat -A PREROUTING -i ens3 -p udp --dport 3005 -j DNAT --to-dest 10.8.0.2
iptables -t nat -A PREROUTING -i ens3 -p udp --dport 3101 -j DNAT --to-dest 10.8.0.2
iptables -t nat -A PREROUTING -i ens3 -p udp --dport 28960 -j DNAT --to-dest 10.8.0.2
iptables -t nat -A PREROUTING -i ens3 -p udp --dport 3478 -j DNAT --to-dest 10.8.0.2
iptables -t nat -A PREROUTING -i ens3 -p udp --match multiport --dports 27000:27030 -j DNAT --to-dest 10.8.0.2
iptables -t nat -A PREROUTING -i ens3 -p tcp --match multiport --dports 27015:27030 -j DNAT --to-dest 10.8.0.2

Noch ein paar Anmerkungen
  • es ist mir schon fast peinlich, aber ALLE policys sind auf ACCEPT; macht da oben bestimmt was überflüssig, ich weiß, aber beschäftige mich erst seit paar Tagen mit iptables
  • die oben aufgeführten Ports werden als filtered/open angezeigt, alle anderen Ports sind dennoch closed
Danke schon mal!! :hail:
Zuletzt geändert von DJannik am 26.01.2020 12:46:20, insgesamt 5-mal geändert.

TomL
Beiträge: 4769
Registriert: 24.07.2014 10:56:59

Re: OpenVPN port forwarding

Beitrag von TomL » 26.01.2020 12:10:44

DJannik hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 12:06:00
dennoch werden die oben aufgeführten Ports immer noch als closed angezeigt wenn ich das über einen online Port-Checker überprüfe
Vielleicht verstehe ich die Frage falsch... aber von außen und über irgendeinen Online-Port-Checker sollte eigentlich nur Port 1194 offen sein.
vg, Thomas

DJannik
Beiträge: 15
Registriert: 13.06.2016 18:13:09

Re: OpenVPN port forwarding

Beitrag von DJannik » 26.01.2020 12:18:24

TomL hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 12:10:44
Vielleicht verstehe ich die Frage falsch... aber von außen und über irgendeinen Online-Port-Checker sollte eigentlich nur Port 1194 offen sein.
Ich dachte ich könnte mir es sparen, die Zeilen zu posten, da die default policy ja sowieso ACCEPT ist
aber folgende Regeln sind auch noch aktiv

Code: Alles auswählen

iptables -A INPUT -p udp --dport 1500 -j ACCEPT
iptables -A INPUT -p udp --dport 3005 -j ACCEPT
iptables -A INPUT -p udp --dport 3101 -j ACCEPT
iptables -A INPUT -p udp --dport 28960 -j ACCEPT
iptables -A INPUT -p udp --dport 3478 -j ACCEPT
iptables -A INPUT -p udp --match multiport --dports 27000:27030 -j ACCEPT
iptables -A INPUT -p tcp --match multiport --dports 27015:27030 -j ACCEPT
Ich habe das ganze grade nochmal überprüft und keine Ahnung was ich da gestern gemacht habe, aber die Ports um die es geht sind nicht closed sondern filtered/open
Alle anderen Ports, an denen ich nichts gemacht habe, werden mir aber als closed angezeigt
(habe den Post jetzt berichtigt)

Aber wie bekomme ich die Ports denn nun an meinen Clienten weitergeleitet?
Zuletzt geändert von DJannik am 26.01.2020 13:10:29, insgesamt 3-mal geändert.

mat6937
Beiträge: 1526
Registriert: 09.12.2014 10:44:00

Re: OpenVPN port forwarding

Beitrag von mat6937 » 26.01.2020 12:50:39

DJannik hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 12:20:57
Aber wie bekomme ich die Ports denn nun an meinen Clienten weitergeleitet?
Du willst vom Server via VPN, lauschende Ports auf dem VPN-Client erreichen?
Dann brauchst Du auf deinem Server eine definierte Route via VPN-Interface in das (Nicht-VPN-)Subnetz deines Clienten.

DJannik
Beiträge: 15
Registriert: 13.06.2016 18:13:09

Re: OpenVPN port forwarding iptables

Beitrag von DJannik » 26.01.2020 13:05:01

mat6937 hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 12:50:39
Du willst vom Server via VPN, lauschende Ports auf dem VPN-Client erreichen?
Dann brauchst Du auf deinem Server eine definierte Route via VPN-Interface in das (Nicht-VPN-)Subnetz deines Clienten.
Ja genau, wegen DSLite funktioniert das anders nicht. Ich verstehe was du meinst, aber wie setze ich das um?
Helfen mir die iptables Regeln oben so überhaupt weiter dann, also stimmen die überhaupt inhaltlich?

mat6937
Beiträge: 1526
Registriert: 09.12.2014 10:44:00

Re: OpenVPN port forwarding iptables

Beitrag von mat6937 » 26.01.2020 13:12:59

DJannik hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 13:05:01
Ich verstehe was du meinst, aber wie setze ich das um?
Helfen mir die iptables Regeln oben so überhaupt weiter dann, also stimmen die überhaupt inhaltlich?
Ich weiß jetzt nicht ob diese iptables-Regeln nützlich oder hinderlich sind.
Wenn es nicht funktioniert, dann kannst Du die iptables-Regeln der filter-table ja mal (temporär) löschen.

Versuch mal auf dem Server mit:

Code: Alles auswählen

route add -net 192.168.xxx.0 netmask 255.255.255.0 gw 10.8.0.x dev tun0
(oder gleichwertig).
Das Subnetz und die IP-Adresse des gw musst Du anpassen. Auf dem Client sollte mit iptables das richtige source-NAT (MASQUERADE) gesetzt sein. Danach machst Du einen Ping auf die interne IP-Adresse des Clienten und einen Portscan auf einen lauschenden TCP-Port.

DJannik
Beiträge: 15
Registriert: 13.06.2016 18:13:09

Re: OpenVPN port forwarding iptables

Beitrag von DJannik » 26.01.2020 20:22:01

mat6937 hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 13:12:59
Auf dem Client sollte mit iptables das richtige source-NAT (MASQUERADE) gesetzt sein. Danach machst Du einen Ping auf die interne IP-Adresse des Clienten und einen Portscan auf einen lauschenden TCP-Port.
Ich hatte bisher kein Erfolg, mein Client ist auch Windows und nicht Linux. Route auf meinem Server ist gesetzt, bekomme den Clienten trotzdem nicht angepingt.
Weder über 10.8.0.2 noch über 192.168.0.50 (locale Client-IP)

Code: Alles auswählen

route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.8.0.2 dev tun0
das für meinen Server stimmt aber oder?

hab dann noch probiert nobind in der Client-config auszukommentieren, hat aber keine Veränderung mit sich gebracht, weiß auch nicht genau in welchen Fällen man diese braucht
Server-config enthält außerdem folgende Zeile

Code: Alles auswählen

push "redirect-gateway def1 bypass-dhcp"
aber das muss ja auch so sein.

Wie setze ich denn die richtige source-NAT auf dem Client?

mat6937
Beiträge: 1526
Registriert: 09.12.2014 10:44:00

Re: OpenVPN port forwarding iptables

Beitrag von mat6937 » 26.01.2020 22:00:54

DJannik hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 20:22:01
Route auf meinem Server ist gesetzt, bekomme den Clienten trotzdem nicht angepingt.
Weder über 10.8.0.2 noch über 192.168.0.50 (locale Client-IP)

Code: Alles auswählen

route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.8.0.2 dev tun0
das für meinen Server stimmt aber oder?
Wie sind auf deinem Server die Ausgaben von:

Code: Alles auswählen

ip a
route -n
iptables -nvx -L -t nat
?

Benutzeravatar
DynaBlaster
Beiträge: 957
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: OpenVPN port forwarding iptables

Beitrag von DynaBlaster » 26.01.2020 22:36:29

Ich verstehe das Setup noch nicht. Port 27015 und Co sehen stark nach Half-Life-Gamserver und Co. aus. Letzterer läuft also auf dem Client mit der IP 192.168.0.50 bzw. 10.8.0.2?

Wo steht denn der OpenVPN-Server? Irgendwo im Internet oder hat der auch ne IP im Netz 192.168.0.0/24? Gibts nen dritten Recher, der sich da als VPN-Client verbindet und von dem aus die Ports 27015 und Co. auf dem Rechner 192.168.0.50/24 erreicht werden sollen?

Standardmässig ist nen OpenVPN-Server so konfiguriert, das der pro VPN-Verbindung /30er-Netze aufspannt und keine Client-to-Client-Kommunikation zulässt.

Sprich Client 1:
IP: 10.8.0.2/30
GW/VPN-Server-IP: 10.8.0.1/30
Network 10.8.0.0, Broadcast 10.8.0.3

Client 2:
IP 10.8.0.6/30
GW/VPN-Server-IP: 10.8.0.5/30
Network 10.8.0.4, Broadcast 10.8.0.7

usw..

Ich würde als erstes schauen, ob die Windows-Kiste bei aktivem VPN via 10.8.0.2 vom Debian-VPN-Server (10.8.0.1) pingbar ist . Ggf. die Windows-Firewall checken, durchaus möglich, das die das VPN-Netz als öffentlich und damit nicht als vertrauenswürdig erachtet. Das gleiche gilt für die Ports, die erreicht werden sollen. Firewall auf der Windows-Kiste? Lauschen die Serveranwendungen auf dem Window-Rechner überhaupt auf der dem VPN-Interface oder "binden" die sich nur an die 192.168.0.50?

mat6937
Beiträge: 1526
Registriert: 09.12.2014 10:44:00

Re: OpenVPN port forwarding iptables

Beitrag von mat6937 » 26.01.2020 23:12:03

DJannik hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 12:06:00
und zwar habe ich einen OpenVPN Server auf meinem Debian 9 aufgesetzt, funktioniert soweit auch, ...
Was genau meinst Du mit "funktioniert soweit auch" und wie hast Du das festgestellt?
Ist der Windows-Rechner (VPN-Client) dein Gerät? Kennst Du dich mit Windows aus?

DJannik
Beiträge: 15
Registriert: 13.06.2016 18:13:09

Re: OpenVPN port forwarding iptables

Beitrag von DJannik » 27.01.2020 10:45:09

mat6937 hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 22:00:54
Wie sind auf deinem Server die Ausgaben von:

Code: Alles auswählen

ip a
route -n
iptables -nvx -L -t nat

Code: Alles auswählen

ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:31:ea:54 brd ff:ff:ff:ff:ff:ff
    inet 51.12.12.12/32 brd 51.12.12.12 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::fxxx:3xxx:fxxx:exxx/64 scope link
       valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fd42:42:42:42::1/112 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::2d9e:8b5a:8a45:edaf/64 scope link flags 800
       valid_lft forever preferred_lft forever

Code: Alles auswählen

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         51.12.12.1     0.0.0.0         UG    0      0        0 ens3
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
51.12.12.1     0.0.0.0         255.255.255.255 UH    0      0        0 ens3

Code: Alles auswählen

iptables -nvx -L -t nat
Chain PREROUTING (policy ACCEPT 25458 packets, 1179649 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 16450 packets, 633457 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 193 packets, 18939 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 206 packets, 19530 bytes)
    pkts      bytes target     prot opt in     out     source               destination
    7525  1090695 MASQUERADE  all  --  *      ens3    10.8.0.0/24          0.0.0.0/0
DynaBlaster hat geschrieben: ↑ zum Beitrag ↑
26.01.2020 22:36:29
Ich verstehe das Setup noch nicht. Port 27015 und Co sehen stark nach Half-Life-Gamserver und Co. aus. Letzterer läuft also auf dem Client mit der IP 192.168.0.50 bzw. 10.8.0.2?

Wo steht denn der OpenVPN-Server? Irgendwo im Internet oder hat der auch ne IP im Netz 192.168.0.0/24? Gibts nen dritten Recher, der sich da als VPN-Client verbindet und von dem aus die Ports 27015 und Co. auf dem Rechner 192.168.0.50/24 erreicht werden sollen?

Lauschen die Serveranwendungen auf dem Window-Rechner überhaupt auf der dem VPN-Interface oder "binden" die sich nur an die 192.168.0.50?
Bei der 192.168.0.0/24 hatte ich einen Denkfehler, hab das Routing inzwischen schon wieder entfernt, hat kein Sinn gemacht. Es gibt nur einen Clienten mit der lokalen IP 192.168.0.50. Der Client ist eben an einem DSLite Link und deswegen auch der Aufwand hier. Der Client bekommt im VPN-Netz die 10.8.0.2 zugewiesen. Der VPN-Server steht in Frankfurt und hat eine statische public IP. Mittlerweile kann ich sowohl den Clienten vom Server aus, als auch umgekehrt anpingen. Und ich schätze die binden sich nur an die 192.168.0.50, dachte aber das ist nicht schlimm, da ja ohnehin der gesamte Traffic über VPN läuft dann.

Was ich jetzt versucht habe und da hab ich jetzt auch nochmal was verändert, mit folgenden Befehlen die geöffneten Ports direkt an den Clienten weiterzuleiten. Das heißt wenn sich jemand an Port 28960 an meinem VPN verbindet, soll dieser direkt an meinem Client landen. Und das Spiel um was es geht ist übrigens MW2. Es ist kein eigener Server, das Spiel zeigt mir, wenn keine Ports geöffnet sind NAT:strict an, wenn ich die Ports über den Router ganz normal öffnen würde, würde sich das zu NAT:open ändern, was mir dann eben die Möglichkeit gibt, Spiele zu hosten.

Code: Alles auswählen

iptables -t nat -A PREROUTING -i ens3 -p udp --dport 28960 -j DNAT --to-destination 10.8.0.2:28960
Hier mal den einen Port als Beispiel, habe das natürlich für alle Ports jetzt mal so aufgeschrieben aber hab das alles auch oben in der iptables Ausgabe entfernt, Zwecks Überblick und weil ich nicht weiß ob das überhaupt richtig so ist.

mat6937
Beiträge: 1526
Registriert: 09.12.2014 10:44:00

Re: OpenVPN port forwarding iptables

Beitrag von mat6937 » 27.01.2020 11:30:30

DJannik hat geschrieben: ↑ zum Beitrag ↑
27.01.2020 10:45:09
Bei der 192.168.0.0/24 hatte ich einen Denkfehler, hab das Routing inzwischen schon wieder entfernt, hat kein Sinn gemacht. Es gibt nur einen Clienten mit der lokalen IP 192.168.0.50. Der Client ist eben an einem DSLite Link und deswegen auch der Aufwand hier. Der Client bekommt im VPN-Netz die 10.8.0.2 zugewiesen.

Code: Alles auswählen

iptables -t nat -A PREROUTING -i ens3 -p udp --dport 28960 -j DNAT --to-destination 10.8.0.2:28960
D. h. Du willst die Dienste (daemons) auf dem Windows-Client, an der VPN-Transfer-Netz-IP-Adresse lauschen lassen?
Dann schau mit z. B. wireshark (oder gleichwertig) auf dem Windows-Client nach, ob ein Portscan dort ankommt, wenn Du mit o. g. und gesetzter DNAT-Regel (auf dem Server) einen Portscan aus dem Internet auf deinem Server und den Port 28960 machst.

Benutzeravatar
DynaBlaster
Beiträge: 957
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Re: OpenVPN port forwarding iptables

Beitrag von DynaBlaster » 27.01.2020 17:32:40

Vielleicht ist das Problem auch einfach nur deaktiviertes IP_Forward auf dem Debian-Server

Code: Alles auswählen

cat /proc/sys/net/ipv4/ip_forward
1 heisst aktiv, 0 heisst inaktiv

Ansonsten sieht das eigentlich gut aus. iptables-seitig müsste das hier reichen, um Anfragen aus dem Internet an 51.12.12.12:28960 auf 10.8.0.2:28960 weiterzuleiten

Code: Alles auswählen

iptables -t nat -A PREROUTING -i ens3 -p udp --dport 28960 -j DNAT --to-destination 10.8.0.2:28960
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens3 -j MASQUERADE
# optional, wenn die Default-Policy für die FORWARd-Chain auf DROP gesetzt ist
#iptables -A FORWARD -i tun+ -o ens3 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
#iptables -A FORWARD -i ens3 -o tun+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
Wenn der Windows-Client tatsächlich alles durch das VPN routet, müsstest du bei https://www.wieistmeineip.de entsprechend auch 51.12.12.12 statt der DSLlite-IP angezeigt bekommen. Das impliziert dann allerdings auch ein bereits aktiviertes ip_forward auf dem Debian-Server. Für den MW-Serverdaemon heisst das aber weiterhin, das der auch auf Anfragen an 10.8.0.2 reagieren muss. Wenn der/die Dienst(e) nur auf 192.168.0.50 reagieren, hilft auch das Prerouting auf 10.8.0.2 nix. Dann müsste man die Windows-Kiste überreden, ebenfalls Router zu spielen und Pakete an 10.8.0.2 an 192.168.0.50 weiterzugeben und andersherum.

DJannik
Beiträge: 15
Registriert: 13.06.2016 18:13:09

Re: OpenVPN port forwarding iptables

Beitrag von DJannik » 28.01.2020 15:54:03

Über wieistmeineip bekomme ich die Server-IP angezeigt, das heißt ip_forward ist auf jeden Fall aktivert.
mat6937 hat geschrieben: ↑ zum Beitrag ↑
27.01.2020 11:30:30
Dann schau mit z. B. wireshark (oder gleichwertig) auf dem Windows-Client nach, ob ein Portscan dort ankommt
Habe gestern mal mit den gesetzten Regeln ein Portscan an 28960 UDP gemacht, auf meinem Client ist aber nichts angekommen. :(
DynaBlaster hat geschrieben: ↑ zum Beitrag ↑
27.01.2020 17:32:40
Für den MW-Serverdaemon heisst das aber weiterhin, das der auch auf Anfragen an 10.8.0.2 reagieren muss. Wenn der/die Dienst(e) nur auf 192.168.0.50 reagieren, hilft auch das Prerouting auf 10.8.0.2 nix. Dann müsste man die Windows-Kiste überreden, ebenfalls Router zu spielen und Pakete an 10.8.0.2 an 192.168.0.50 weiterzugeben und andersherum.
Habe auf jeden Fall schon einen Weg gefunden, wie man das realisieren könnte, Windows unterstützt das nämlich nur für TCP, aber nicht UDP... :facepalm:
Was aber auch der Fall ist, der MW-Daemon kann nach außen über Port 28960 kommunizieren OHNE gesetztes Routing zwischen 192.168.0.50 <-> 10.8.0.2
Das heißt ein Routing auf dem Client wäre sowieso entbehrlich?
Aber das Problem ist ja eben, dass ein Portscan nicht mal ankommt.

Und ich weiß nicht in wie fern das relevant ist aber in der VPN-Client-config habe ich das standardmäßige "nobind" auskommentiert, aber das sollte sich wohl eher als Vorteil erweisen
Gibts sonst noch was zu beachten an config-Parameter?

mat6937
Beiträge: 1526
Registriert: 09.12.2014 10:44:00

Re: OpenVPN port forwarding iptables

Beitrag von mat6937 » 28.01.2020 17:55:28

DJannik hat geschrieben: ↑ zum Beitrag ↑
28.01.2020 15:54:03
Habe gestern mal mit den gesetzten Regeln ein Portscan an 28960 UDP gemacht, auf meinem Client ist aber nichts angekommen. :(
...
Aber das Problem ist ja eben, dass ein Portscan nicht mal ankommt.
Mit welchem Tool hast Du den UDP-Portscan gemacht?

Versuch mal mit einem TCP-Portscan, denn das ist einfacher und hier im Test nicht relevant (ob TCP oder UDP).

Antworten