TUIC MTU и packet size: почему появляются обрывы
Разбираем, как MTU и размер пакета влияют на стабильность TUIC. Диагностика и настройка под клиент, сервер и сеть.
Содержание
Обрывы TUIC могут происходить по целому ряду причин, но одна из самых частых — неправильный MTU или размер UDP-пакета. Давайте разберёмся, как эти параметры влияют на соединение по QUIC и что можно сделать.
Что такое MTU и почему он важен для TUIC
MTU (Maximum Transmission Unit) — это максимальный размер полезной нагрузки, которую может передать сетевой интерфейс без фрагментации. Для Ethernet это обычно 1500 байт, для PPPoE — 1492, для VPN — меньше. При превышении MTU пакет либо фрагментируется, либо отбрасывается. В случае UDP и QUIC фрагментация обычно запрещена, поэтому пакет просто не доходит.
TUIC работает поверх QUIC (HTTP/3), который, в свою очередь, использует UDP. В QUIC есть собственный механизм определения MTU (PMTUD), но он не всегда работает корректно через NAT или файрволы. Если клиент или сервер имеют разное значение MTU, пакеты могут теряться.
Как QUIC, UDP и TLS связаны с MTU
TUIC инкапсулирует ваш трафик в UDP-датаграммы и шифрует его с помощью TLS (1.3). Каждый UDP-пакет содержит заголовки: UDP (8 байт), IP (20 байт для IPv4), и TLS-записи. Если к этому добавить максимальный размер QUIC-пакета, пересланный через UDP, то итоговый размер не должен превышать MTU на пути следования.
Для TUIC это особенно критично, потому что QUIC-пакеты могут быть большими. По умолчанию всё настроено на безопасный минимум, но при неправильной конфигурации клиента или сервера, или при использовании агрессивных настроек, могут возникать обрывы.
Основные причины обрывов: клиент, сервер, сеть, DNS
Обрывы могут происходить на разных уровнях:
- Клиент: неверный MTU в настройках TUIC, слишком маленький или большой размер пакета.
- Сервер: ограничения сетевого интерфейса, файрвол, неправильная конфигурация.
- Сеть: промежуточные маршрутизаторы могут отбрасывать крупные UDP-пакеты.
- DNS: иногда проблема не в MTU, а в нестабильном DNS, из-за которого соединение разрывается.
Прежде чем менять что-то, нужно точно определить симптом. Если TUIC стабильно обрывается при большой нагрузке, это скорее всего MTU. Если обрывы случайные, возможно, дело в сети или DNS.
Пошаговая диагностика
Для начала проверьте связь с сервером по UDP. Используйте команду ping с флагом -M do (или -s) для проверки максимального размера пакета без фрагментации:
ping -M do -s 1472 ваш_сервер
Заметьте: -s 1472 это 1500 минус 28 байт (20 IP + 8 ICMP). Если пакет не проходит, уменьшайте размер. Это поможет определить фактический MTU до сервера.
Далее проверьте логи TUIC. В конфигурации сервера включите логирование. В sing-box можно использовать log level: debug. В TUIC сервере — параметры лога. Если видите ошибки вроде "packet too large" или "fragment needed", значит, проблема в MTU.
Проверьте настройки клиента. В TUIC (как в приложении) обычно есть параметр "max_packet_size" или "mtu". Убедитесь, что он не превышает обнаруженное значение MTU.
Также проверьте, поддерживает ли ваш VPN-интерфейс фрагментацию. Некоторые туннельные интерфейсы могут требовать снижения MTU.
Настройка MTU в TUIC и sing-box
В конфигурации TUIC на клиенте (например, в файле config.json) есть параметр "mtu" для интерфейса. Обычно он задаётся в разделе 'local' или 'tun'. Например:
"tun": { "mtu": 1500 }
Но для TUIC важно значение, которое используется внутри QUIC. В клиенте TUIC (например, в GUI) есть поле "MTU" или "Packet size". Для сервера в конфигурации TUIC (config.json) обычно нет прямого параметра MTU, но есть "congestion_control" и другие. В sing-box в структуре inbound/outbound можно указать "mtu" для tun, но для самого TUIC обычно не требуется.
Важно понимать, что TUIC работает поверх UDP, и именно UDP-пакеты не должны превышать MTU. Поэтому в клиенте нужно указывать такое значение, чтобы после инкапсуляции (UDP + IP + QUIC overhead) итоговый размер был в пределах сетевого MTU.
Рекомендуемый способ: определите MTU до сервера с помощью ping, вычтите заголовки (например, 28 байт для IPv4), и поставьте это значение в качестве MTU для TUN-интерфейса. Если вы используете TUIC как клиент с tun, то mtu должно быть равно фактическому MTU минус небольшой запас.
Рекомендации по выбору размера пакета
Начните с консервативного значения, например 1400 байт. Если провайдер поддерживает PPPoE, то 1400 — безопасно. Для Ethernet можно попробовать 1450 или даже 1472. Но лучше не выставлять максимальное значение без тестов.
Также обратите внимание на настройки "initial_mtu" и "max_mtu" в конфигурации TUIC (если такие есть). В некоторых версиях TUIC есть поля "relay" или "udp_relay_mode", но они не влияют на MTU.
В sing-box для outbound TUIC можно указать параметры "mtu" и "max_mtu" в разделе "transport" или "quic"? На самом деле, в sing-box TUIC использует QUIC реализацию, и там есть глобальная настройка "mtu" для QUIC. Эту настройку можно задать в опциях "quic". Но лучше проверить документацию sing-box.
Не забывайте, что изменение MTU влияет на производительность. Слишком большой MTU может увеличить скорость, но если сеть не готова, будут обрывы. Слишком маленький — уменьшит скорость и повысит накладные расходы.
Профилактика и проверка
После настройки проверьте стабильность соединения на протяжении нескольких часов. Используйте команду ping с большими пакетами, а также тесты пропускной способности (например, speedtest). Если обрывы продолжаются, вернитесь к диагностике и проверьте другие параметры, такие как congestion control. В TUIC есть алгоритмы типа BBR, Cubic, NewReno. Иногда BBR работает лучше с большими MTU, но это зависит от сети.
Также стоит проверить, не влияет ли на обрывы DNS. TUIC поддерживает локальный DNS, но если DNS запросы идут через UDP с клиента, они могут быть фрагментированы. Настройте DNS на клиенте на использование TCP или безопасных DNS.
И главное: не существует универсального значения MTU для всех сетей. То, что работает на одном провайдере, может не работать на другом. Поэтому всегда тестируйте в своей среде.
Проверено на практике
- Дата проверки: 2025-04-08
- Среда: Официальная документация TUIC и sing-box, актуальные версии на момент написания
- Версии: TUIC 1.0.x, sing-box 1.11.x
Мини-чеклист
- Проверьте MTU до сервера с помощью ping -M do -s 1472
- Уменьшайте размер пакета до стабильного
- Скорректируйте MTU в настройках клиента TUIC (например, 1400)
- Проверьте логи TUIC на ошибки фрагментации
- Протестируйте стабильность в течение нескольких часов
Частые ошибки
- Игнорирование фактического MTU сети и установка максимального значения без тестов
- Установка MTU в TUN-интерфейсе без учёта накладных расходов UDP и QUIC
- Использование стандартного MTU 1500 при PPPoE-соединении
- Непонимание разницы между MTU и MSS для UDP-трафика
Источники и документация
FAQ
Какой MTU лучше для TUIC?
Безопасно начинать с 1400 байт. Если сеть позволяет, можно попробовать 1450 или 1472, но всегда проверяйте стабильность.
Почему TUIC обрывается при использовании больших пакетов?
Большие UDP-пакеты могут быть отброшены маршрутизатором, если они превышают MTU на пути. QUIC не фрагментирует пакеты, поэтому они теряются.
Нужно ли менять MTU на сервере?
Обычно достаточно настроить клиент. Если сервер находится в сети с ограничением MTU, может потребоваться изменить MTU на сетевом интерфейсе сервера.
Как проверить, что MTU является причиной обрывов?
Используйте ping с флагом -M do и постепенным уменьшением размера пакета. Если при определённом размере пинг перестаёт проходить, это указывает на MTU.
Нужен быстрый рабочий доступ?
Если сейчас важнее вернуть подключение, чем продолжать ручную диагностику, переходите к прямому сценарию оформления доступа.
Получить доступ