
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 en1234
el puerto y agrega SO_MARK con0xff
) - Host interno:
10.0.0.2/24
(El puerto80
debe 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:8080
se 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!