Netzwerkdiagramm:Laptop (10.8.0.2) -> (wireguard) -> server A (10.8.0.1, 10.10.0.10) -> server B (10.10.0.20)
Ich habe meinen Laptop (10.8.0.2) über Wireguard mit einem Server A (10.8.0.1) verbunden. Ich kann den Server A (10.10.0.10) pingen/curlen, aber keinen anderen Server B (10.10.0.20).
Wenn ich ping 10.10.0.20
von meinem Laptop aus Server B anrufe, finde ich auf Server A folgendes:
tcpdump -nn -i wg0
zeigt Anfrage, aber keine Antwort:tcpdump -nn -i enp7s0
zeigt Anfrage und Antwort
AlsoDas Problem scheint zu sein, dass die Antwort nicht von enp7s0 an wg0 weitergeleitet wird.
Aber warum nicht?
Dies ist meine iptables-Konfiguration:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o enp7s0 -j MASQUERADE
Laptop-Kabelschutz:
[Interface]
PrivateKey = ...
Address = 10.8.0.2/24
[Peer]
PublicKey = ...
AllowedIPs = 10.8.0.0/24,10.10.0.0/24
Endpoint = ...
Server A Wireguard:
[Interface]
PrivateKey =
Address = 10.8.0.1/24
ListenPort = 51820
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o cilium_host -j MASQUERADE
PostUp = iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o cilium_host -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o enp7s0 -j MASQUERADE
[Peer]
PublicKey =
AllowedIPs = 10.8.0.2/32
Server B und Server A sind über ein virtuelles privates Netzwerk verbunden.
Update: Wireguard-Dienst neu laden
Ein Neustart des Dienstes schien ebenfalls zu helfen.
systemctl reload [email protected]
systemctl restart [email protected]
Sie können auch versuchen, diese Regeln hinzuzufügen, aber ich habe sie entfernt und es hat trotzdem funktioniert:
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
Update: Andere damit zusammenhängende Probleme (zu Ihrer Information):
Als ich meine Routing-Tabelle analysierte ( ip route
):
default via 172.31.1.1 dev eth0
10.0.0.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.0.0.0/8 via 10.0.0.1 dev enp7s0
10.0.0.1 dev enp7s0 scope link
10.0.1.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50
10.0.1.50 dev cilium_host proto kernel scope link
10.0.2.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.0.3.0/24 via 10.0.1.50 dev cilium_host proto kernel src 10.0.1.50 mtu 1400
10.8.0.0/24 dev wg0 proto kernel scope link src 10.8.0.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
172.31.1.1 dev eth0 scope link
Mir wurde klar, dass dies 10.0.0.0/8 via 10.0.0.1 dev enp7s0
mit den anderen Routen in Konflikt geriet, da das Subnetz 10.10.0.0/24 zu einem größeren 10.0.0.0/8-Bereich gehört. Also habe ich mein Kubernetes/Cilium-Netzwerk verschoben (um 10.0.0.0/8 zu vermeiden, das mit gängigen Netzwerken in Cafés usw. in Konflikt geraten könnte) und auch das VPC-Netzwerk eingegrenzt.
Antwort1
Nach kurzem Überlegen war der Grund für das Nichtfunktionieren wahrscheinlich, AllowedIPs = 0.0.0.0/0
dass der VPN-gekapselte Datenverkehr von Server A zu B in den Wireguard-Tunnel geleitet wurde.
Die Lösung besteht daher darin, es durch zu ersetzen AllowedIPs = 10.8.0.2/32
.