WireGuard Error: Interface MTU mismatch leading to packet fragmentation drop — Исправление
VPN-туннель успешно устанавливает рукопожатие, утилита ping проходит без потерь, однако реальные сетевые приложения зависают при передаче больших объемов данных.
- Веб-страницы HTTPS зависают на этапе TLS Handshake (обмен сертификатами).
- Сессии SSH зависают при вводе длинных команд или выполнении
cat large_file.txt. - В выводе
ip -s link show wg0растут счетчикиerrorsилиdropped. - Команда
ping -s 1420 <VPN_IP>завершается с ошибкойPacket needs to be fragmented but DF set.
1. Расчет оптимального размера MTU для WireGuard
Заголовок WireGuard добавляет постоянный оверхед: **32 байта** (WireGuard) + **20 байт** (IPv4) или **40 байт** (IPv6) + **8 байт** (UDP). Итого суммарный оверхед составляет:
- Для базового IPv4-канала:
1500 - 60 = 1420 байт; - Для базового IPv6-канала:
1500 - 80 = 1400 байт; - Для каналов PPPoE / мобильных сетей:
1420 - 8 = 1280-1360 байт.
2. Определение максимального MTU внешнего канала без фрагментации
Выполните пинг с запретом фрагментации (флаг DF):
# Linux
ping -M do -s 1472 -c 3 8.8.8.8
# Если пинг не проходит, уменьшайте размер пакета (-s 1460, 1420, 1380), пока пакет не пройдет без фрагментации.
# MTU внешнего канала = размер_пакета + 28 байт.3. Установка корректного MTU в конфигурации WireGuard
Задайте безопасный размер MTU в секции [Interface] в /etc/wireguard/wg0.conf:
[Interface]
Address = 10.0.0.2/24
PrivateKey = <PrivateKey>
MTU = 12804. Включение TCP MSS Clamping на стороне сервера
Для автоматической подстройки размера TCP-пакетов под MTU туннеля добавьте правила в межсетевой экран:
# Добавление в iptables на сервере
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Для постоянной работы через PostUp в wg0.conf:
PostUp = iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
PostDown = iptables -t mangle -D FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu5. Применение настроек
wg-quick down wg0 && wg-quick up wg0 Частые вопросы (FAQ)
Почему ping работает, а сайты в браузере не открываются?
Пакеты ICMP ping имеют маленький размер (обычно 64-84 байта) и легко проходят через туннель. Большие пакеты TLS Handshake или веб-данных превышают фактический MTU и молча отбрасываются из-за Path MTU Discovery Blackhole.
Какое универсальное значение MTU подходит для любых типов сетей (включая LTE/5G)?
Значение MTU = 1280 является минимальным стандартом для протокола IPv6 и гарантированно работает без фрагментации в подавляющем большинстве мобильных и спутниковых сетей.
Нужно ли настраивать MTU одинаковым на сервере и клиенте?
MTU интерфейса определяет размер исходящих пакетов локального узла. На клиенте рекомендуется выставлять MTU, равный или меньший MTU сервера (обычно 1280-1420).
Как влияет TCPMSS --clamp-mss-to-pmtu на производительность?
Это правило модифицирует заголовок SYN-пакетов TCP во время трехстороннего рукопожатия, заставляя клиентов слать сегменты подходящего размера. Накладные расходы на CPU минимальны.