Исправление конфликта локального IP-адреса после подключения к VPN
Дубликат может сидеть в вашей локальной сети, приходить из пересекающегося удалённого диапазона или быть выданным дважды пулом туннеля. Проверьте, прежде чем менять нумерацию.
Все эти сообщения звучат одинаково и означают разное: ноутбук жалуется на конфликт адресов, но только иногда и в основном при включённом VPN. Три разные неисправности дают это сообщение: настоящий дубликат в вашем собственном сегменте, пересечение, когда удалённая сеть использует ваш диапазон ЛВС и ничего не дублируется, и туннель, который выдал один адрес двум пирам. Исправление в каждом случае разное, а неправильное переносит симптом вместо того, чтобы его убрать. Поэтому сначала решите, какой это случай, а потом что-то меняйте.
Три неисправности с одним сообщением об ошибке
Дубликат означает, что две машины в одном сегменте претендуют на один адрес. Ядро замечает это потому, что ответ на его собственный зонд приходит с другого MAC, и что произойдёт дальше, зависит от стека: Linux пишет это в журнал, Windows отключает интерфейс и делает запись в системном журнале, а клиент DHCP может отклонить предложение.
Пересечение не дублирует ни одного адреса. Ваша ЛВС — 192.168.1.0/24, сеть офиса — тоже 192.168.1.0/24, и теперь маршрут в офис указывает на адреса, которые одновременно являются вашим принтером и вашим NAS. В смысле ARP ничто не конфликтует; пакет просто уходит на не то устройство в одной из двух сетей.
Коллизия в пуле — вина самого туннеля. Два пира были настроены с одним и тем же адресом туннеля или получили его, поэтому сервер не может их различить, отправляя обратный трафик. Один из двух клиентов видит работающее рукопожатие и никаких данных, что выглядит как проблема маршрутизации, но ею не является.
Тест 1: дубликат в вашем собственном сегменте?
Начните с перечисления того, что на самом деле есть у вашей машины, а не того, что вы помните из настройки. Адрес адаптера VPN приватен для туннеля и не совпадает с адресом, который видят сайты, поэтому общий публичный выход — это не конфликт.
ip -br addr
ip neigh
ip route show table all | grep -E 'wg|tun|ppp'В Windows та же информация берётся из ipconfig /all и Get-NetIPAddress, а кэш соседей — в arp -a. Если спорный адрес находится на физическом адаптере и жалоба появляется без запущенного VPN, VPN здесь сторонний наблюдатель, и искать причину в нём не стоит.
Чтобы доказать дубликат, а не гадать, проверьте адрес с устройства, которое им не владеет. arping -D отправляет зонд с нулевым адресом источника, поэтому ответ с неожиданного MAC доказывает, что за этот адрес уже отвечает другой хост.
sudo arping -D -I eth0 -c 3 192.168.1.50Затем найдите владельца через администратора сети, а не выбирая другой адрес самостоятельно. Статические назначения, живущие только в чьих-то заметках, принтеры с фиксированным адресом и резервирования на сервере DHCP — обычные виновники, а выключенное устройство всё равно владеет своей арендой.
Тест 2: пересекаются ли две сети?
Сравните префикс, который выдаёт туннель, с префиксами на ваших интерфейсах. Если удалённый диапазон равен вашей ЛВС или включает её, неисправность — это пересечение, и выдаёт её то, что хост, доступный без VPN, пропадает, или ваш собственный принтер отвечает на офисный адрес.
ip route get 192.168.1.10
ip -br addr showПоиск маршрута сообщает, какой интерфейс использовало бы ядро, и этот ответ — весь диагноз. Если для адреса, принадлежащего вашему локальному принтеру, он указывает туннель, у вас пересечение, и никакое продление аренды этого не изменит.
Есть три честных выхода, и обычно вам доступен только один. Удалённая сторона может выполнять маскарадинг трафика для пересекающейся подсети, так что клиент видит только адрес туннеля сервера. Туннель может нести более узкий удалённый префикс, не конфликтующий с вашей ЛВС. Или клиент может маршрутизировать по адресу источника с помощью правил политики, что работает, но хрупко и трудно передать коллеге.
Перенумеровать офисную сеть редко решаете вы. Перенумеровать свою ЛВС, чтобы уйти от коллизии, — изменение большее, чем ожидают большинство людей, как только в дело вступают принтеры, камеры и хосты со статическими адресами.
Тест 3: выдал ли туннель один адрес дважды?
В WireGuard нет пула адресов. Каждый пир определяется своим открытым ключом и префиксами в AllowedIPs, поэтому дубликат появляется, когда один и тот же адрес туннеля записан в две записи пира или одна и та же пара ключей установлена на двух машинах.
wg show all allowed-ips
wg show wg0 latest-handshakes
wg show wg0 transferСчётчики трафика здесь — полезный столбец: пир, у которого есть недавнее рукопожатие, но нет передачи, либо адресован неправильно, либо затенён другой записью, претендующей на тот же префикс. Поставьте префикс ровно на одного пира и дайте каждому устройству свою пару ключей.
OpenVPN пул имеет, и обычная коллизия — общий профиль клиента с фиксированной строкой --ifconfig, скопированный на вторую машину. Тогда оба клиента запрашивают один и тот же адрес туннеля, и сервер принимает ту сессию, которую обработает первой. Исчерпание пула с --duplicate-cn даёт похожий результат, когда несколько сессий одного сертификата соревнуются за одну запись.
Читайте журнал сервера, а не журнал клиента. Сервер знает, какая сессия заняла какой адрес, и повторяющиеся адреса видны там как предупреждения, которые никогда не доходят до клиента.
Почините у источника, затем проверьте оба устройства
Порядок важен. Сначала исправьте дубликат в ЛВС, потому что клиент, который не может удержать адрес, не удержит и туннель. Затем исправьте назначение на стороне VPN, потому что правка назначения из пула на клиенте отменяется при следующем подключении. И наконец займитесь дублированными личностями: отдельные пары ключей в WireGuard, отдельные сертификаты или хотя бы отдельные профили в OpenVPN.
На клиенте механическая часть короткая. Освободите и продлите аренду DHCP или попросите изменить адрес на сервере для резервирования. Не вписывайте случайный адрес, который выглядит свободным.
sudo dhclient -r eth0 && sudo dhclient eth0
ipconfig /release && ipconfig /renewЗатем проверьте с обоих концов, а не с одного. Подтвердите шлюз, затем сервис, который вам действительно нужен, после чего подключитесь заново и повторите. Если участвовали два устройства, проверьте оба: перенос одного адреса оставляет у другого устаревшие записи соседей или старую аренду, которая всплывёт позже.
Чего не делать по пути
Не заглушайте симптом. Обнаружение дублирующихся адресов — это то, что не даёт вам занять уже используемый адрес, и его отключение превращает видимый конфликт в периодическую потерю пакетов, которую гораздо труднее отследить. То же касается принятия предупреждения о сертификате от неожиданного хоста: это вообще не проблема адреса, и клик по нему скрывает другую неисправность.
Также не меняйте адресацию управляемой сети в одиночку. Запишите исходную настройку, спросите владельца, если адрес назначается централизованно, и держите изменение достаточно малым, чтобы его можно было откатить. Правила обнаружения конфликтов адресов RFC 5227 объясняют, что доказывает правильный зонд, и это стоит знать, прежде чем объявлять конфликт настоящим.