Нишката за поддршка завршува со пресудата „симетричен NAT, VPN тука нема да работи“, а потоа клиентот се преинсталира три пати без причина. Етикетата прави штета затоа што одговара на прашање што никој не го поставил. Клиентот што се поврзува кон надвор со фиксен сервер создава пресликување во моментот кога го испраќа првиот пакет, а одговорот се пушта назад според правила што ги применува речиси секоја мрежа. Она што пресликувањето зависно од крајната точка навистина го усложнува се двајца соработници што се обидуваат да се стигнат истовремено, а тоа е друг тест.

Два прашања се кријат зад една етикета

Првото прашање е дали домаќин зад оваа мрежа може да отвори сесија кон позната јавна адреса и порт. За клиент на тунел тоа е вообичаениот случај, а одговорот е речиси секогаш да. Рутерот го запишува внатрешниот извор, доделува надворешен порт и го пропушта одговорот затоа што тој припаѓа на сесија што започнала одвнатре.

Второто прашање е дали два домаќина зад различни мрежи можат да најдат заедничка патека и да си праќаат без сервер во средината. Тоа зависи од тоа како секоја мрежа ги доделува тие надворешни портови, и тоа е единственото место каде однесувањето на пресликувањето е важно.

Мешањето на двете ја создава класичната погрешна дијагноза: функцијата меѓу соработници не успева, некој пушта тест за тип на NAT, ја гледа најлошата категорија и заклучува дека ни обичниот тунел не може да работи. Тунелот никогаш не бил она што не успеало.

Пресликувањето и филтрирањето се одделни својства

Терминологијата на RFC е попрецизна од имињата што ги користат добавувачите, и вреди да се пренесе во тикетот затоа што решава расправии. Пресликување е како се доделува надворешниот порт. Филтрирање е кои влезни пакети се пуштаат. Мрежата може да биде строга во едното и либерална во другото, и токму таа комбинација е она што протоколот меѓу соработници мора да го преживее.

BehaviourWhat it meansEffect on a direct peer path
Endpoint-independent mappingOne external port for every destinationDiscovery works if the port is advertised
Address-dependent mappingNew port per remote addressWorks only if both sides probe the same pair
Address-and-port-dependentNew port per remote address and portUsually needs a relay

Третиот ред е она што повеќето потрошувачки рутери и мобилни оператори го подразбираат под симетричен. Забележете дека етикетата го опишува само доделувањето. Мрежа со такво пресликување и либерално филтрирање сепак може да прима влезни пакети на портот што штотуку го доделила, и затоа дупчењето дупки успева кај некои, а не кај други.

Филтрирањето ги има своите три случаи и своето име за секој. Да напишете „симетричен NAT“ во тикет кога мислите на „филтрирање зависно од адреса и порт“ го испраќа следниот човек во погрешното поглавје од прирачникот. Двете се однесуваат различно на тест, така што грешката не е академска.

Измерете го пресликувањето наместо да го именувате

Доделениот порт можете да го набљудувате директно од страната на серверот на која било UDP услуга што ја контролирате. Започнете снимање на јавниот домаќин, испратете од клиентот и прочитајте го изворниот порт со кој пристигнал пакетот:

sudo tcpdump -ni eth0 -c 10 'udp port 51820'
sudo wg show wg0 endpoints
sudo conntrack -L -p udp --dport 51820

Редот на крајната точка е најкорисен од трите, затоа што WireGuard ја запишува последната адреса и порт што ги примил од секој соработник. Споредете го тој порт со оној за кој клиентот мисли дека го користи. Тие ќе се разликуваат секогаш кога се случува какво било преведување, и важното прашање е дали вредноста останува стабилна.

Повторете го набљудувањето кон втор целен порт или втор сервер и споредете повторно. Ако надворешниот порт се менува по цел, пресликувањето зависи од адреса и порт. Ако остане ист, мрежата ви дава едно пресликување и откривањето има шанса.

Алатките засновани на STUN ја пријавуваат истата класификација во еден чекор, и можат да се користат кога мрежата дозволува излезен UDP кон јавен STUN сервер. Кога не дозволува, горниот метод со снимање уште работи и не бара ништо друго освен домаќин што веќе го контролирате.

Изберете поправка што одговара на дефектот

Ако функцијата што не успева е меѓу соработници, поддржаните одговори се реле, услуга за средба до која можат да стигнат двајцата соработници, или друга топологија. TURN постои токму за ова, а производ што доставува свој реле ви кажува дека очекува некои мрежи да бидат непријателски.

Ако функцијата што не успева е обичен тунел, однесувањето на пресликувањето не е ваш проблем и ништо од горното не важи. Проверете дали клиентот навистина испраќа, дали серверот го гледа пакетот и дали одговорот се враќа. Таа секвенца се три набљудувања и не бара да се знае ништо за категоријата NAT на рутерот.

Она што не работи е растурање на промени на локалниот порт додека нешто не се поврзе. Менувањето на изворниот порт на клиентот не менува како мрежата доделува пресликувања. Случаен успех при петтиот обид е лажно позитивен и месеци ќе се цитира како решение.

Запишете ја архитектурата, не пресудата

Корисна белешка кажува кој протокол, во која насока започнува сесијата, дали има реле на патеката и што е забележано на жицата. „симетричен NAT, не работи“ е неупотребливо, затоа што истовремено е погрешно за тунелот и неинформативно за патеката на соработникот.

Вклучете ја измерената стабилност на портот и однесувањето на филтрирањето ако сте ги тестирале. Овие два факти му овозможуваат на некој друг да предвиди дали нова функција ќе работи на таа мрежа без да ја повторува целата истрага. Тие исто така стареат подобро од категорија на добавувач што на секоја страница за помош значи нешто малку поинакво.

На крајот, држете ја при рака терминологијата на RFC 4787 кога го пишувате тоа. Употребата на точните термини чини една реченица и го спречува следниот читател да ја повтори истата погрешна дијагноза, а тоа е целата смисла на пишувањето на белешката.

Поврзани статии