WireGuard katika nafasi ya majina ya mtandao: kwa nini soketi ilibaki nyuma
Kuhamisha kiolesura hakuhamishi soketi ya UDP iliyosimbwa, ambayo inabaki katika nafasi ya majina ambapo kifaa kiliundwa. Kiunde katika lengo badala yake.
Kiolesura kimeorodheshwa katika nafasi ya majina uliyotaka, programu imefungwa nayo, na bado trafiki ya handaki haionekani kamwe. Hii ni alama ya kifaa cha WireGuard katika kiini cha Linux kilichoundwa katika nafasi moja ya majina na kuhamishiwa nyingine: kiolesura kilihamia na soketi yake ya UDP iliyosimbwa haikuhamia. Vyote viwili vinapaswa kuwa mahali pazuri kabla trafiki ya ndani kuwa na maana. Ukaguzi ni wa haraka mara tu unapojua kwamba unapaswa kuangalia miktadha miwili badala ya mmoja.
Dalili: nafasi sahihi ya majina, lakini hakuna pakiti
Ndani ya nafasi ya majina, handaki linaonekana kuwa na afya. Kifaa kipo, anwani zimetengwa, na usanidi wa mwenza upo. Nje, ubadilishanaji wa UDP unaotarajiwa hauonekani kamwe kwenye kiolesura ulichokuwa ukifuatilia, na upande wa pili unaripoti kwamba hakukuwa na kupeana mkono.
Sababu ni kwamba pakiti za ndani za programu zinagusa kifaa kilichohamishwa, na kifaa kinajaribu kuzituma kupitia soketi ambayo ni ya muktadha mwingine wa mtandao. Njia ya msingi inayotumia, na kila kanuni ya firewall inayotumika kwayo, ni zile zilizo katika nafasi ya majina ambapo kifaa kiliundwa.
Hii si kasoro katika kuhamisha na si usanidi mbaya wa mwenza. Utekelezaji wa kiini hufanya hivyo, na nyaraka za nafasi za majina za WireGuard zinaeleza kanuni ya uundaji moja kwa moja.
Kwa nini soketi ina mahali pa kuzaliwa
Kifaa cha WireGuard kinamiliki soketi moja ya UDP kwa usafirishaji wake uliosimbwa, na soketi hiyo hufunguliwa katika nafasi ya majina ambapo kifaa huundwa. Kuhamisha kiolesura kwa amri ya kiungo huhamisha kifaa kinachoonekana lakini huacha usafirishaji mahali palipoanzia. Wakati huo vitu viwili vina wamiliki tofauti.
Matokeo ni rahisi kukosa kwa sababu nusu mbili huchunguzwa mahali tofauti. Njia ya ndani huamuliwa katika nafasi ya majina ambapo programu inaendesha, na njia ya nje huamuliwa mahali soketi inapoishi. Kuchunguza moja tu huleta hitimisho la kujiamini lakini lisilo sahihi. Kuchunguza zote mbili kwa kawaida humaliza uchunguzi katika mzunguko mmoja.
Kiunde mahali unapotaka soketi
Suluhisho ni kuunda kifaa ndani ya nafasi ya majina lengwa badala ya kukiunda nje na kukihamisha. Kwa kudhani nafasi ya majina iliyoidhinishwa ipo tayari na jina halitumiki:
ip netns exec vpn-apps ip link add wg-demo type wireguard
ip netns exec vpn-apps wg show
Sasa kiolesura na soketi yake vyote ni vya muktadha huo, kwa hiyo njia ya msingi na kanuni za uchujaji zinazotumika ni zile zilizosanidiwa hapo. Ikiwa muundo unahitaji upande wazi mahali pengine, weka kwanza kiolesura cha msingi katika nafasi ya majina kisha uunde handaki. Mpangilio ni sehemu ya muundo, si maelezo ya utekelezaji.
Vichukulie kama amri za utawala wa mtandao, si kichocheo. Huunda kifaa na kuonyesha hali; funguo, wenzi, anwani na njia bado zinapaswa kutoka kwa usanidi ulioidhinishwa, na kiolesura cha uzalishaji kilichopo hakipaswi kubadilishwa katika mfano.
Soma pande mbili za njia
Kifaa kikiwa mahali pazuri, thibitisha maamuzi mawili kwa nyakati tofauti. Anza na utafutaji wa ndani kutoka muktadha wa programu, kisha angalia njia ya nje kutoka muktadha unaomiliki soketi:
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
Ikiwa utafutaji wa ndani unatatuliwa kupitia handaki na nakala ya nje inaonyesha ubadilishanaji uliosimbwa, nusu mbili zinakubalina. Ikiwa nakala ni tupu, soketi bado iko mahali pengine, au njia ya msingi katika nafasi yake ya majina haifikii hatua ya mwisho.
Ukaguzi mmoja zaidi unapaswa kuwa kwenye rekodi: jinsi kifaa kinavyoundwa baada ya kuwasha upya. Msimamizi anayeunda upya kiolesura kwa muktadha mwingine wa uundaji hubadilisha mahali pa kuzaliwa pa soketi. Uhamishaji wa mkono uliofanikiwa mara moja si ushahidi kuhusu njia inayosimamiwa.