В дополнение к другим хорошим ответам, мне недавно пришлось использовать таблицу mangle, чтобы скорректировать несоответствия MTU (максимальная единица передачи), вызванные трафиком, передаваемым через PPPoE, PPP и ATM, каждый из которых добавляет издержки, которые уменьшают полезную нагрузку, доступную для IP. от обычных 1500 байтов кадра Ethernet.
Системы на каждом конце канала, как обычно, имеют свой MTU с обычным значением по умолчанию 1500, и поэтому они будут пытаться отправлять IP-кадры такого размера. Поскольку фактический доступный размер полезной нагрузки был меньше, это вызвало бы фрагментацию пакетов, за исключением того, что часто отправитель запрашивает, чтобы пакеты не были фрагментированы, и в результате они полностью удаляются.
В идеальном случае обнаружение MTU на пути позволило бы конечным точкам корректировать MTU по мере необходимости, но это обнаружение зависит от ICMP, и сети вне моего контроля часто настраивались на отбрасывание ICMP по соображениям безопасности.
Единственным выбором было использовать пакетное искажение в моем маршрутизаторе, чтобы изменить пакеты TCP SYN для уменьшения максимального размера сегмента на транспортном уровне:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1452
Подобные вещи беспорядочные, и в идеале их следует избегать, но у меня не было других вариантов, и это решило проблему.
Надеюсь, что эти примеры помогут, а также справочная страница.
iptables(8)
man содержит всю необходимую информацию, включая несколько хороших примеров использования таблицы mangle.