
Ich richte TPROXY auf meinem VyOS-Router ein, um bestimmten Datenverkehr an einen lokalen transparenten Proxy weiterzuleiten. Das funktioniert ziemlich gut, bis ich feststellte, dass alle meine DNAT-Portweiterleitungsregeln nicht mehr funktionieren (Verbindungstimeout bei Verbindung aus einem externen Netzwerk).
Umfeld
- Router:
10.0.0.1/24
(Proxy läuft auf1234
Port und fügt SO_MARK mit hinzu0xff
) - Interner Host:
10.0.0.2/24
(Port80
sollte öffentlich zugänglich sein)
TPROXY-Regeln
ip rule add fwmark 1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
nft add table myproxy
nft add chain myproxy prerouting { type filter hook prerouting priority 0 \; }
nft add rule myproxy prerouting ip daddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } return
nft add rule myproxy prerouting meta l4proto tcp ip daddr 10.0.0.0/24 return
nft add rule myproxy prerouting mark 0xff return
nft add rule myproxy prerouting meta l4proto { tcp, udp } mark set 1 tproxy to 127.0.0.1:1234 accept
nft add chain myproxy output { type route hook output priority 0 \; }
nft add rule myproxy output ip daddr { 127.0.0.1/32, 224.0.0.0/4, 255.255.255.255/32 } return
nft add rule myproxy output meta l4proto tcp ip daddr 10.0.0.0/24 return
nft add rule myproxy output mark 0xff return
nft add rule myproxy output meta l4proto { tcp, udp } mark set 1 accept
nft add table filter
nft add chain filter divert { type filter hook prerouting priority -150 \; }
nft add rule filter divert meta l4proto tcp socket transparent 1 meta mark set 1 accept
DNAT-Regeln
$ nft Liste Tabelle nat
table ip nat {
chain PREROUTING {
type nat hook prerouting priority dstnat; policy accept;
iifname "pppoe0" tcp dport { 8080 } counter packets 7 bytes 400 dnat to 10.0.0.2:80
}
}
Problembeschreibung
Beim Verbinden RouterPublicIP:8080
läuft eine Zeitüberschreitung ab. Idealerweise sollte der Verkehr an weitergeleitet werden 10.0.0.2:80
.
Ich vermute, dass eingehender DNAT-Verkehr fälschlicherweise an den Proxy (statt an den eigentlichen Host) weitergeleitet wird 10.0.0.2
, ich konnte jedoch die richtigen NFT-Regeln nicht herausfinden.
Dank im Voraus!