WireGuard Error: IP address collision on wg0 interface — Решение конфликта
При подключении нового клиента у существующих пиров периодически или полностью пропадает сетевая связность. Маршрутизация трафика становится нестабильной.
- Один из клиентов перестает получать ответы от сервера, как только активен второй клиент.
- Команда
wg-quick up wg0выдает ошибку:RTNETLINK answers: File existsилиAddress already assigned. - В выводе
wg show wg0два разных публичных ключа имеют пересекающиеся подсети в параметреallowed ips. - Пакеты отправляются не тому клиенту (нарушение принципа Cryptokey Routing).
1. Понимание принципа Cryptokey Routing
В WireGuard маршрутизация основана на сопоставлении IP-адресов и открытых ключей (Cryptokey Routing). Сервер не может иметь два разных блока [Peer] с одинаковым или перекрывающимся адресом в поле AllowedIPs.
2. Поиск дублирующихся IP-адресов в конфигурации сервера
Выполните поиск пересечений по файлам конфигурации:
grep -E "AllowedIPs|PublicKey" /etc/wireguard/wg0.conf
# Либо через утилиту wg
wg show wg0 allowed-ips3. Исправление конфликтов адресации
Убедитесь, что каждый пир имеет уникальный IP-адрес с маской /32 (для IPv4) или /128 (для IPv6):
# Корректный пример /etc/wireguard/wg0.conf:
[Peer]
# Клиент 1
PublicKey = aaaaaa...
AllowedIPs = 10.0.0.2/32, fd00::2/128
[Peer]
# Клиент 2 (Уникальный IP)
PublicKey = bbbbbb...
AllowedIPs = 10.0.0.3/32, fd00::3/1284. Проверка конфликта IP с локальной сетью хоста
Убедитесь, что подсеть WireGuard (например, 192.168.1.0/24) не совпадает с подсетью физического интерфейса eth0 или Wi-Fi сети клиента:
ip route showЕсли есть наложение, переведите WireGuard на изолированную подсеть (например, 10.250.250.0/24 или 172.16.200.0/24).
5. Применение обновленной таблицы маршрутов
wg syncconf wg0 <(wg-quick strip wg0) Частые вопросы (FAQ)
Что произойдет, если на сервере указать одинаковый AllowedIPs для двух пиров?
WireGuard сохранит правило только для того пира, который был добавлен последним. Первый пир полностью потеряет возможность принимать трафик с этого адреса.
Почему wg-quick выдает ошибку 'RTNETLINK answers: File exists'?
Эта ошибка возникает, когда маршрут к подсети, указанной в AllowedIPs или Address, уже существует в системной таблице маршрутизации (создан другим интерфейсом или статическим маршрутом).
Можно ли назначать клиентам адреса по DHCP в WireGuard?
WireGuard не поддерживает протокол DHCP на уровне L3. Назначение адресов должно выполняться статически или автоматизироваться оркестраторами (Headscale, Netmaker, WG-Easy).
Как разрешить одному пиру маршрутизировать целую локальную подсеть?
Укажите подсеть в AllowedIPs нужного пира (например, AllowedIPs = 10.0.0.5/32, 192.168.10.0/24) и включите ip_forwarding на стороне клиента-маршрутизатора.