Portforwarding

Dec 14, 2022
68
1
8
Hallo zusammen!
Ich brauche mal Hilfe bei einem Portforwarding. Ehrlicherweise bin ich nicht sicher, ob das Problem mit der Virtualisierung zusammenhängt. Vielleicht hat trotzdem jemand eine Idee. Ich sitze schon seit fast zwei Wochen dran, bekomme es aber einfach nicht ans Laufen.

Vorbemerkung:
Ich habe einen DSlite Anschluss weshalb ich leider so ohne Weiteres keine Ports freigeben kann. Daher habe ich bei Inos einen VServer gemietet.

Aufgabe
Die App (PINode), die ich benutzen möchte, läuft unter Windows und benutzt Docker, um in einem Container einen Task laufen zu lassen, der wiederum die freigegebenen Ports braucht (31400-31409). Deshalb der "Umweg" per Wireguard auf den VServer bei Ionos um über die fixe IP die Ports forwarden zu können.

Setup Server::
Auf dem Ionos Server sind die Ports 31400-31409 freigegeben.
Folgendes Routing:
Bash:
#!/bin/bash
echo "###################"
echo "Erstelle IPTables INPUT Regeln"
echo "###################"
iptables -A INPUT -i ens6 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i ens6 -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -P INPUT DROP

echo "###################"
echo "Erstelle IPTables NAT Regeln"
echo "###################"
iptables -t nat -A PREROUTING -i ens6 -p tcp -m multiport --dport 31400,31401,31402,31403,31404,31405,31406,31407,31408,31409 -j DNAT --to-destination 192.168.200.2
iptables -t nat -A POSTROUTING -o wg0 -p tcp -m multiport --dport 31400,31401,31402,31403,31404,31405,31406,31407,31408,31409 -d 192.168.200.2 -j SNAT --to-source 192.168.200.1

echo "###################"
echo "Erstelle Forward Regeln"
echo "###################"
iptables -P FORWARD DROP
iptables -A FORWARD -i ens6 -o wg0 -p tcp -m multiport --dport 31400,31401,31402,31403,31404,31405,31406,31407,31408,31409 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Wireguard "server"
Die wg0.conf:
Code:
[Interface]
Address = 192.168.200.1/24
ListenPort = 51820
PrivateKey =
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens6 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens6 -j MASQUERADE

# Client1
[Peer]
PublicKey =
AllowedIPs = 192.168.200.2/32

Client::
Win10Pc als VM in Proxmox 8.2.3
Firewall der VM mit Portfreigabe (denke unnötig?)
Windows Firewall 10 Ports für ein- und ausgehenden Verkehr freigegeben
Wireguard client1 läuft
Die client1.conf:
Code:
[Interface]
PrivateKey =
Address = 192.168.200.2
DNS = 8.8.8.8

[Peer]
PublicKey =
Endpoint = Meine.Ionos.Server.IP
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Docker in der Standardkonfiguration. WSL unter Windows installiert.
Die App und der Docker container laufen, aber das Portforwarding funktioniert nicht:
Screenshot 2024-09-02 205809.png

Manchmal kommt ein connect zustande, aber die Portnummern passen nie. Es sind zwei verschiedene Versuche, daher die unterschiedlichen PID.
Screenshot 2024-09-01 135048.png
Ich habe leider nur begrenzt Ahnung von der Materie. Daher haben meine bisherigen Lösungsversuche bedauerlicherweise nichts gebracht. Ich vermute, das Ganze hängt am ehesten mit der Routing Tabelle auf dem VServer zusammen. Die habe ich auch nur kopiert und kann nicht sicher sagen, ob das alles so korrekt ist.

Bin für jeden Tipp dankbar!
 
Hallo,

Vorab, leider kann ich bei dem Problem nicht helfen. Nicht weil ich nicht will oder kann sondern einfach die Zeit nicht habe.
Aber meine Zeit reicht für einen kleinen Tip.


Setze immer an oberste Stelle im Skript die default Berechtigungen der Chains

INPUT
OUTPUT
FORWARD
 
  • Like
Reactions: FlyByWire
Hallo CoolTux. Danke für die Antwort. Wie gesagt, ich habe das meiste nur kopiert und leider habe ich so wenig Ahnung von der Materie, dass mich Dein Tipp schon überfordert.:rolleyes: Mit anderen Worten, ich weiß nicht genau, was Du damit gemeint hast.

Vielleicht doch noch eine Sache, die vielleicht schnell zu beantworten ist:
Seit das script aktiv ist, funktioniert das DNS außerhalb des Tunnels nicht mehr. Sprich wennich mich per SSH auf den VServer begebe, kann ich z.b. keine updates machen.
ping 8.8.8.8 funktioniert
ping www.google.com funktioniert nicht.
Ein Freund hatte epfohlen, vor die Zeile
Code:
iptables -P INPUT DROP
noch die Zeile
Code:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
zu setzen. Leider hilft das aber nicht hinsichtlich des DNS Problems.

Könntest Du mir bezüglich des Ursprünglichen Problems vielleicht noch einen Tipp geben, wo ich am ehesten suchen sollte? Vserver oder lokaler Client?
 
Last edited:
Code:
IPTABLES="/sbin/iptables"


### Herstellen eines sauberen Startpunktes
# access everything by default
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

# cleanup all chains

$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# zero all packets and counters
$IPTABLES -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z


### setzen der default policies
# drop everything by default!"
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

# set the nat/mangle/raw table's chains to ACCEPT"
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT


# allow loopback interface to do anything
$IPTABLES -A INPUT -i lo -m comment --comment "Allow loopback input to do anything" -j ACCEPT
$IPTABLES -A OUTPUT -o lo -m comment --comment "Allow loopback output to do anything" -j ACCEPT


echo "###################"
echo "Erstelle IPTables INPUT Regeln"
echo "###################"
iptables -A INPUT -i ens6 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i ens6 -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT


....
....
hier dann einfach weiter die regeln schreiben


Das wäre so in meinen Augen eine einfache Firewall. Erstmal alles auf Null. Und dann die defaullt Chains setzen. Hier habe ich bis auf OUTPUT alles auf ACCEPT gesetzt. Also alles was raus soll wird akzeptiert. alles andere ist verboten und muss erlaubt werden.

Und dann können Deine Regeln kommen.

Ich habe IPTABLES als Variable gesetzt. Wenn Du das übernimmst schaue bitte genau ob der PATH passt /sbin/iptables bei mir. Ich glaube heutzutage zählt iptables nicht zum Basissystem und wird wohl unter /usr/sbin/ liegen.
 
Last edited:
  • Like
Reactions: FlyByWire
Wow, vielen Dank, jetzt hab ich dir doch viel von deiner Zeit geklaut
Nur um ganz sicher zu gehen, deine Ausführungen beziehen sich alle auf den Inos Server?! Dort kann man die Firewall über eine GUI administrieren. Da hatte ich die entsprechenden Ports bereits freigegeben. Offensichtlich reicht das also nicht?!
Ich werde mir das mal in Ruhe ansehen und ausprobieren. Ganz vielen Dank für deine Hilfe!
 
Wow, vielen Dank, jetzt hab ich dir doch viel von deiner Zeit geklaut
Nur um ganz sicher zu gehen, deine Ausführungen beziehen sich alle auf den Inos Server?! Dort kann man die Firewall über eine GUI administrieren. Da hatte ich die entsprechenden Ports bereits freigegeben. Offensichtlich reicht das also nicht?!
Ich werde mir das mal in Ruhe ansehen und ausprobieren. Ganz vielen Dank für deine Hilfe!

Nein. Das hat mit IONOS gar nichts zu tun. Ich habe nur allgemeine iptables Regeln gegeben für ein iptables Netfilter System. Also GNU/Linux Systeme mit iptables.
 
Nein. Das hat mit IONOS gar nichts zu tun. Ich habe nur allgemeine iptables Regeln gegeben für ein iptables Netfilter System. Also GNU/Linux Systeme mit iptables.
Die Regeln, die ich ober gepostet habe, sind ja so (von mir) auf dem IONOS Server angelegt. Lokal läuft ja unter Proxmox Windows als client. Ich ändere also die von Dir geschriebenen Regeln auf dem IONOS Server, oder muß ich in Proxmox (auch noch) machen? Sorry für die vielen Fragen, aber ich will das unbedingt ans laufen bekommen...:rolleyes:

PS: IPTABLES liegt bei mir auf dem IONOS (Ubuntu 22.04) auch unter /sbin . Müsste also passen.
 
So ganz habe ich noch keine Vorstellung von Deinem Setup.
Bei sowas ist ein kleiner Netzwerkplan immer ganz hilfreich um zu sehen welche Teilnehmer es gibt und wie sie Kommunizieren sollen.

Nennt sich Kommunikationsmatrix
 
Irgendwas ist hier komisch. Ich habe jetzt mal folgendes script auf dem Server mit der IPv4 217 ausgeführt und auch im crontab hinterlegt. Komischerweis funktioniert beim ssh Zugriff die DNS immer noch nicht. Wie gehabt. Ping geht nur mit IP.

Ich habe IPTABLES als Variable gesetzt. Wenn Du das übernimmst schaue bitte genau ob der PATH passt /sbin/iptables bei mir. Ich glaube heutzutage zählt iptables nicht zum Basissystem und wird wohl unter /usr/sbin/ liegen.

Ich sehe grade, dass es auf der Maschine iptables an beiden Orten (/sbin uns usr/sbin) gibt. Liegt da das Problem?

PS: Ich komme jetzt vom Windows10 PC mit aktiviertem wireguard gar nicht mehr ins Netz. Es geht auch kein ping.

Code:
### Herstellen eines sauberen Startpunktes
# access everything by default
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# cleanup all chains

iptables -F
iptables -t nat -F
iptables -t mangle -F

iptables -X
iptables -t nat -X
iptables -t mangle -X

# zero all packets and counters
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z


### setzen der default policies
# drop everything by default!"
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# set the nat/mangle/raw table's chains to ACCEPT"
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT


# allow loopback interface to do anything
iptables -A INPUT -i lo -m comment --comment "Allow loopback input to do anything" -j ACCEPT
iptables -A OUTPUT -o lo -m comment --comment "Allow loopback output to do anything" -j ACCEPT

echo "###################"
echo "Erstelle IPTables INPUT Regeln"
echo "###################"
iptables -A INPUT -i ens6 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i ens6 -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT


echo "###################"
echo "Erstelle IPTables NAT Regeln"
echo "###################"
iptables -t nat -A PREROUTING -i ens6 -p tcp -m multiport --dport 31400,31401,31402,31403,31404,31405,31406,31407,31408,31409 -j DNAT --to-destination 192.168.200.2
iptables -t nat -A POSTROUTING -o wg0 -p tcp -m multiport --dport 31400,31401,31402,31403,31404,31405,31406,31407,31408,31409 -d 192.168.200.2 -j SNAT --to-source 192.168.200.1

echo "###################"
echo "Erstelle Forward Regeln"
echo "###################"
iptables -P FORWARD DROP
iptables -A FORWARD -i ens6 -o wg0 -p tcp -m multiport --dport 31400,31401,31402,31403,31404,31405,31406,31407,31408,31409 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 
Last edited:
Hier habe ich bis auf OUTPUT alles auf ACCEPT gesetzt. Also alles was raus soll wird akzeptiert. alles andere ist verboten und muss erlaubt werden.
Sorry, wenn ich da nochmal nachfrage, aber müsste das in Deiner Regel dann nicht dann andersrum sein?!

Code:
### setzen der default policies
# drop everything by default!"
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
 
Sorry, wenn ich da nochmal nachfrage, aber müsste das in Deiner Regel dann nicht dann andersrum sein?!

Code:
### setzen der default policies
# drop everything by default!"
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Sorry, da habe ich Unsinn geschrieben. Ich meinte bis auf INPUT habe ich alles auf ACCEPT gesetzt.
 
  • Like
Reactions: FlyByWire
@CoolTux: Irgendeine Idee hierzu?
Ich sehe grade, dass es auf der Maschine iptables an beiden Orten (/sbin uns usr/sbin) gibt. Liegt da das Problem?

PS: Ich komme jetzt vom Windows10 PC mit aktiviertem wireguard gar nicht mehr ins Netz. Es geht auch kein ping.
Ist es villeicht sinnvoll unter
# cleanup all chains
auch die DNAT und SNAT zurück zu setzen?
 
Also Du musst natürlich für Zugriffe auf den Host selbst die nötigen Ports bei Input öffnen.

Es scheint ja das Du die Ports für VPN in der Input Chaine offen hast. Klingt zu mindest so das der Tunnel aufgebaut wurde.

Du kannst auch so konfigurieren das aller Traffik über das wireguard Interface erlaubt wird.
 
Also Du musst natürlich für Zugriffe auf den Host selbst die nötigen Ports bei Input öffnen.
Sollte nicht folgende Regel das eingentlich erlauben?
# allow loopback interface to do anything
$IPTABLES -A INPUT -i lo -m comment --comment "Allow loopback input to do anything" -j ACCEPT
$IPTABLES -A OUTPUT -o lo -m comment --comment "Allow loopback output to do anything" -j ACCEPT


Es scheint ja das Du die Ports für VPN in der Input Chaine offen hast. Klingt zu mindest so das der Tunnel aufgebaut wurde.
Mit dem ursprüglichen script habe ich bei ativem Wireguard Tunnel, von der lokalen Windows10 Maschine Zugang zum WWW. Wenn ich Deine Ergänzungen im script einfüge, habe ich keinen WWW Zugriff mehr durch den Tunnel.

Du kannst auch so konfigurieren das aller Traffik über das wireguard Interface erlaubt wird.
Der Traffic (durch den Tunnel) funktioniert (mit dem ursprüglichen script), nur das Portmapping leider nicht.
Screenshot 2024-09-07 114657.png

tasklist:
Screenshot 2024-09-07 114835.png
 
So jetzt aber. Ich würde Dir empfehlen einfach mal ganz von vorn an zu fangen. Und baue die Regeln langsam auf. Ausgehend immer vom iono Server und wie der heißt.


Code:
IPTABLES="/sbin/iptables"


### Herstellen eines sauberen Startpunktes
# access everything by default
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT


# cleanup all chains
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F


$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X


# zero all packets and counters
$IPTABLES -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z


### setzen der default policies
# drop everything by default!"
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT


# set the nat/mangle/raw table's chains to ACCEPT"
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT


$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT


# allow loopback interface to do anything
$IPTABLES -A INPUT -i lo -m comment --comment "Allow loopback input to do anything" -j ACCEPT
$IPTABLES -A OUTPUT -o lo -m comment --comment "Allow loopback output to do anything" -j ACCEPT


echo "###################"
echo "Erstelle IPTables INPUT Regeln"
echo "###################"
$IPTABLES -A INPUT -i ens6 -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i ens6 -p udp --dport 51820 -j ACCEPT
$IPTABLES -A INPUT -p icmp -j ACCEPT


# Allow wg interface connection to Wireguard Server
$IPTABLES -A INPUT -i wg0 -j ACCEPT

# Allow wg interface connections to be forwarded through other interface
$IPTABLES -A FORWARD -i wg0 -j ACCEPT
$IPTABLES -A FORWARD -i wg0 -o ens6 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i ens6 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# NAT the VPN client traffic to the internet. change the ip addrwess mask according to you info of wg0 result while running "ip" command
$IPTABLES -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens6 -j MASQUERADE

Die Regeln sind von mir aus dem Kopf, auch so die Interface namen. Also bitte sehr genau prüfen.
 
  • Like
Reactions: FlyByWire
# NAT the VPN client traffic to the internet. change the ip addrwess mask according to you info of wg0 result while running "ip" command $IPTABLES -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens6 -j MASQUERADE
Letzte Frage vor dem Test. Mit meiner wg0.conf
Screenshot 2024-09-07 164035.png
müsste ich die das script auf 192.168.200.1/24 ändern, korrekt?

... die benötigten ports (31400-31409) sind damit freigeben?
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!