Обсуждение статьи тематического каталога: О PPPoE, MTU и проблеме Path MTU Discovery Black Hole (pppoe mtu)Ссылка на текст статьи: http://www.opennet.me/base/net/pppoe_mtu.txt.html
Отличная статья для начинающих!
Сам с месяц назад напоролся на такую проблему. решение заняло около 3 часов. после консультации с сетевым специалистом, начал копать в сторону mtu (хотя подозрения на этот счет были сразу). поиск по конфигам shorewall (именно им пользуюсь для удобства управления iptables. рекомендую всем) привел к интересным коментариям:[From the kernel help:
#
# This option adds a `TCPMSS' target, which allows you to alter the
# MSS value of TCP SYN packets, to control the maximum size for that
# connection (usually limiting it to your outgoing interface's MTU
# minus 40).
#
# This is used to overcome criminally braindead ISPs or servers which
# block ICMP Fragmentation Needed packets. The symptoms of this
# problem are that everything works fine from your Linux
# firewall/router, but machines behind it can never exchange large
# packets:
# 1) Web browsers connect, then hang with no data received.
# 2) Small mail works fine, but large emails hang.
# 3) ssh works fine, but scp hangs after initial handshaking.
# ]Собственно решение превратилось в активацию в shorewall опции
CLAMPMSS=Yes
В 2011 году CLAMPMSS=Yes в конфиге shorewall всё еще актуален. Хотя было-бы логично включать эту опцию по умолчанию.Спасибо за информацию.
>iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuВ мануале написано, что данное правило работает только в таблице mangle, незнаю как у вас оно отрабатывает в таблице filter, у меня такое не проходит.
поправка :
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
перепробовал все, ограничение мту не помогло. Решилось все красиво, вот такой строчкой в цепочке mangle: -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300
А вот этому пути лучше не следовать. Дело в том, что если у вас где-то по дороге окажется сайт, у которого MSS окажется меньше 1300 , то он его увеличит до 1300 и у вас могут возникнуть проблемы с фрагментацией пакетов!
Была аналогичная проблема с L2TP содинением. Исходищее соединение L2TP с MTU 1460 (от Корбины), внутренная квартирная сеть на Ethernet... Долго понять не мог почему часть сайтов работает, а часть нет...
После длительного установления проблемы, пришел к решению с iptables...
Та же фигня была недавно... Спасибо автору!
respect! 3-й день ломаю голову... уже тож хотел проксик ставить =)
Стать класс
Уже вообще хотел от Linux отказаться т.к. прокси не подходил
Век живи, век учись...
Моя ситуация - Ноутбук+обычный ПК подключены к D-Link DSL-2640U, ноут по ВайФай.
На ноуте одноклассники.ру работают, на компе нет, причем на компе явные тормоза при работе в нете - половина сайтов не открывается... Я уж и антивиром прогнал комп, и переустанавливать задумал, но... засада в МТУ. Причем, где-то на Microsoft.com прочитал, что изначальное значение MTU определяется драйверами для сетевой карты. Ессно, я посмотрел в реестре на буке (знач. 1300) и на ПК (1500). На ПК поставил 1300 и все заработало...
Такие вот пироги
Аналогично была проблема с Cisco 2651 c модулем ADSL. Что самое интересное mail.ru открывался, а вот r.mail.ru посылал в null. Решил проблему вот так -
ip tcp adjust-mss 1452
ip policy route-map clear-df
Та же самая проблема, провод от корбины с MTU 1460 попадает на сервер Windows 2000, который через вторую сетевуху раздает инет на клиенты. На серваке стоит RRAS. Инет с клиентов без ручной переустановки MTU не работает (((
Подниму своим спасибом, напоролся при раздаче Йоты на мелкий офис. Помогло :-)
Перешел с Ubu на Deb, а он не выставил при настройке ppp0 mtu, искал часов 5 думал с ума сойду,
на ядре 2.6.24 работает на 2.6.26 нет, при этом конечно, как указано в статье, локальный комп. в Internet нормально ходит, а остальные через NAT фиг.
Действительно спасибо!, нарвался на "умников", которые закрыли ICMP 3:4, думал мозгами двинусь, пока искал проблему... Самое смешное, что эти "товарищи" - админы банка, у них видете-ли политика безопасности такая ;)
> Самое смешное, что эти "товарищи" - админы банка, у них видете-ли
> политика безопасности такая ;)Гы... верняк, только что столкнулся именно с такой ситуацией.
Банк-клиент не хотел работать через ppp туннель, потому что банковский хост не блочит icmp.
Spasibo dobrij chelovek!
Очень полезная статья! Автору огромнейшее спасибо! Все мои проблемы с настройкой шлюза сразу решились!
Спасибо огромное добрый человек, очень выручил, здоровья те и удачи)
Автору огромный респект, я тоже столкнулся с такими клоунами (mtu 1490), почтовики через pop3 получали список писем а сами письма нет, соединение вешалось. С самого шлюза все работало нормально
Та же проблема, не бегает pop3 хоть убей, все остальное - номрально. Добавление строки к сожалению проблемы не решили. Все равно конект есть, письма не забираются.
Может подскажете куда еще копнуть?
Автор - мегачеловек! Огромнейшее спасибо! Я бился с клиент-банком 2 дня. После общения с серваком по телнету понял что копать надо в сторону МTU. И тут такой подарок!
Всё это хорошо, только вот проблема. Почему -j TCPMSS --clamp-mss-to-pmtu высчитывает MSS как MTU-40 (т.е.20-IP, 20-TCP)? Проснифил. У меня на Windows 7 TCP заголовки сплошь и рядом идут более 20 байт. Доходит до 56! Соответственно эти пакеты не проходят и дропаются. Все MSS уменьшать до мин.значения с учётом TCP-56 - равносильно уменьшению скорости для пакетов с размером TCP-20. Почему в iptables нету автоматической определялки MSS?!
Потом уже разобрался. Заголовок TCP+IP более 40 байт только во время установления TCP сессии. В это время пакеты небольшие и не достигают MTU в любом случае. А вот во время передачи, когда пакеты большие, заголовок равен ровно 40 байт.
Всё это замечательно. Спасибо огромное за статью. В инете вообще мало информации о MTU.
Но есть вопрос такого плана - а что, в обычных пакетах с HTTP нагрузкой (хотя не важно что там внутри, может быть и FTP или что-то ещё) всегда устанавливается бит DF? И если да, то зачем?
А вот за это спасибо!!iptables -I OUTPUT 1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -I FORWARD 1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Реально помогло.
А теперь для Микротика:в профайле выбирает no в пункте change mss, и далее выполняем в терминале эту строку:
/ ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn tcp-mss=1453-65535 action=change-mss new-mss=1360 disabled=no
Помогло ))
RouterOS V6.45.1
Благодарю ))
Сделал как тут написано через iptables
пипец, раньше сайты грузились 5 минут, теперь вабще не грузятся, пишет чото там про DNSчо делать?
причему чтобы команды подействовали нужен префикс sudoу меня убунту стоит на wmware в винде сайты грузятся, а в убунту нет
причем раньше грузились но по 2-3 минуты, после вашего способа ваще не грузятся пишет:Веб страница не доступна
проверьте DNS бла бла бла бла бла и тд
> причему чтобы команды подействовали нужен префикс sudo
> у меня убунту стоит на wmware в винде сайты грузятся, а в
> убунту нет
> причем раньше грузились но по 2-3 минуты, после вашего способа ваще не
> грузятся пишет:
> Веб страница не доступна
> проверьте DNS бла бла бла бла бла и тдОт этой команды не может перестать грузиться:)
Тем не менее факт остается фактом =)
проблема в том что я даже (как одно из решений) днс сервера задать не могу, потому что мой провайдер их не говорит, в справочники пользователя для всех ОСей пунктик стоит определять dns автоматически =) я хз чо делать
можно как нибудь сбросить iptables ???????
Ухахахасмотрели видео один день админа? когда он просил ламера перегрузиться 3 раза?)
Так вот пока писал эту команду ребутился раза 2 инет так и не заработал! забил вот наследующий день загрузил убунту все летает =)
надо было просто ребутиться 3 раза ;)
Включите реакцию на ICMP и не парьтесь.
По секрету - ICMP бывает с полезным payload`ом. В частности, получатель может попросить уменьшить размер пакета.
Большой поклон автору :) Второй день мучаюсь почему rutracker.org не может открыться. Решил проблему с iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
> Большой поклон автору :) Второй день мучаюсь почему rutracker.org не может открыться.
> Решил проблему с iptables -A FORWARD -p tcp -m tcp --tcp-flags
> SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuПравильней было бы:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuИменно в таблице mangle. См. man iptables.
У меня такая ситуация.
Провайдер NetByNet, протокол PPPoE.
Если шнур воткнуть в комп напрямую, инет замечательно работает.
Если через роутер Asus RX3041H (работает на линуксе), начинаются проблемы:
- многие сайты грузятся с тормозами;
- при попытке проиграть видео на ютубе, оно может загрузиться частично, для дальнейшей загрузки нужно передвинуть ползунок;
- на сайте нтв.ру видео либо не проигрывается вообще, либо грузится по 1% за полчаса.
Ставил разные значения MSS в роутере. Ничего не меняется.
Как заставить роутер нормально работать?
Ну у меня на dd-wrt помогло NetBynet такое:iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Таких глюков как у вас я не наблюдал, но иногда они возникали: то какой-нибудь сайт перестает открываться на одном из компов (не более минуты глюк), то еще какой прикол с ютьюбом. Главное что бесило: после ребута роутера сайты минут 5 нормально не открывались - открывалось лишь несколько, а остальные не были доступны, потом все становилось нормально. Но 99% времени все работало хорошо. Кстати, посмотрите выставлено ли значение MTU 1492 в самом подключении pppoe.
(Разгребая закладки, наткнулся на сайт, где я год назад оставил сообщение.)
Спасибо за помощь. Скорее всего, старый роутер (ASUS RX3041H) вышел из строя, поэтому работал с такими глюками. С новым роутером (ASUS RT-N66U) всё работает как надо.
Где нужно прописывать команду "iptables..."?
У меня провайдер NetByNet модем ZTE ZXV10 W300 все настраиваю но в инет не входит. в чем проблема...
спасибо большое - если не сказать огромное !!!правило с iptables сработало
этой волшебной строчки не хватало для полноценного моста из ящика на линуксе с ppp на wlan
вот весь мост
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
> этой волшебной строчки не хватало для полноценного моста из ящика на линуксе
> с ppp на wlan
> вот весь мост
> echo 1 > /proc/sys/net/ipv4/ip_forward
> iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
> iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
> iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuЭто не мост, а маршрутизатор, да и очень специфичный (натится на оба интерфейса).
Сегодня столкнулся, чуть умом не тронулся пока искал в чем засада..В убунте, в /etc/ppp/ip-up.d/0clampmss лежит эта настройка такого вида:
iptables -t mangle -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtuтак вот, если луна стоит в правильной позиции и ты вдруг про эту настройку не знаешь и трешь все правила iptables перед тем, как залить свой набор правил, жди сюрпризов..
В любом случае спасибо за статью!!!
Если сам шлюз инициирует соединение, то пакет не пройдёт через FORWARD, поэтому лучше записать это на выходе в POSTROUTING (например, для интерфейса ppp0):iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --clamp-mss-to-pmtu
И нужно учесть то, что по-умолчанию pppd через pppoeconf ставить mtu:1492. Придётся замерить с другого шлюза реальный MTU:
ping -M do <ipaddr> -s <MTU>, где MTU это значение с учётом ICMP. Например, если 1452 проходит, то в конфиг pppoe нужно записать 1452+28, т.е. 1480. Тогда --clamp-mss-to-pmtu сам будет выставлять 1480-20-20, т.е. 1440 Что является правильным.