MSS clamping
Если PMTUD починить нельзя, остаётся подсказать клиенту размер сегмента заранее. Это и делает MSS clamping.
Идея
В начале TCP-соединения стороны обмениваются максимальным размером сегмента. Если на пограничном маршрутизаторе переписать это значение на меньшее, клиент сам не станет отправлять слишком крупные сегменты, и чёрная дыра не появится.
# iptables на маршрутизаторе iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \ -j TCPMSS --clamp-mss-to-pmtu
Когда это уместно
Обычно на границе с PPPoE или на туннельном интерфейсе, где размер заведомо меньше 1500. Хорошая привычка: считать это временной мерой. Правильное решение всё равно в том, чтобы PMTUD работал, иначе проблемы вернутся в другом месте, например в UDP.
Про UDP и QUIC
MSS правит только TCP. QUIC и другие UDP-протоколы справляются сами, но если ICMP вырезан полностью, им тоже будет тяжело. Поэтому фильтры, которые «на всякий случай» блокируют ICMP, приносят больше вреда, чем пользы.
Кламп помогает быстро раздать интернет в офисе, но маскирует причину. Через год её никто уже не помнит, и диагностика начинается заново.