8/24/2008

Сага о MTU, iptables и провайдерах...

Есть значит у меня комптьютер, подключенный к интернету через USB модем. Понадобилось мне превратить мой компьютер в роутер, и дать доступ через NAT к интернету всей подсети, весящей на интерфейсе eth0 (192.168.0.0/24).
Как я всегда думал настройка NAT выполняется с помощью магической команды iptables:
/sbin/iptables -t nat -F POSTROUTING; /sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j SNAT --to-source xxx.xxx.xxx.xxx
Однако, ж вопреки моим ожиданиям инет на клиенте так и не заработал, причем не работал он весьма странным образом. ping до сайтов ходил, имена сайтов резолвились, curl загружал страничики, но на этом все и заканчивалось.
Ни firefox, ни icq, ни links никто не мог ничего открыть. Такие симтомы в моей практике встречались впервые. Все говорило о том что tcp/ip работал как то не так.
Запустив wireshark я убедился что, действительно, в сети наблюдается куча неправильных tcp/ip пакетов. Вопрос был почему???
Оказалось, что при MTU установленном в значение, меньшее 1500, некоторые провайдеры болкируют фрагментированные ICMP пакеты, и с сетью начинает происходить что то странное и не понятное. Мой провайдер был именно из таких.
Лечится это все двумя способами:
1. увеличить MTU на интерфейсе, смотрящев в интернет.
или
2. необходимое правило для iptables:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Решение было подсмотренно Здесь

6 комментариев:

  1. Спасибо за сагу. Очень помогло быстро решить проблему с сетью.

    ОтветитьУдалить
  2. Всегда пожалуйста )
    пользуйтесь.

    ОтветитьУдалить
  3. Спасибо огромное! У меня периодически проявлялась эта проблема на Корбине, и вот, наконец, я решил её!

    ОтветитьУдалить
  4. Пожалуйста. Рад что помогло.

    ОтветитьУдалить
  5. Большое спасибо!

    ОтветитьУдалить