Além das outras boas respostas, recentemente tive que usar a tabela mangle para ajustar as discrepâncias de MTU (Maximum Transmission Unit) causadas pelo tráfego sendo transmitido através de PPPoE, PPP e ATM, cada uma adicionando uma sobrecarga que reduz a carga útil disponível para IP a partir dos 1500 bytes usuais de um quadro Ethernet.
Os sistemas em cada extremidade do pipe, como é normal, teriam seu MTU no padrão regular de 1500 e, assim, tentariam enviar quadros IP tão grandes. Como o tamanho real de carga útil disponível era menor, isso teria causado a fragmentação de pacotes, exceto que, muitas vezes, o remetente solicitará que os pacotes não sejam fragmentados e, como tal, acabarão sendo descartados completamente.
Em um mundo ideal, a descoberta do caminho MTU teria permitido que os endpoints ajustassem sua MTU conforme necessário, mas essa descoberta depende do ICMP, e as redes fora do meu controle geralmente eram configuradas para descartar o ICMP por motivos de segurança.
A única opção foi usar o processamento de pacotes no meu roteador para modificar os pacotes TCP SYN para diminuir o tamanho máximo do segmento na camada de transporte:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1452
Esse tipo de coisa é confuso e idealmente deve ser evitado, mas eu não tinha outras opções e isso resolveu o problema.
Espero que esses exemplos ajudem, assim como a página do manual.