Виправлення конфлікту локальної 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 пояснюють, що доводить правильний зонд, і це варто знати, перш ніж оголосити конфлікт справжнім.