Симметриялы 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 негізіндегі құралдар сол жіктеуді бір қадамда хабарлайды және желі жария STUN серверіне шығыс UDP-ға рұқсат берсе, оларды қолдануға болады. Рұқсат бермесе, жоғарыдағы түсіру әдісі әлі жұмыс істейді және өзіңіз басқаратын хосттан басқа ештеңе қажет етпейді.
Ақауға сай түзетуді таңдаңыз
Егер сәтсіз функция теңдес функциясы болса, қолдау тапқан жауаптар — реле, екі теңдес те жете алатын кездесу қызметі немесе басқа топология. TURN дәл осы үшін бар, ал өз релесін ұсынатын өнім сізге кейбір желілердің дұшпандық болатынын күтетінін айтады.
Егер сәтсіз функция қарапайым туннель болса, кескіндеу мінез-құлқы сіздің мәселеңіз емес және жоғарыдағының ешқайсысы қолданылмайды. Клиент шынымен жіберіп жатқанын, сервер пакетті көріп жатқанын және жауап қайтатынын тексеріңіз. Бұл реттілік — үш бақылау және ол маршрутизатордың NAT санаты туралы ештеңе білуді талап етпейді.
Жұмыс істемейтіні — бірдеңе қосылғанша жергілікті порт өзгерістерін шашу. Клиенттің бастапқы портын өзгерту желінің кескіндеулерді қалай бөлетінін өзгертпейді. Бесінші әрекеттегі кездейсоқ табыс — жалған оң нәтиже, және ол айлар бойы шешім ретінде дәйексөзге алынады.
Үкімді емес, сәулетті жазыңыз
Пайдалы жазба қай протоколды, сессия қай бағытта басталатынын, жолда реле бар-жоғын және сымда не байқалғанын айтады. «симметриялы NAT, жұмыс істемейді» пайдасыз, өйткені ол бір уақытта туннель туралы қате және теңдес жолы туралы ақпаратсыз.
Егер сынаған болсаңыз, өлшенген порт тұрақтылығы мен сүзгілеу мінез-құлқын қосыңыз. Бұл екі факт басқа біреуге бүкіл тергеуді қайталамай-ақ жаңа функция сол желіде жұмыс істей ме деп болжауға мүмкіндік береді. Олар сондай-ақ әр анықтама бетінде сәл басқаша мағына беретін жеткізуші санатынан жақсырақ ескіреді.
Соңында, оны жазу кезінде RFC 4787 терминологиясын қолыңызда ұстаңыз. Дәл терминдерді қолдану бір сөйлемге тұрар, әрі келесі оқырманның сол қате диагнозды қайталауына жол бермейді, ал жазба жазудың бүкіл мағынасы осында.