Провайдеры и MTU/MSS/PMTU
Значит нужен мне второй канал связи, да этак мегабит 300 в секунду. В моём городе немного провайдеров, поэтому выбрать не дали и пришлось подключаться к WiFire (он же NetByNet, MegaFon и так далее). Подключился, потестил, 300 мегабит, балдеж. Решил я значит почитать что нового на своем любимом Хабре и опа: он не открывается, но охотно пингуется.
Диагностика
Ну думаю: что-то тут не так. Сетевое у меня Mikrotik, возможностей уйма, пойду искать причину на своей стороне. Лезу в логи и вижу как посыпался DoH (РКН, приветик) и крайне удивляюсь этому. решил временно отрубить DoH и дать 1.1.1.1. Ситуация не изменилась. Начал резолвить адреса хотя бы чего-нибудь, все через раз. Решил прокинуть трейс до Хабра и смотрю на «потяряшки». Думаю дай звякну в поддержку, вдруг умное чего скажут. Те репу почесали, сказали что не видят мою сеть за роутером (nat >> forward >> change ttl >>+1 😀) и изобразили что-то вроде «Мы ХЗ».
Начал копать дальше. Вспомнил всю балду, которую знаю о пакетах и тут осенило.
Что такое MTU и MSS?
MTU (англ. maximum transmission unit) означает максимальный размер полезного блока данных одного пакета (англ. payload), который может быть передан протоколом без фрагментации.
MSS (англ. Maximum segment size) является параметром протокола TCP и определяет максимальный размер полезного блока данных в байтах для TCP-пакета (сегмента). Таким образом этот параметр не учитывает длину заголовков TCP и IP.
PMTU (Path MTU) — данный параметр обозначает наименьший MTU среди MTU каналов данных, находящихся между источником и приемником.
Википедии, конечно, спасибо, но если по-русски, то грубо говоря каждый пакет в сети — это бандероль со своими габаритами и вот как раз эти габариты надо менять, подгоняя под оператора связи (ISP). Не долго думая я начал пинговать Хабр с разным размером юнита (MTU) и уткнулся в 1450. Проставил все порты под новый MTU — мало, все равно не открывается. Решил не мучаться и воткнуть динамический MTU. Тут на помощь приходит PMTU. Вообще вот статейка в которой все хорошо объяснено на счет PMTU.
Решение проблемы
Поскольку причина была уже ясна, а время пять утра — решение было достаточно быстрым.
Топаем в консоль и пишем:
/ip firewall mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=no tcp-flags=syn protocol=tcp out-interface=*название WAN интерфеса* tcp-mss=1300-65535 log=no
/ip firewall mangle add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=no tcp-flags=syn protocol=tcp in-interface=*название WAN интерфеса* tcp-mss=1300-65535 log=no
Разбираем что написали:
/ip firewall mangle — переходим по разделам и выберем что нужно.
add — команда добавления правила
chain=forward — указываем тип цепочки
action=change-mss — указываем что нужно менять MSS
new-mss=clamp-to-pmtu — указываем параметры, что используем PMTU и базируемся на нем
passthrough=no — не преходить к след. правилу пока не выполним это
tcp-flags=syn — выставляем флаг пакета для нумерации, что бы не терялся
protocol=tcp — указываем протокол с которым будем работать
in-interface\out-interface — интерфейсы вход\выход
tcp-mss=1300-65535 — разрешенный диапазон размера пакета
log=no — не логировать
и бинго, наконец-то открывается Хабр и все что мне нужно.
В сетевой части я не «Ас», поэтому сумбурно вышло, да и на Хабре статьи не нашел похожей, может будет кому полезно.
15.7. Решение проблемы с Path MTU Discovery путем настройки MSS.
Как уже говорилось выше, Path MTU Discovery не работает в Интернет должным образом. Если вам известны факты существования сегментов в вашей сети, где размер MTU ограничен, то вы уже не можете полагаться на безотказную работу Path MTU Discovery.
Однако, помимо MTU, есть еще один способ ограничения размера пакета — это, так называемый MSS (Maximum Segment Size — Максимальный Размер Сегмента). MSS — это поле в заголовке TCP-пакета SYN.
С недавних пор, ядра Linux и некоторые драйверы PPPoE, стали поддерживать такую особенность, как ‘clamp the MSS’ (ограничение размера MSS).
В этом есть свои плюсы и минусы. С одной стороны, устанавливая MSS, вы недвусмысленно извещаете удаленную сторону о том, что размер пакета не должен превышать заданную величину. Причем для этого не требуется передачи ICMP-сообщений.
С другой стороны — за атакущим сохраняется возможность нарушить связь путем модификации пакетов. Однако, следует заметить, что мы довольно часто используем эту возможность и это приносит свои положительные плоды.
Чтобы иметь возможность манипулировать размером сегмента, у вас должны быть установлены iptables , не ниже 1.2.1a и ядро Linux, не ниже 2.4.3. Основная команда iptables :
# iptables -A FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —clamp-mss-to-pmtu
Она рассчитает правильный MSS для вашего соединения. Если вы достаточно уверены в себе и в своих знаниях, можете попробовать нечто подобное:
# iptables -A FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —set-mss 128
Это правило устанавливает MSS равным 128. Очень полезно, если вы наблюдаете разрывы при передаче голосовых данных, когда поток небольших пакетов VoIP прерывается «огромными» http-пакетами.
| Назад | В начало документа | Вперед |
| Решение проблемы с Path MTU Discovery путем настройки MTU. | К началу раздела | Формирователь трафика: Низкая задержка, максимальная производительность. |
Clamp tcp mss mikrotik что это
Обнаружена блокировка рекламы: Наш сайт существует благодаря показу онлайн-рекламы нашим посетителям. Пожалуйста, подумайте о поддержке нас, отключив блокировщик рекламы на нашем веб-сайте.
«Зависание» сайтов на время
Обсуждение ПО и его настройки
1 сообщение • Страница 1 из 1
SparkLone Сообщения: 1 Зарегистрирован: 30 мар 2019, 18:24
Приветствую. Не так давно купил hap ac2. Интернет через 4g свисток (yota).
В принципе все устраивает, гибкость конфигурации, наваял скрипт на переподключение провисшего соединения и т.д..
Но есть 2 проблемы
1) когда скрипт переподсоединяет инет — если в этот момент ты браузился по какому то сайта, потом он перестает открываться, просто висит, другие уже полминуты-минуту как открываются, а этот нет.
2) периодически сайты в принципе «подвисают». Выглядит это так, ты листаешь ленту vk, все шустро летает, в какой то момент ты делаешь рефреш страницы — и тишина, все грузится, может и по полминуты подвисать. При этом этот же сайт с этого же компьютера но с другого браузера будет нормально открываться. Или начал к примеру открывать страницу с алиэкспресса, у тебя их штук 20 уже открыто, и тут все, нажимаешь ссылку комментов — тишина, или картинки перестают грузиться (в другом окне другой сайт ок работает, в другом браузере али ок работает)
Вот пример как это выглядит в safari (та же картина в хроме, не принципиально)
https://monosnap.com/file/q6gZQJ1fciD5A . pvyuwGcCmn
Все что я находил сводилось к проблеме MTU.
В итоге я отключил Change TCP MSS в профилях ppp
но создал (по какому то из советов в инете) руками правило
/ip firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
В общем ничего не изменилось.
Пробовал проставить руками у ppp-out1 интерфейсе mtu=1400, а не 1500, — стало по ощущениям намного чаще воспроизводиться «подвисание сайтов», вернул 1500
Сегодня задисеблил правило в mangle. (т.к. прочитал что в очередной из прошивок сделали это рудиментом, если я правильно понял «!) ppp — implemented internal algorithm for «change-mss», no mangle rules necessary;»)
Провайдер Yota. Что интересно заходя на сайт https://www.speedguide.net/analyzer.php
Я получаю в ответе
MTU = 1400
MTU is not fully optimized for broadband. Consider increasing your MTU to 1500 for better throughput. If you are using a router, it could be limiting your MTU regardless of Registry settings.
MSS = 1360
MSS is not optimized for broadband. Consider increasing your MTU value.
В то время как на роутере везде пропсиано 1500, для всех интерфейсов.
Т.е. по логике вещей где то у провайдера кто то режет MTU с 1500 на 1400 и это и может быть проблемой. Я прав?
И можно ли как то это побороть на уровне роутера, не затрагивая клиенты?
Вот лог (там mangle еще не задисеблен).
Есть шанс что отключив правило в mangle все решится (вопроизводится то не так часто, нужно время чтобы убедиться), но маловероятно учитывая вывод с speedguide.net
Может кто то сталкивался как решать на роутере корректно все это малой кровью?
[admin@MikroTik] > export
# mar/30/2019 18:52:36 by RouterOS 6.44.1
# software > #
# model = RBD52G-5HacD2HnD
# serial number = B4A00A581B0E
/interface bridge
add admin-mac=74:4D:28:1E:84:DB auto-mac=no comment=defconf name=bridge
/interface ethernet
set [ find default-name=ether1 ] disabled=yes speed=100Mbps
set [ find default-name=ether2 ] speed=100Mbps
set [ find default-name=ether3 ] disabled=yes speed=100Mbps
set [ find default-name=ether4 ] disabled=yes speed=100Mbps
set [ find default-name=ether5 ] disabled=yes speed=100Mbps
/interface wireless
set [ find default-name=wlan1 ] band=2ghz-b/g/n channel-width=20/40mhz-Ce disabled=no distance=indoors frequency=auto installation=indoor mode=ap-bridge ssid=MT wireless-protocol=802.11 wps-mode=\
push-button-virtual-only
set [ find default-name=wlan2 ] band=5ghz-a/n/ac channel-width=20/40/80mhz-Ceee disabled=no distance=indoors frequency=auto mode=ap-bridge ssid=MT5 wireless-protocol=802.11 wps-mode=\
push-button-virtual-only
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/interface lte apn
set [ find default=yes ] apn=internet.yota default-route-distance=1 name=yota
/interface wireless security-profiles
/ip hotspot profile
set [ find default=yes ] html-directory=flash/hotspot
/ip kid-control
add fri=»» mon=»» name=PS4 rate-limit=100 sat=»» sun=»» thu=»» tue=»» wed=»»
/ip pool
add name=dhcp ranges=192.168.1.10-192.168.1.254
/ip dhcp-server
add address-pool=dhcp disabled=no interface=bridge lease-time=12h name=defconf
/port
set 0 name=usb1
/interface ppp-client
add apn=internet.yota disabled=no info-channel=1 name=ppp-out1 port=usb1
/ppp profile
set *0 change-tcp-mss=no
set *FFFFFFFE change-tcp-mss=no
/queue simple
add max-limit=2M/5M name=5Mb target=192.168.1.14/32,192.168.1.20/32,192.168.1.100/32,192.168.1.114/32
add max-limit=5M/5M name=»Sasha PC» target=192.168.1.188/32
add max-limit=0/10M name=PS4 target=192.168.1.194/32
add disabled=yes max-limit=100/100 name=»PS4 down» target=192.168.1.194/32
add max-limit=1M/30M name=Torrent target=192.168.1.140/32
/interface bridge port
add bridge=bridge comment=defconf interface=ether2
add bridge=bridge comment=defconf interface=ether3
add bridge=bridge comment=defconf interface=ether4
add bridge=bridge comment=defconf interface=ether5
add bridge=bridge comment=defconf interface=wlan1
add bridge=bridge comment=defconf interface=wlan2
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add comment=defconf interface=bridge list=LAN
add comment=defconf interface=ether1 list=WAN
/ip address
add address=192.168.1.1/24 comment=defconf interface=ether2 network=192.168.1.0
/ip dhcp-client
add comment=defconf dhcp-options=hostname,clientid disabled=no interface=ether1
/ip dhcp-server network
add address=192.168.1.0/24 comment=defconf gateway=192.168.1.1 netmask=24
/ip dns
set allow-remote-requests=yes
/ip dns static
add address=192.168.1.1 name=router.lan
/ip firewall filter
add action=accept chain=input comment=»defconf: accept established,related,untracked» connection-state=established,related,untracked
add action=drop chain=input comment=»defconf: drop invalid» connection-state=invalid
add action=accept chain=input comment=»defconf: accept ICMP» protocol=icmp
add action=drop chain=input comment=»defconf: drop all not coming from LAN» in-interface-list=!LAN
add action=accept chain=forward comment=»defconf: accept in ipsec policy» ipsec-policy=in,ipsec
add action=accept chain=forward comment=»defconf: accept out ipsec policy» ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment=»defconf: fasttrack» connection-state=established,related
add action=accept chain=forward comment=»defconf: accept established,related, untracked» connection-state=established,related,untracked
add action=drop chain=forward comment=»defconf: drop invalid» connection-state=invalid
add action=drop chain=forward comment=»defconf: drop all from WAN not DSTNATed» connection-nat-state=!dstnat connection-state=new in-interface-list=WAN
add action=drop chain=input in-interface=ppp-out1
/ip firewall mangle
add action=change-mss chain=forward new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
/ip firewall nat
add action=masquerade chain=srcnat comment=»defconf: masquerade» ipsec-policy=out,none out-interface-list=WAN
add action=masquerade chain=srcnat out-interface=ppp-out1
/system clock
set time-zone-name=Europe/Moscow
/system scheduler
add interval=20s name=check-ppp-client on-event=»#:log info message=\»*** start check any ppp client connection ***\»;\
\n:if ([/ping 8.8.8.8 interface=ppp-out1 interval=3 count=5] = 0) do= <\
\n :log info message=\»** RESTART MODEM ***\»;\
\n\t/interface disable ppp-out1\
\n\t/interface enable ppp-out1\
\n>\
\n#:log info message=\»*** end check any ppp client connection ***\»;» policy=ftp,read,write,test start-date=jan/01/2002 start-time=00:20:00
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN
/tool netwatch
add disabled=yes host=8.8.8.8
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADS 0.0.0.0/0 ppp-out1 1
1 ADC 10.112.112.158/32 10.147.15.232 ppp-out1 0
2 ADC 192.168.1.0/24 192.168.1.1 bridge 0
/ip dns print
servers:
dynamic-servers: 10.178.239.70,10.178.239.22
allow-remote-requests: yes
max-udp-packet-size: 4096
query-server-timeout: 2s
query-total-timeout: 10s
max-concurrent-queries: 100
max-concurrent-tcp-sessions: 20
cache-size: 2048KiB
cache-max-ttl: 1w
cache-used: 168KiB
[РЕШЕНО] mikrotik проблема с MTU
Проблема — перестали загружаться полностью сайты, а именно флеш, части скриптов и картинки. Я бы даже сказал что загружается но не отображается. На загрузку например youtube (до полного отображения страницы) необходимо около 5 минут.
Из ярких примеров: сайт мегафона и госуслуги
Administrator
Сообщений: 728 Баллов: 8901 Рейтинг: 0 Регистрация: 09.02.2011
05.10.2021 21:16:12
Actual MTU ожидается 1500 и если у вас меньше, то могут начинаться проблемы.
/ip firewall mangle
add chain=forward action=change-mss new-mss=clamp-to-pmtu passthrough=yes tcp-flags=syn protocol=tcp
—clamp-mss-to-pmtu
Автоматическая установка значения MSS в (path_MTU — 40 для IPv4; -60 для IPv6).
Для данной ситуации лучше всего подойдет опция –clamp-mss-to-pmtu, которая автоматически установит минимальный MSS на все транзитные пакеты.
Тестирование MTU
Используя это можно протестировать
прохождение пакетов заданного размера (MTU) (по умолчанию 1500)
без фрагментации до целевого адреса.
●Linux:
ping -M do -s
●RouterOS:
:ping do-not-fragment size=
●Windows:
ping -f -l
Проблемы MTU и MSS. Оптимизация работы VPN
Услуги Системного Администратора — Работаю только с Юр. Лицами по договору обслуживания.
Administrator
Сообщений: 728 Баллов: 8901 Рейтинг: 0 Регистрация: 09.02.2011
02.12.2021 16:26:17
Дополню про тунель l2tp по умолчанию mtu 1450, но для BCP нужен чтобы он был не меньше 1500, для этого можно использовать Multilink PPP
«Multilink PPP (MP) is supported in order to provide MRRU (the ability to transmit full-sized 1500 and larger packets) and bridging over PPP links (using Bridge Control Protocol (BCP) that allows to send raw Ethernet frames over PPP links). This way it is possible to setup bridging without EoIP. The bridge should either have an administratively set MAC address or an Ethernet-like interface in it, as PPP links do not have MAC addresses.»
С стороны сервера в настройках L2TP ставим MRRU 1500 и аналогично делаем с стороны клиента. Когда необходимо больше 1500 добиться уменьшаем MTU и MRU до 1400, а MRRU 1600
Если клиент WINDOWS то также можно включить MULTILINK через настройки соединения options -> ppp Settings.. и там multilin for single link , enable software compression.