Mangle

Провайдеры и MTU/MSS/PMTU

Предыстория Значит нужен мне второй канал связи, да этак мегабит 300 в секунду. В моём городе немного провайдеров, по этому выбрать не дали и пришлось подключаться к WiFire (он же NetByNet, MegaFon и так далее). Подключился, потестил, 300 мегабит, балдеж. Решил я значит почитать что нового на своем любимом Хабре и опа: он не открывается, но охотно пингуется.

Диагностика Ну думаю: что-то тут не так. Сетевое у меня Mikrotik, возможностей уйма, пойду искать причину на своей стороне. Лезу в логи и вижу как посыпался DoH (РКН, приветик) и крайне удивляюсь этому. решил временно отрубить DoH и дать 1.1.1.1… Ситуация не изменилась. Начал резолвить адреса хотя бы чего-нибудь, все через раз. Решил прокинуть трейс до Хабра и смотрю на «потяряшки». Думаю дай звякну в поддержку, вдруг умное чего скажут. Те репу почесали, сказали что не видят мою сеть за роутером (nat » forward » change ttl »+1 :D) и изобразили что-то вроде «Мы ХЗ».

Начал копать дальше. Вспомнил всю балду, которую знаю о пакетах и тут осенило.

Что такое 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 - не логировать

и бинго, наконец-то открывается Хабр и все что мне нужно.

В сетевой части я не «Ас», по этому сумбурно вышло, да и на Хабре статьи не нашел похожей, может будет кому полезно.

/ip firewall mangle add chain=postrouting action=change-mss new-mss=clamp-to-pmtu passthrough=yes tcp-flags=syn protocol=tcp out-interface-list=WAN

Вернуться назад