Weiterleitung von externem Datenverkehr über LAN

601
Rokas Kupstys

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:

Netzwerkdiagramm

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:

raw:PREROUTING:policy:2 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  mangle:PREROUTING:rule:1 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  mangle:PREROUTING-CUSTOM-BACK:rule:1 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  mangle:PREROUTING-CUSTOM-BACK:return:3 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  mangle:PREROUTING:policy:2 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  nat:PREROUTING:rule:1 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  nat:PREROUTING-CUSTOM-FRONT:return:3 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  nat:PREROUTING:policy:2 IN=wg1 OUT= MAC= SRC=z.z.z.z DST=192.168.122.100 LEN=60 TOS=0x00 PREC=0x00 TTL=55 ID=60652 DF PROTO=TCP SPT=34744 DPT=8080 SEQ=2330378731 ACK=0 WINDOW=29200 RES=0x00 CWR ECE SYN URGP=0 OPT  

nat:PREROUTING:policy:2führt ACCEPThier die Standardrichtlinie aus.

Eine funktionierende Paketverfolgung (auf dem Host-Computer), wenn ich versuche, direkt auf 192.168.122.100 zuzugreifen:

raw:PREROUTING:policy:2 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT mangle:PREROUTING:rule:1 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT  mangle:PREROUTING-CUSTOM-BACK:rule:1 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT mangle:PREROUTING-CUSTOM-BACK:return:3 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT mangle:PREROUTING:policy:2 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT nat:PREROUTING:rule:1 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT nat:PREROUTING-CUSTOM-FRONT:return:3 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT nat:PREROUTING:policy:2 IN=wg1 OUT= MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=41 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT mangle:FORWARD:policy:1 IN=wg1 OUT=virbr0 MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT filter:FORWARD:rule:1 IN=wg1 OUT=virbr0 MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT filter:FORWARD-CUSTOM-FRONT:rule:1 IN=wg1 OUT=virbr0 MAC= SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT mangle:POSTROUTING:policy:2 IN= OUT=virbr0 SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT nat:POSTROUTING:rule:1 IN= OUT=virbr0 SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT nat:POSTROUTING-CUSTOM-FRONT:return:1 IN= OUT=virbr0 SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT nat:POSTROUTING:policy:7 IN= OUT=virbr0 SRC=10.1.0.101 DST=192.168.122.100 LEN=44 TOS=0x00 PREC=0x00 TTL=40 ID=36489 PROTO=TCP SPT=52189 DPT=8080 SEQ=1361865945 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT 

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?

0

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.