28 окт. 2010 г.

MSS & MTU

Часто, когда речь идет об организации доступа в интернет проводных (Ethernet) и беспроводных (Wi-fi) клиентов, возникает проблема несоответствия MTU, основными симптомами которой является "полуоткрытие" или полная ошибка доступа к некоторым web-ресурсам (при идеальной работе других), затыки в трассировке и тому подобное. Причем при использовании специализированных устройств (wi-fi/adsl/wimax роутеров) таких проблем не наблюдается.А избежать подобных несуразиц очень просто с помощью того же iptables, благодаря которому мы интернет и раздаем ;). Например, если поместить в /etc/ppp/ip-up.d/ скрипт следующего содержания:
#!/bin/bash
if [ $PPP_IFACE = "ppp200" ]; then
   iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    iptables -t nat -A POSTROUTING -o ppp200 -j MASQUERADE
fi
то при поднятии PPPoE-соединения на означенном интерфейсе мы, во-первых включаем маскарадинг на нем, а во-вторых, автоматически изменяем MSS проходящих пакетов. По умолчанию, для PPPoE (MTU 1492 байта) максимальный размер сегмента равен (MTU - 40 = 1452 байта). Размеры пакетов для других типов соединений и еще некоторые другие цифирки можно подглядеть, например, тут или тут. Ну или погуглить на предмет этих аббревиатур в частности и фрагментации IP-пакетов вообще.