Всяко от тези съобщения звучи еднакво и означава нещо различно: лаптопът се оплаква от конфликт на адреси, но само понякога и най-вече докато 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 за откриване на конфликти на адреси обясняват какво доказва правилната проверка и това си струва да се знае, преди да наречете конфликта истински.

Подобни статии