MSS на MikroTik: почему половина сайтов не открывается и как это исправить

MSS на MikroTik: почему половина сайтов не открывается и как это исправить


Представьте: вы настроили VPN между офисами, всё пингуется, но половина HTTPS-сайтов просто зависает. Telegram работает, но 1С через туннель — нет. Сотрудники жалуются, что «интернет есть, но сайты не грузятся».

Или вы подключили интернет через PPPoE, и вдруг оказывается, что YouTube открывается, а сайт налоговой — нет. Причём только на одном компьютере, а на другом — всё работает.

Знакомо? Поздравляю, вы столкнулись с проблемой MSS (Maximum Segment Size).

Это одна из тех вещей, которые работают молча, пока не сломаются. А когда ломаются — непонятно, что вообще искать.

Эта статья для тех, кто:

  • настраивает MikroTik и видит странное поведение сайтов
  • работает с PPPoE, IPSec, WireGuard, GRE
  • слышал про change tcp mss, но не понимает, что это и зачем
  • хочет разобраться один раз и больше не гуглить «mikrotik mss clamp»

Я объясню простым языком, без академической воды. С примерами из реальной жизни. С командами, которые можно скопировать и запустить.

Что такое MSS и почему он вообще существует

MSS (Maximum Segment Size) — это максимальный размер данных, которые можно запихнуть в один TCP-пакет.

Не путайте с MTU. Это разные вещи.

MTU (Maximum Transmission Unit) — это максимальный размер всего пакета (включая заголовки).
MSS — это максимальный размер только данных внутри TCP-пакета.

Формула:

MSS = MTU - IP-заголовок (20 байт) - TCP-заголовок (20 байт)

Пример:

  • Обычный Ethernet: MTU = 1500 → MSS = 1460
  • PPPoE: MTU = 1492 → MSS = 1452
  • IPSec туннель: MTU = 1400 → MSS = 1360

Почему это важно?

Когда вы открываете сайт, ваш браузер отправляет запрос на сервер. Сервер отвечает данными — например, HTML-страницей. Эти данные разбиваются на пакеты.

Если сервер пытается отправить пакет размером больше, чем позволяет ваш канал (из-за туннеля, PPPoE и т.д.), пакет либо:

  • фрагментируется — разбивается на куски (медленно и ненадёжно)
  • отбрасывается — если стоит флаг DF (Don’t Fragment)

В результате: сайт зависает, потому что часть пакетов не доходит.

MSS vs MTU: в чём разница простыми словами

Давайте на пальцах.

MTU — это размер грузовика, который везёт ваши данные по сети. Если грузовик не влезает в туннель — проблема.

MSS — это размер груза внутри грузовика (без учёта кабины и рамы).

Пример из жизни:

У вас обычный интернет (MTU 1500). Вы поднимаете VPN-туннель (добавляются заголовки шифрования). MTU туннеля становится 1400.

Но ваш компьютер не знает об этом. Он продолжает отправлять пакеты размером 1500. Пакеты не проходят через туннель. Сайты зависают.

Решение: Сказать компьютеру: «Дружище, отправляй пакеты поменьше, у нас тут туннель».

Но как это сделать, если компьютеров 50? На каждом настраивать?

Нет. Мы делаем это на роутере. И называется это clamp tcp mss.

Почему на MikroTik приходится менять MSS

Кейс 1: PPPoE и уменьшенный MTU

Вы подключились к провайдеру через PPPoE. MTU стал 1492 вместо 1500.

Что происходит:

Большинство сайтов работают нормально. Но некоторые — зависают. Особенно банки, госуслуги, корпоративные порталы.

Почему:

Эти сайты отправляют большие пакеты с флагом DF (Don’t Fragment). Пакеты не проходят через PPPoE (MTU 1492), но сервер не знает об этом. Соединение зависает.

Решение:

На MikroTik настроить change tcp mss, чтобы роутер автоматически уменьшал MSS в пакетах клиентов.

Кейс 2: IPSec туннель между офисами

Вы подняли IPSec между двумя офисами. Пинг проходит, но:

  • Telegram работает
  • Почта работает
  • 1С через туннель — зависает
  • SSH — работает, но команды с большим выводом обрываются

Почему:

IPSec добавляет заголовки шифрования (~50-80 байт). MTU туннеля стал 1400-1420. Большие TCP-пакеты не проходят.

Решение:

Clamp MSS на обоих концах туннеля.

Кейс 3: WireGuard с мобильными клиентами

Вы настроили WireGuard для удалённых сотрудников. Всё работает, но:

  • Сайты открываются медленно
  • Иногда подвисают
  • На телефоне работает лучше, чем на ноутбуке

Почему:

WireGuard — это туннель. MTU уменьшается. Телефон сам подстраивается, а ноутбук — нет.

Решение:

На сервере WireGuard (MikroTik) настроить MSS clamping.

Кейс 4: CG-NAT и странные провайдеры

Некоторые провайдеры используют CG-NAT (Carrier-Grade NAT) с нестандартным MTU. Или GRE-туннели. Или вообще непонятно что.

Симптомы:

  • Сайты открываются выборочно
  • Cloudflare работает, остальное — нет
  • Скорость по speedtest отличная, но загрузка файлов — тормозит

Решение:

Изменить MSS на исходящем интерфейсе.

Что такое clamp tcp mss на MikroTik

Clamp TCP MSS — это когда роутер перехватывает TCP-пакеты и автоматически уменьшает значение MSS в заголовке.

Как это работает:

  1. Клиент отправляет пакет с флагом SYN (начало TCP-соединения)
  2. В этом пакете указано: «Я могу принимать сегменты размером до 1460 байт»
  3. MikroTik перехватывает пакет и меняет: «Можешь принимать только до 1400 байт»
  4. Сервер получает изменённое значение и отправляет пакеты меньшего размера
  5. Всё работает

Важно: Это работает только для TCP. UDP не имеет MSS.

Action=change-mss: что происходит под капотом

В MikroTik за это отвечает правило в firewall mangle:

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=1400 comment="Fix MSS for tunnel"

Разбор команды:

  • chain=forward — пакеты, проходящие через роутер (не для самого роутера)
  • protocol=tcp — только TCP (MSS работает только для TCP)
  • tcp-flags=syn — только пакеты с флагом SYN (начало соединения)
  • new-mss=1400 — новое значение MSS

Clamp-to-pmtu: динамическая настройка

Вместо фиксированного значения можно использовать clamp-to-pmtu:

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=clamp-to-pmtu comment="Auto MSS"

Что делает:

MikroTik автоматически определяет MTU интерфейса и рассчитывает MSS.

Плюсы: Не нужно вручную считать.
Минусы: Не всегда работает корректно (особенно на сложных топологиях).

Рекомендация: Для простых случаев (PPPoE) — используйте clamp-to-pmtu. Для туннелей — фиксированное значение.

Как изменить MSS на MikroTik: практические примеры

Пример 1: PPPoE с MTU 1492

Проблема: Провайдер даёт PPPoE, MTU = 1492. Некоторые сайты не открываются.

Решение:

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=clamp-to-pmtu out-interface=pppoe-out1 \
    comment="PPPoE MSS fix"

Объяснение:

  • out-interface=pppoe-out1 — применять только для пакетов, уходящих в PPPoE
  • clamp-to-pmtu — автоматически рассчитать MSS на основе MTU интерфейса

Проверка:

/ip firewall mangle print

Должно быть правило с action=change-mss.

Пример 2: IPSec туннель между офисами

Топология: Два офиса соединены IPSec site-to-site.

Проблема: 1С через туннель тормозит, SSH обрывается.

Решение на обоих роутерах:

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=1360 comment="IPSec MSS fix"

Почему 1360:

MTU IPSec = ~1400 (зависит от алгоритма шифрования)
MSS = 1400 - 20 (IP) - 20 (TCP) = 1360

Важно: Настроить на обоих концах туннеля.

Пример 3: WireGuard для удалённых сотрудников

Проблема: Сотрудники подключаются к офису через WireGuard. Сайты работают нестабильно.

Решение на сервере WireGuard (MikroTik):

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=1380 out-interface=wireguard1 \
    comment="WireGuard MSS"

Почему 1380:

WireGuard MTU обычно 1420
MSS = 1420 - 40 = 1380

Пример 4: Проблемы с Cloudflare

Симптом: Сайты за Cloudflare не открываются или открываются частично.

Причина: Cloudflare использует большие TCP-пакеты с флагом DF.

Решение:

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=1400 comment="Cloudflare fix"

Пример 5: 1С через VPN зависает

Проблема: 1С через VPN работает медленно или зависает при загрузке больших отчётов.

Решение:

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=1360 src-address=192.168.10.0/24 \
    comment="1C server MSS"

Объяснение:

  • src-address=192.168.10.0/24 — применять только для подсети сервера 1С
  • new-mss=1360 — безопасное значение для большинства туннелей

Как проверить, что MSS работает

Способ 1: Tools → Torch

/tool torch interface=ether1

Смотрите на столбец Tx (передаваемые пакеты). Если размер пакетов стал меньше — MSS работает.

Способ 2: Packet Sniffer

/tool sniffer quick interface=ether1 filter-port=80

В выводе ищите TCP SYN пакеты. В них должно быть новое значение MSS.

Способ 3: ping с флагом DF

На клиенте (Windows):

ping -f -l 1472 8.8.8.8

Объяснение:

  • -f — установить флаг Don’t Fragment
  • -l 1472 — размер данных (1472 + 28 байт заголовков = 1500 MTU)

Результат:

  • Если пинг проходит — MTU нормальный
  • Если «Packet needs to be fragmented» — MTU меньше 1500

Постепенно уменьшайте значение, пока ping не пройдёт. Это ваш реальный MTU.

Способ 4: Browser DevTools

Откройте сайт, который не работает. Нажмите F12 → вкладка Network.

Если запросы зависают (статус «pending») — проблема с MSS.

Способ 5: traceroute с MTU

Linux/macOS:

traceroute -F -m 1500 google.com

Покажет, на каком хопе MTU уменьшается.

Типичные ошибки при настройке MSS

Ошибка 1: Забыли tcp-flags=syn

Неправильно:

add action=change-mss chain=forward protocol=tcp new-mss=1400

Что произойдёт: MikroTik будет менять MSS во ВСЕХ TCP-пакетах, а не только в начале соединения. Это сломает передачу данных.

Правильно:

add action=change-mss chain=forward protocol=tcp tcp-flags=syn new-mss=1400

Ошибка 2: Не указали protocol=tcp

Неправильно:

add action=change-mss chain=forward new-mss=1400

Что произойдёт: Правило будет применяться ко всем протоколам, включая UDP, ICMP. Это не сработает (MSS только для TCP).

Правильно:

add action=change-mss chain=forward protocol=tcp tcp-flags=syn new-mss=1400

Ошибка 3: Сделали правило в input вместо forward

Неправильно:

add action=change-mss chain=input protocol=tcp tcp-flags=syn new-mss=1400

Что произойдёт: Правило будет применяться только к пакетам, адресованным самому роутеру. Для клиентов не сработает.

Правильно:

add action=change-mss chain=forward protocol=tcp tcp-flags=syn new-mss=1400

Ошибка 4: Забыли порядок правил

Если у вас есть правило action=accept до change-mss, оно сработает первым, и MSS не изменится.

Проверка порядка:

/ip firewall mangle print

Правила change-mss должны быть в начале списка.

Ошибка 5: Слишком маленький MSS

Неправильно:

add action=change-mss chain=forward protocol=tcp tcp-flags=syn new-mss=500

Что произойдёт: Соединение будет медленным. Каждый пакет слишком маленький, нужно больше пакетов для передачи данных.

Правильно: MSS должен быть максимально возможным для вашего MTU.

Когда НЕ нужно менять MSS

Это очень важно. Не надо менять MSS просто потому, что вы где-то прочитали про это.

Если MTU нормальный (1500)

Если у вас обычный Ethernet без туннелей, PPPoE, VPN — MSS менять не нужно.

Проверка:

/interface print

Смотрите на столбец MTU. Если везде 1500 — всё хорошо.

Если нет туннелей

MSS нужно менять только если есть:

  • PPPoE
  • IPSec
  • GRE
  • WireGuard
  • PPTP/L2TP
  • Другие инкапсуляции

Если просто роутер с обычным WAN-портом — не трогайте MSS.

Если проблема в DNS

Симптомы похожи:

  • Сайты не открываются
  • Telegram работает
  • По IP всё открывается

Но это не MSS, а проблема с DNS.

Проверка:

# На клиенте
nslookup google.com

# Если ошибка — проблема в DNS, а не в MSS

Если проблема на стороне провайдера

Иногда провайдер сам ломает MSS (блокирует ICMP, неправильно настраивает MTU на своём оборудовании).

Проверка: Подключите компьютер напрямую к модему (без MikroTik). Если проблема остаётся — звоните провайдеру.

Частые вопросы (FAQ)

Нужно ли менять MSS на домашнем роутере?

Ответ: Зависит от типа подключения.

  • Обычный Ethernet (DHCP) — не нужно
  • PPPoE — скорее всего нужно
  • Провайдер через туннель (редко) — нужно

Проверка: Если все сайты открываются нормально — не трогайте.

Чем отличается clamp от change-mss?

Ответ: Это одно и то же. «Clamp» — это жаргон.

В RouterOS команда называется action=change-mss.

«Clamp to PMTU» — это динамический расчёт MSS на основе MTU интерфейса.

Работает ли MSS для UDP?

Ответ: Нет. MSS — это параметр TCP.

Для UDP нет понятия MSS. UDP просто отправляет пакеты, и если они не влезают — фрагментируются на IP-уровне.

Можно ли поставить MSS больше, чем MTU?

Ответ: Технически — да, но это не имеет смысла.

MSS должен быть меньше MTU на 40 байт (IP + TCP заголовки).

Как узнать оптимальное значение MSS?

Ответ:

MSS = MTU интерфейса - 40

Пример:
MTU PPPoE = 1492
MSS = 1492 - 40 = 1452

Что делать, если после настройки MSS ничего не изменилось?

Ответ: Проверьте:

  1. Правило в mangle включено (disabled=no)
  2. Правило в начале списка (порядок важен)
  3. Указан правильный интерфейс (out-interface)
  4. Указан tcp-flags=syn
  5. Указан protocol=tcp

Влияет ли MSS на скорость интернета?

Ответ: Да, но минимально.

Если MSS слишком маленький — скорость падает (нужно больше пакетов для передачи данных).

Если MSS оптимальный — влияния на скорость нет.

Заключение: MSS — это не магия

Давайте подведём итоги.

MSS (Maximum Segment Size) — это размер данных в TCP-пакете. Когда у вас туннель (PPPoE, VPN, IPSec), MTU уменьшается, и нужно уменьшить MSS.

Clamp TCP MSS — это когда MikroTik автоматически меняет MSS в пакетах клиентов, чтобы они проходили через туннель.

Когда нужно:

  • PPPoE с MTU < 1500
  • IPSec, GRE, WireGuard, PPTP, L2TP
  • Странный провайдер с нестандартным MTU

Когда НЕ нужно:

  • Обычный Ethernet без туннелей
  • MTU = 1500 везде
  • Проблема в DNS, а не в MSS

Как настроить (универсальная команда):

/ip firewall mangle
add action=change-mss chain=forward protocol=tcp tcp-flags=syn \
    new-mss=1400 comment="MSS fix"

Как проверить:

  • Torch
  • Packet Sniffer
  • ping -f -l 1472
  • Browser DevTools

Главное правило: Сначала диагностика, потом настройка. Не меняйте MSS просто так.

Если у вас есть конкретная проблема (сайты не открываются, VPN тормозит), сначала проверьте MTU, потом настраивайте MSS.

Сохраните эту статью в закладки. В следующий раз, когда увидите «половина сайтов не работает, а пинг проходит», вы будете знать, что делать.

И помните: MSS — это не фикс для всех проблем. Но когда он нужен — он спасает.

Поделитесь:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх