(dnat|redirect) con mascarada no funciona

(dnat|redirect) con mascarada no funciona

Tengo un problema, hasta hace poco funcionaba bien. pero ahora no funciona, pero en otro servidor de prueba funciona bien

Fuerzo todo el tráfico a Tor y esta parte funciona bien. Creo que el problema está enmascarado, ya que no cambia el puerto dnat/redirect 9040 al puerto de origen 80/443 después de recibir la respuesta.

  • http://ipinfo.io:9040

  • Software:

    • 1.6.1-2ubuntu2
    • ubuntu 16.04/18.04 el mismo resultado
    • tor 0.3.2.9-1build1
  • Redes

    • virbr1 - 192.168.2.0/24 - solo host
    • eno1-192.168.1.0/24-internet
  • Iptables:

    • /sbin/iptables -t nat -A POSTROUTING -o virbr1 -j MASQUERADE
    • /sbin/iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE # en otro servidor funciona sin eso, esto fue solo para probar
    • /sbin/iptables -t nat -A PREROUTING -p udp --source 192.168.2.6 ! --destination 192.168.2.1 -j DNAT --to-destination 192.168.2.1:9040 # probado REDIRECT --to-ports 9040, lo mismo

*filter :INPUT ACCEPT [174876:86417485] :FORWARD DROP [0:0] :OUTPUT ACCEPT [170612:89138010] :DOCKER - [0:0] :DOCKER-ISOLATION - [0:0] :DOCKER-USER - [0:0] -A FORWARD -d 192.168.2.8/32 -i virbr1 -o virbr1 -j ACCEPT -A FORWARD -s 192.168.2.8/32 -i virbr1 -o virbr1 -j ACCEPT -A FORWARD -d 192.168.2.0/24 -o virbr1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 192.168.2.0/24 -i virbr1 -j ACCEPT -A FORWARD -i virbr1 -o virbr1 -j ACCEPT -A OUTPUT -s 192.168.2.8/32 -j DROP COMMIT # Completed on Tue Feb 20 09:32:11 2018 # Generated by iptables-save v1.6.1 on Tue Feb 20 09:32:11 2018 *nat :PREROUTING ACCEPT [193:19723] :INPUT ACCEPT [193:19723] :OUTPUT ACCEPT [129:12889] :POSTROUTING ACCEPT [124:11792] :DOCKER - [0:0] -A PREROUTING -s 192.168.2.8/32 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.2.1:5353 -A PREROUTING -s 192.168.2.8/32 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.2.1:5353 -A PREROUTING -s 192.168.2.8/32 ! -d 192.168.2.1/32 -p tcp -j DNAT --to-destination 192.168.2.1:9040 -A PREROUTING -s 192.168.2.8/32 ! -d 192.168.2.1/32 -p udp -j DNAT --to-destination 192.168.2.1:9040 -A POSTROUTING -o tun5 -j MASQUERADE -A POSTROUTING -o virbr1 -j MASQUERADE COMMIT # Completed on Tue Feb 20 09:32:11 2018 # Generated by iptables-save v1.6.1 on Tue Feb 20 09:32:11 2018 *mangle :PREROUTING ACCEPT [3538365:1832890486] :INPUT ACCEPT [3538362:1832890258] :FORWARD ACCEPT [3:228] :OUTPUT ACCEPT [3495644:1711746305] :POSTROUTING ACCEPT [3496898:1711973811] -A POSTROUTING -o virbr1 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill -A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill -A POSTROUTING -o virbr1 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill COMMIT

  • /proc/sys/net/ipv4/ip_forwardse establece en1

  • Monitoreo conconntrack -L

    • tcp 6 431973 ESTABLECIDO src=192.168.2.6 dst=172.217.16.4 sport=49215 dport=443 src=192.168.2.1 dst=192.168.2.6 sport=9040 dport=49215 [ASEGURADO] mark=0 use=1
    • tcp 6 431983 ESTABLECIDO src=192.168.2.6 dst=104.81.60.33 sport=49226 dport=80 src=192.168.2.1 dst=192.168.2.6 sport=9040 dport=49226 [ASEGURADO] mark=0 use=1
    • tcp 6 431972 ESTABLECIDO src=192.168.2.6 dst=64.233.184.154 sport=49211 dport=443 src=192.168.2.1 dst=192.168.2.6 sport=9040 dport=49211 [ASEGURADO] mark=0 use=1
    • tcp 6 431972 ESTABLECIDO src=192.168.2.6 dst=54.192.185.106 sport=49216 dport=80 src=192.168.2.1 dst=192.168.2.6 sport=9040 dport=49216 [ASEGURADO] mark=0 use=1
    • tcp 6 431973 ESTABLECIDO src=192.168.2.6 dst=216.58.208.46 sport=49194 dport=80 src=192.168.2.1 dst=192.168.2.6 sport=9040 dport=49194 [ASEGURADO] mark=0 use=1
    • tcp 6 74 TIME_WAIT src=192.168.2.6 dst=178.255.83.1 sport=49190 dport=80 src=192.168.2.1 dst=192.168.2.6 sport=9040 dport=49190 [ASEGURADO] mark=0 use=1

PD: en otro servidor con el mismo sistema operativo, versión de iptables, reglas de iptables, funciona bien

gracias de antemano

Respuesta1

ok he solucionado el problema.

está relacionado con la actualización de Docker y el cambio del filtro de red del kernel, más detalles aquí https://forums.fedoraforum.org/showthread.php?312824-Bridge-broken-after-docker-install&p=1785664#post1785664

establecerlos en 0 parece resolver mi problema

net.bridge.bridge-nf-call-ip6tables=0 net.bridge.bridge-nf-call-iptables=0 net.bridge.bridge-nf-call-arptables=0

gracias

información relacionada