TPROXY interfiere con las reglas de reenvío de puertos DNAT

TPROXY interfiere con las reglas de reenvío de puertos DNAT

Estoy configurando TPROXY en mi enrutador VyOS para reenviar cierto tráfico a un proxy transparente local. Funciona bastante bien, hasta que descubrí que todas mis reglas de reenvío de puertos DNAT ya no funcionan (tiempo de espera de conexión cuando me conecto desde una red externa).

Ambiente

  • Enrutador: 10.0.0.1/24(El proxy se está ejecutando en 1234el puerto y agrega SO_MARK con 0xff)
  • Host interno: 10.0.0.2/24(El puerto 80debe estar expuesto al público)

Reglas TPROXY

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

Reglas DNAT

$ nft lista tabla 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
    }
}

Síntomas

La conexión RouterPublicIP:8080se está agotando. Lo ideal sería reenviar el tráfico a 10.0.0.2:80.

Supongo que el tráfico entrante de DNAT se reenvía erróneamente al proxy (en lugar del host real 10.0.0.2), sin embargo, no pude descifrar las reglas nft correctas.

¡Gracias de antemano!

información relacionada