Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

WG_ROUTING_LOOP Сетевое оборудование и VPN

WireGuard Error: Routing loop detected / Failed to add routing table entry — Исправление

Обновлено: 24.08.2026 · Официальная документация ↗

При попытке пустить весь интернет-трафик через туннель (AllowedIPs = 0.0.0.0/0) утилита wg-quick блокирует применение конфигурации или хост полностью теряет доступ к сети.

  • Ошибка при запуске: [#] ip route add ... Error: Routing loop detected или RTNETLINK answers: File exists.
  • После старта туннеля соединение с сервером разрывается, так как пакеты к самому Endpoint WireGuard заворачиваются внутрь туннеля.
  • Теряется доступ к серверу по SSH при запуске интерфейса.
  • Неправильно настроенные правила ip rule и метки пакетов fwmark.

1. Понимание механизма изоляции маршрутов в wg-quick

Когда вы указываете AllowedIPs = 0.0.0.0/0, утилита wg-quick использует специальную таблицу маршрутизации (table 51820) и правила политик маршрутизации (Policy Routing), чтобы исключить пакеты самого WireGuard из общего туннелирования с помощью метки fwmark.

2. Проверка и очистка конфликтующих правил ip rule

Проверьте текущие таблицы маршрутизации:

ip rule show
ip route show table all

Если остались мусорные записи после аварийного завершения предыдущих сессий, удалите их:

ip rule del table 51820 2>/dev/null
ip route flush table 51820 2>/dev/null

3. Исключение локальных подсетей и Endpoint из AllowedIPs

Если wg-quick не может корректно настроить fwmark (например, в некоторых контейнерах), явно укажите исключения или используйте директиву Table = off с ручной настройкой маршрутов:

[Interface]
Address = 10.0.0.2/24
PrivateKey = <Key>
# Отключение автоматического создания маршрута по умолчанию
Table = off

[Peer]
PublicKey = <Server_Key>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0

4. Ручная безопасная маршрутизация через PostUp

Настройте селективные маршруты через команды PostUp:

PostUp = ip route add 10.0.0.0/8 dev wg0
PostUp = ip route add 192.168.0.0/16 dev wg0
PostDown = ip route del 10.0.0.0/8 dev wg0
PostDown = ip route del 192.168.0.0/16 dev wg0

5. Перезапуск туннеля

wg-quick down wg0 && wg-quick up wg0
💡 Практика специалистов: Если вы администрируете удаленный сервер, никогда не запускайте 'wg-quick up' с AllowedIPs = 0.0.0.0/0 без предварительно настроенного правила 'ip rule add from table main', иначе сервер станет недоступен по внешнему IP.

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

Почему при указании AllowedIPs = 0.0.0.0/0 пропадает связь с сервером по SSH?

Если входящий SSH-пакет пришел на физический IP, ответный пакет пытается уйти через дефолтный маршрут WireGuard. Для исправления настройте policy routing (маршрутизацию на основе исходящего адреса).

Что делает параметр FwMark в WireGuard?

FwMark помечает исходящие зашифрованные UDP-дейтаграммы WireGuard числовой меткой (по умолчанию 0xca6c), чтобы ядро отправляло их через физический шлюз, а не обратно в туннель.

Можно ли использовать AllowedIPs = 0.0.0.0/0 в непривилегированном Docker контейнере?

Для работы fwmark и ip rule контейнеру требуются права NET_ADMIN (флаг --cap-add=NET_ADMIN) и доступ к модулю ядра хоста.

Как направить через туннель весь интернет, кроме локальной сети 192.168.1.0/24?

Добавьте статический маршрут к локальной подсети через ваш локальный шлюз перед запуском WireGuard или воспользуйтесь калькулятором разбивки подсетей AllowedIPs.

Полезные материалы
Рекомендуем