Симптомы проблемы
При запуске Docker на машине с активным VPN (Cisco AnyConnect, OpenVPN, WireGuard и др.):
- VPN постоянно переподключается или падает
- Docker контейнеры не стартуют корректно
- Nginx/другие сервисы отдают 504 Gateway Timeout
- Наблюдаются таймауты и потеря пакетов
Диагностика
Проверьте MTU интерфейсов:
# Docker bridge
docker network inspect bridge | grep MTU
# "mtu": 1500
# VPN интерфейс
ip a show cscotun0
# mtu 1406
Проблема: Docker создаёт сети с MTU 1500, но VPN туннель имеет MTU 1406. Пакеты размером 1500 байт не проходят через туннель → фрагментация/потеря → VPN падает.
Решение
Настройте Docker на использование MTU вашего VPN.
Шаг 1. Узнайте MTU VPN
ip a show <vpn-interface> | grep mtu
# Обычно: 1400-1500, в зависимости от провайдера
Шаг 2. Отредактируйте /etc/docker/daemon.json
{
"mtu": 1406,
"bip": "172.17.0.1/16",
"default-address-pools": [
{"base": "172.28.0.0/16", "size": 24}
]
}
Пояснение параметров:
mtu— MTU для всех Docker сетей (должен совпадать с VPN)bip— фиксированный IP для docker0 bridgedefault-address-pools— пулы для новых сетей (избегаем пересечения с VPN)
Шаг 3. Перезапустите Docker
sudo systemctl restart docker
# или перезапустите Docker Desktop
Шаг 4. Подключите VPN
VPN и Docker теперь должны работать корректно.
Дополнительно
Проверка маршрутизации
ip route show | grep -E "docker|cscotun0"
Убедитесь, что нет перекрытия подсетей:
- Docker:
172.17.0.0/16,172.28.0.0/16 - VPN:
172.26.16.0/20(пример)
Docker Compose
Если используете Docker Compose, можно указать MTU для конкретной сети:
networks:
default:
driver: bridge
driver_opts:
com.docker.network.driver.mtu: 1406
Полезные команды
# Посмотреть все Docker сети
docker network ls
# Инспекция сети
docker network inspect bridge
# Статус VPN
ip a show <vpn-interface>
# Тест MTU
ping -M do -s 1472 -c 1 8.8.8.8 # для MTU 1500
ping -M do -s 1378 -c 1 8.8.8.8 # для MTU 1406
TL;DR
Docker (MTU 1500) + VPN (MTU 1406) = конфликт. Установите MTU Docker равным MTU VPN в /etc/docker/daemon.json и перезапустите сервис.