Ich versuche, den Netzwerkverkehr über ein Wireguard-VPN an eine VM weiterzuleiten, die auf einem anderen Host ausgeführt wird. All dies - unter Beibehaltung der ursprünglichen Quell-IP-Adresse, um ein transparentes Proxying zu erreichen. Beide Server werden in verschiedenen Datencentern gehostet. Dies ist mein Netzwerk-Setup:
Netzwerk ist ein "Proxy", der das Netzwerk mit DNAT weiterleitet:
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dport $ports -j DNAT --to 192.168.122.100 ip route add 192.168.122.100 dev wg1
Ich kann über eine SSH-Sitzung auf einer Proxy-Maschine auf die IP-Adresse der VM zugreifen, indem ich 192.168.122.100 direkt abfrage. Wenn ich versuche, auf diese weitergeleiteten Ports vom externen Netzwerk aus zuzugreifen, indem ich die yyyy IP-Adresse abfrage - der Verkehr wird auf dem Host-Rechner angehalten, nat table / PREROUTING-Schritt.
TRACE eines Pakets, das nicht zugestellt werden kann (zzzz wäre meine Heimat-IP-Adresse). Trace ist von der "Host" -Maschine:
Wie Sie sehen, nat:PREROUTING:policy:2wird noch ausgeführt und danach wird das Paket an eine VM weitergeleitet. Der einzige Unterschied besteht wirklich in der Quell-IP-Adresse.
Meine Frage ist folgende: Lässt der Linux-Netzwerkstapel Pakete fallen, die von einem LAN-Netzwerkgerät stammen, aber keine LAN-Quelladresse haben? Gibt es eine Möglichkeit, dies zu umgehen und Pakete weiterzuleiten?
1 Antwort auf die Frage
0
Rokas Kupstys
Es stellte sich heraus, dass der Linux-Netzwerkstack diese Pakete in der Tat verworfen hat und dies zu sehr guten Zwecken. Der Netzwerkstack führt eine so genannte "Reverse Path Filtering" aus. Pakete, die von einem Netzwerkgerät eingehen, haben eine Quell-IP, die nicht durch dasselbe Gerät geroutet werden würde. Unter normalen Umständen sind solche Pakete nicht gültig oder können böswillig sein. Wenn Sie jedoch wissen, was Sie tun, können Sie dieses Verhalten deaktivieren:
echo 0 >/proc/sys/net/ipv4/conf/all/rp_filter # blanket-disable for all interfaces echo 1 >/proc/sys/net/ipv4/conf/eth0/rp_filter # enable for external network device just to be safe
Jetzt werden Pakete weitergeleitet und ein transparentes Proxying kann erreicht werden.