Eu tenho um computador linux (openSuse Leap 15.0) que está conectado a um modem a cabo usando PPoE (espero que não seja relevante para isso. EDIT a interface ppp0 tem um MTU de 1492 mas a interface eth0 é "bound" para - não entendo exatamente como isso funciona - tem um mtu de 1500) em ppp0 / eth0 (externo) e com uma rede local (10.1.0.0/8) em eth1 (internal). EDIT Ele está executando o firewalld com o mascaramento ativado.
Eu também estou executando named e dchpd na rede local e tenho alguns roteadores wifi conectados, uma impressora, etc.
De qualquer forma, tudo funciona perfeitamente se o MTU estiver configurado para 1400. Mas se o MTU estiver configurado para 1500 em uma máquina conectada à rede local, as coisas falharão. Em particular, a solicitação de uma página da Web será interrompida e, se eu observar o tráfego com o wireshark, somente parte da resposta à solicitação HTTP será retornada (a última parte, como acontece, para o exemplo que eu observei). / p>
Isso ainda está OK - posso diminuir o MTU na maioria dos dispositivos conectados -, mas preciso conectar um telefone Android não enraizado. A única maneira de fazer isso funcionar usando um roteador wifi com seu próprio DHCP (ou seja, sua própria pequena rede) e ajustando o MTU nas configurações do roteador.
Minha impressão, então, é que estou perdendo alguma coisa nas regras acima para lidar com fragmentos. No entanto, quando eu leio por aí, parece que as conexões com estado devem lidar com os fragmentos corretamente. Eu também tentei duplicar as regras com -f
, mas pareceu não ter efeito.
Como faço isso funcionar? Mais exatamente, se o acima estiver correto, como obtenho o iptables para encaminhar fragmentos? Obrigado.
EDITAR Ou, se esta é uma maneira melhor, por que não há nada que se conecte à rede fazendo PMTUD corretamente? Nenhuma mensagem ICMP é bloqueada pelo firewall. Se eu executar ping
, ele funciona bem (e vejo o ICMP no wireshark). Se eu fizer uma solicitação HTTP, não vejo mensagem ICMP, o que me preocupa. Atualmente, estou tentando encontrar uma maneira de testar se as mensagens de fragmentação estão sendo bloqueadas em algum outro lugar.
EDIT Teria eth0 e eth1 trocados no texto. Corrigido agora.