Интерфейс сіз қалаған атаулар кеңістігінде тізілген, қолданба оған байланған, бірақ туннель трафигі ешқашан көрінбейді. Бұл бір атаулар кеңістігінде жасалып, екіншісіне жылжытылған Linux ядросының WireGuard құрылғысының белгісі: интерфейс жылжыды, ал оның шифрланған UDP сокеті жылжымады. Ішкі трафик маңызды болмас бұрын екеуі де дұрыс жерде болуы керек. Тексеру жылдам, тек бір емес, екі контексті қарау керектігін білсеңіз болды.

Симптом: атаулар кеңістігі дұрыс, бірақ пакеттер жоқ

Атаулар кеңістігінің ішінде туннель сау көрінеді. Құрылғы бар, мекенжайлар тағайындалған және серіктес конфигурациясы қолжетімді. Сыртта күтілген UDP алмасу сіз бақылаған интерфейсте ешқашан көрінбейді, ал қарсы жақ қол алысу болмағанын хабарлайды.

Себебі қолданбаның ішкі пакеттері жылжытылған құрылғыға жетеді, ал құрылғы оларды басқа желілік контекстке тиесілі сокет арқылы жіберуге тырысады. Ол пайдаланатын негізгі маршрут және оған қолданылатын әрбір брандмауэр ережесі — құрылғы жасалған атаулар кеңістігіндегілер.

Бұл жылжытудағы ақау емес және серіктестің қате конфигурациясы да емес. Ядро іске асырылуы осылай жұмыс істейді, ал WireGuard үшін атаулар кеңістіктерінің құжаттамасы жасау ережесін тікелей сипаттайды.

Сокеттің неге туған жері бар

WireGuard құрылғысының шифрланған тасымалы үшін бір UDP сокеті болады және бұл сокет құрылғы жасалатын атаулар кеңістігінде ашылады. Интерфейсті байланыс бұйрығымен жылжыту көрінетін құрылғыны жылжытады, бірақ тасымалды басталған жерінде қалдырады. Сонда екі нысанның иелері әртүрлі болады.

Салдарды байқамау оңай, өйткені екі жарты әртүрлі жерде тексеріледі. Ішкі маршрут қолданба жұмыс істейтін атаулар кеңістігінде анықталады, ал сыртқы маршрут сокет тұратын жерде анықталады. Тек біреуін тексеру сенімді, бірақ қате қорытынды береді. Екеуін де тексеру әдетте тергеуді бір жүріспен аяқтайды.

Оны сокет қалаған жерде жасаңыз

Шешім — құрылғыны сыртта жасап жылжытудың орнына мақсатты атаулар кеңістігінің ішінде жасау. Бекітілген атаулар кеңістігі әлдеқашан бар және атау пайдаланылмаған деп есептейік:

ip netns exec vpn-apps ip link add wg-demo type wireguard
ip netns exec vpn-apps wg show

Енді интерфейс те, оның сокеті де осы контекстке тиесілі, сондықтан негізгі маршрут пен қолданылатын сүзгі ережелері сол жерде конфигурацияланғандар. Егер дизайн ашық жақты басқа жерде қажет етсе, алдымен негізгі интерфейсті атаулар кеңістігіне қойып, содан кейін туннель жасаңыз. Тәртіп дизайнның бөлігі, іске асыру бөлшегі емес.

Оларды желілік әкімшілігі командалары ретінде қарастырыңыз, рецепт ретінде емес. Олар құрылғы жасап, күйді көрсетеді; кілттер, серіктестер, мекенжайлар мен маршруттар әлі де бекітілген конфигурациядан келуі керек, ал қолданыстағы өндірістік интерфейсті мысалға ешқашан қоюға болмайды.

Жолдың екі жағын да оқыңыз

Құрылғы дұрыс жерде болған соң, екі шешімді бөлек тексеріңіз. Қолданба контекстінен ішкі іздеуден бастаңыз, содан кейін сокетке ие контекстен сыртқы жолды тексеріңіз:

ip netns exec vpn-apps ip route get 10.30.0.9
ip netns exec vpn-apps wg show
tcpdump -ni any udp port 51820

Егер ішкі іздеу туннель арқылы шешілсе және сыртқы жазу шифрланған алмасуды көрсетсе, екі жарты да сәйкеседі. Егер жазу бос болса, сокет әлі басқа жерде, немесе оның атаулар кеңістігіндегі негізгі маршрут соңғы нүктеге жетпейді.

Жазуға тағы бір тексеру кіреді: құрылғы қайта жүктеуден кейін қалай жасалады. Интерфейсті басқа жасау контекстімен қайта жасайтын менеджер сокеттің туған жерін өзгертеді. Бір рет істеген қолмен жылжыту басқарылатын жол туралы дәлел емес.

Қатысты мақалалар