Ich habe 2 Maschinen, auf denen Ubuntu 22.04 läuft, wir nennen sie Server und Proxy. Der Proxy ist ein VPS mit einer statischen öffentlichen IP, und der Server läuft hinter einem NAT. Ich möchte den gesamten Verkehr über einige Ports des Proxys an den Server weiterleiten.
Ich habe zwischen den beiden ein Wireguard-VPN eingerichtet und beide können sich gegenseitig anpingen. Wenn ich die VPN-Adresse des Servers vom Proxy aus curle, erhalte ich die richtige HTML-Antwort. Und durch das Einrichten von Nginx auf dem Proxy (was nicht die beabsichtigte endgültige Lösung ist, da ich andere Dienste routen möchte, die nicht http/https sind) kann ich per Proxy_Pass an die VPN-IP senden und erneut eine richtige HTML-Antwort erhalten.
Aber ich konnte die Weiterleitung nicht mit iptables/ufw einrichten. Dies ist meine Wireguard-Konfiguration, die die iptables-Routingregeln für die Schnittstelle enthält.
Stellvertreter:
[Interface]
# Proxy with static ip
Address = 10.250.0.1/32
ListenPort = 23456
PrivateKey = {private key}
# packet forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# port forwarding
PreUp = iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.250.0.2
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.250.0.2
PreUp = iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.250.0.2
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.250.0.2
[Peer]
# main_server behind nat
PublicKey = {pub key}
AllowedIPs = 10.250.0.2/32
Server:
[Interface]
Address = 10.250.0.2/32
ListenPort = 23456
PrivateKey = {priv key}
[Peer]
PublicKey = {pub key}
Endpoint = {proxy server ip}:23456
AllowedIPs = 10.250.0.0/16
PersistentKeepalive = 25
Das Ausführen sudo iptables-save -c
gibt Folgendes zurück:
# Completed on Wed Aug 24 17:01:57 2022
# Generated by iptables-save v1.8.7 on Wed Aug 24 17:01:57 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
[0:0] -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.250.0.2
[4:208] -A PREROUTING -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.250.0.2
COMMIT
Die Anzahl der Pakete und Bytes [4:208]
steigt jedes Mal, wenn ich versuche, über einen Webbrowser auf den Proxy zuzugreifen
Antwort1
Ich habe Probleme, eine ähnliche Portweiterleitung über Wireguard zu einem Dienst hinter einem NAT zum Laufen zu bringen. Meine Konfiguration ist ähnlich wie Ihre, aber es gibt zwei Änderungen, die Sie versuchen sollten, damit es funktioniert.
Zunächst stellte ich fest, dass ich zusätzlich zur DNAT-Regel eine SNAT-Regel brauchte. Sie könnten es mit etwas wie Folgendem versuchen:
iptables -t nat -A POSTROUTING -d 10.250.0.2 -o wg0 -p tcp --dport 80 -j SNAT --to-source 10.250.0.1
Zweitens denke ich, dass Sie hier PostUp/PreDown statt PreUp/PostDown verwenden sollten. Die Routing-Regeln scheinen nicht zu gelten, wenn die Schnittstelle beim Ausführen von iptables noch nicht aktiv ist. Daher stellt PostUp sicher, dass die Schnittstelle zuerst eingerichtet ist.
Zusammengefasst und etwas vereinfacht durch die Verwendung von Multiport können Sie die folgende Konfiguration auf dem Proxy ausprobieren:
[Interface]
# Proxy with static ip
Address = 10.250.0.1/32
ListenPort = 23456
PrivateKey = {private key}
# packet forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# port forwarding
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to- destination 10.250.0.2
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to- destination 10.250.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.250.0.2 -o wg0 -p tcp -m multiport --dports 80,443 -j SNAT --to-source 10.250.0.1
PreDown = iptables -t nat -D POSTROUTING -d 10.250.0.2 -o wg0 -p tcp -m multiport --dports 80,443 -j SNAT --to-source 10.250.0.1
[Peer]
# main_server behind nat
PublicKey = {pub key}
AllowedIPs = 10.250.0.2/32
Ich hoffe, ich habe dabei keine Tippfehler gemacht – am besten überprüfen Sie es sorgfältig.