O Conntrack obtém regras de encaminhamento incorretas para o protocolo de saída 41

1

Estou tentando encaminhar o protocolo 41 (ipv6-in-ipv4) para um túnel HE através de um WRT54G executando o Tomato 1.28. O Tomato 1.28 está executando um kernel 2.4 que não sabe absolutamente nada sobre o protocolo 41, exceto que ele é chamado de "ipv6". Ter um kernel 2.4 também parece significar que o conntrack não pode simplesmente ser desativado: não há regras "raw" do iptables.

Eu posso configurar regras para que os pacotes recebidos sejam enviados para o host interno correto. Se o host remoto envia algo sobre o túnel primeiro, tudo funciona bem. Os pacotes podem fluir pelo túnel em ambas as direções com o NAT adequado e eu recebo uma entrada /proc/net/ip_conntrack assim:

unknown 41 599 src=72.52.104.74 dst=67.180.229.14 src=10.1.0.3 dst=72.52.104.74 use=1 mark=0

A entrada diz que é para o protocolo desconhecido 41, tem um tempo limite de 599 segundos a mais se não houver mais tráfego recebido e tem um par de endereços de origem e destino no lado inicial (que é o lado da WAN) e outro em o lado de recepção (que é o lado da LAN).

Mas se meu sistema tentar enviar um pacote pelo túnel primeiro, o endereço de origem não será traduzido para o endereço do roteador como deveria, e eu recebo uma entrada conntrack assim:

unknown 41 589 src=10.1.0.3 dst=72.52.104.74 [UNREPLIED] src=72.52.104.74 dst=10.1.0.3 use=1 mark=0

Desde que minha máquina continue tentando usar o encapsulamento, ela mantém viva essa falsa entrada de conexão, e eu posso ver os pacotes deixando meu roteador para o modem a cabo com o endereço de origem interno ainda conectado, fazendo com que eles caiam e nunca chegue onde eles estão indo.

Para fazer meu túnel aparecer, eu tenho que derrubar a interface do túnel no meu final, usar a ferramenta de ping HE para induzir algum tráfego IPv6 a descer pelo pipe e, enquanto o tempo limite de 10 minutos ainda estiver ativo na entrada conntrack correta, traga o fim do túnel novamente - e então garanta que ele nunca fique ocioso por 10 minutos em um trecho. Eu posso fazer isso, mas é muito estúpido.

Neste momento, tenho minhas regras de encaminhamento configuradas assim:

# Send incoming ipv6-in-ipv4 packets to the correct host
iptables -t nat -A PREROUTING -p 41 -s 72.52.104.74 -j DNAT --to 10.1.0.3

# Allow those packets through the firewall
iptables -I FORWARD -p 41 -d 10.1.0.3 -j ACCEPT

# Things I have added to try and solve my problem, which didn't work:

# Remove the default masquerade-everything rule
iptables -t nat -D POSTROUTING 10
# Masquerade only protocols other than 41. Conntrack still gets its bogus entries, 
# and if I get the correct entry in it still works.
iptables -t nat -A POSTROUTING -p ! 41 -j MASQUERADE

Eu também tentei criar uma regra SNAT assim:

iptables -t nat -I POSTROUTING -p 41 -s 10.1.0.3 -j SNAT --to 67.180.229.14

Mas até onde eu sabia, isso também não ajudou.

Então, minha pergunta é:

1) Alguém já recebeu o protocolo 41 para avançar em um WRT54G executando Tomato com sucesso? Em caso afirmativo, que regras especiais de firewall você usou?

2) Por que o roteador acha que não precisa fazer tradução de endereço de origem no protocolo de saída 41?

    
por interfect 04.10.2014 / 06:07

1 resposta

0

Que tal

iptables -t nat -A PREROUTING -p 41 -s 72.52.104.74 -j DNAT --to 10.1.0.3
iptables -t nat -A POSTROUTING -j MASQUERADE
    
por 05.10.2014 / 17:45