
Ich habe ein Problem beim Einrichten von Wireguard. Mein Problem sind Pakete von überall, aber von den Wireguard-Hosts, die nicht über die WG0-Schnittstelle gesendet werden. Ich führe WG0 mit aktivierter IP-Weiterleitung 192.168.96.1/24 aus. Ich kann den Webserver auf dem WG0-Host sowohl über die WG0-IP als auch über seine LAN-IP erreichen. Aber kein Datenverkehr von anderen LAN-Hosts – oder Antworten auf maskierten Datenverkehr werden über WG0 gesendet, kommen aber über eth0 an.
ip route
192.168.96.0/24 dev wg0 proto kernel scope link src 192.168.96.1
Ich habe viele NAT-Regeln im Zusammenhang mit Docker. Aber ich habe keine Ahnung, warum Pakete nicht an meine WG0-Hosts weitergeleitet werden.
# iptables --list-rules
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o hassio -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o hassio -j DOCKER
-A FORWARD -i hassio ! -o hassio -j ACCEPT
-A FORWARD -i hassio -o hassio -j ACCEPT
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 9000 -j ACCEPT
...
-A DOCKER -d 172.30.33.6/32 ! -i hassio -o hassio -p tcp -m tcp --dport 22 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i hassio ! -o hassio -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o hassio -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
# iptables -t nat --list-rules
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.30.32.0/23 ! -o hassio -j MASQUERADE
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 9000 -j MASQUERADE
...
-A POSTROUTING -s 172.30.33.6/32 -d 172.30.33.6/32 -p tcp -m tcp --dport 22 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i hassio -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 9000 -j DNAT --to-destination 172.17.0.3:9000
....
-A DOCKER ! -i hassio -p tcp -m tcp --dport 2222 -j DNAT --to-destination 172.30.33.6:22
Antwort1
Wenn Sie Docker installiert haben, sollten Sie unbedingt eine FORWARD-Drop- oder Reject-Richtlinie beibehalten. Ich fand es etwas übersichtlicher, wenn Wireguard seine eigenen iptables-Regeln mithilfe der Optionen PostUp
und PostDown
in der Konfiguration handhabt. In Ihrem Abschnitt wg0.conf
unter diesem [Interface]
sollten Sie etwas wie Folgendes eingeben (vorausgesetzt, hassio ist Ihre Hauptnetzwerkschnittstelle):
PostUp = iptables -I FORWARD 1 -i %i -o hassio -s 192.168.96.0/24 -j ACCEPT; iptables -t nat -A POSTROUTING -s 192.168.96.0/24 -o hassio -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -o hassio -s 192.168.96.0/24 -j ACCEPT; iptables -D POSTROUTING -s 192.168.96.0/24 -o hassio -j MASQUERADE
Dies muss dann mit einer Regel gepaart werden, die den umgekehrten FORWARD-Verkehr zulässt: Ich persönlich entscheide mich für eine allgemeinere ESTABLISHED/RELATED-Regel in der Form -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
. Ich kenne wirklich keine Situation, in der ich etwas anderes tun möchte, als die Fortsetzung bereits ESTABLISHED/RELATED-Sitzungen zuzulassen.
PS - Ich verwende auch "REJECT"-Richtlinien für Hosts, die wirklich nur LAN sind. REJECT wirft ein ICMP-Paket raus, wenn etwas nicht erlaubt ist, während DROP die Verbindung einfach stillschweigend trennt; REJECT macht das Debuggen um einiges einfacher.