Симетрични NAT и VPN: мерите пресликавање, а не етикету
Пресликавање зависно од крајње тачке утиче на откривање сарадника, а не на обичан тунел од клијента ка серверу. Измерите порт и затим користите реле ако директна путања не успе.
Ниска подршке завршава се пресудом „симетрични NAT, VPN овде неће радити“, а затим се клијент три пута без разлога поново инсталира. Етикета наноси штету јер одговара на питање које нико није поставио. Клијент који се повезује ка споља са фиксним сервером ствара пресликавање у тренутку када пошаље први пакет, а одговор се пушта назад по правилима која примењује скоро свака мрежа. Оно што пресликавање зависно од крајње тачке заиста компликује јесу два сарадника који покушавају да стигну један другог истовремено, а то је други тест.
Два питања се крију иза једне етикете
Прво питање је да ли домаћин иза ове мреже може да отвори сесију ка познатој јавној адреси и порту. За клијента тунела то је уобичајен случај, а одговор је скоро увек да. Рутер бележи унутрашњи извор, додељује спољни порт и пропушта одговор јер он припада сесији која је почела изнутра.
Друго питање је да ли два домаћина иза различитих мрежа могу да нађу заједничку путању и шаљу један другом без сервера у средини. То зависи од тога како свака мрежа додељује те спољне портове, и то је једино место где је понашање пресликавања важно.
Мешање двају ствара класичну погрешну дијагнозу: функција међу сарадницима не успева, неко покрене тест типа NAT, види најгору категорију и закључи да ни обичан тунел не може да ради. Тунел никада није био оно што није успело.
Пресликавање и филтрирање су одвојена својства
Терминологија RFC је прецизнија од имена која користе добављачи, и вреди је пренети у тикет јер решава расправе. Пресликавање је начин на који се додељује спољни порт. Филтрирање је то који се улазни пакети пропуштају. Мрежа може бити строга у једном и либерална у другом, и управо та комбинација је оно што протокол међу сарадницима мора да преживи.
| Behaviour | What it means | Effect on a direct peer path |
|---|---|---|
| Endpoint-independent mapping | One external port for every destination | Discovery works if the port is advertised |
| Address-dependent mapping | New port per remote address | Works only if both sides probe the same pair |
| Address-and-port-dependent | New port per remote address and port | Usually 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 када то пишете. Употреба прецизних термина кошта једну реченицу и спречава следећег читаоца да понови исту погрешну дијагнозу, а то је цео смисао писања белешке.