ProHoster > blog > Utawala > Njia ya moja kwa moja ya VPN kati ya kompyuta kupitia NAT za mtoaji (bila VPS, kwa kutumia seva ya STUN na Yandex.disk)
Njia ya moja kwa moja ya VPN kati ya kompyuta kupitia NAT za mtoaji (bila VPS, kwa kutumia seva ya STUN na Yandex.disk)
Kuendeleza nakala kuhusu jinsi nilivyoweza kupanga handaki ya moja kwa moja ya VPN kati ya kompyuta mbili zilizo nyuma ya watoa huduma wa NAT. Nakala iliyotangulia ilielezea mchakato wa kupanga muunganisho kwa msaada wa mtu wa tatu - mpatanishi (VPS iliyokodishwa kama kitu kama seva ya STUN na kisambaza data cha nodi kwa unganisho). Katika makala hii nitakuambia jinsi nilivyoweza bila VPS, lakini waamuzi walibaki na walikuwa seva ya STUN na Yandex.Disk...
Utangulizi
Baada ya kusoma maoni ya chapisho lililopita, niligundua kuwa shida kuu ya utekelezaji ilikuwa matumizi ya mpatanishi - mtu wa tatu (VPS) ambaye alionyesha vigezo vya sasa vya node, wapi na jinsi ya kuunganishwa. Kwa kuzingatia mapendekezo ya kutumia STUN hii (ambazo zipo nyingi) kuamua vigezo vya uunganisho vya sasa. Kwanza kabisa, niliamua kutumia TCPDump kuangalia yaliyomo kwenye pakiti wakati seva ya STUN ilifanya kazi na wateja na kupokea maudhui yasiyoweza kusomeka kabisa. Kupitia itifaki niliyokutana nayo makala inayoelezea itifaki. Niligundua kuwa sikuweza kutekeleza ombi kwa seva ya STUN peke yangu na kuweka wazo katika "sanduku la mbali".
Nadharia
Hivi majuzi ilibidi nisakinishe seva ya STUN kwenye Debian kutoka kwa kifurushi
# apt install stun-server
na katika utegemezi niliona kifurushi cha mteja wa stun, lakini kwa namna fulani sikuizingatia. Lakini baadaye nilikumbuka juu ya kifurushi cha mteja mzuri na niliamua kujua jinsi inavyofanya kazi, baada ya kuvinjari na kutafuta katika Yandex nilipata:
Toleo la mteja wa STUN 0.97
Ilifunguliwa bandari 21234 na fd 3
Ilifunguliwa bandari 21235 na fd 4
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 0
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Umepokea ujumbe wa kushtukiza: baiti 92
MappedAddress = <IP Yangu>:2885
SourceAddress = 216.93.246.18:3478
Anwani Iliyobadilishwa = 216.93.246.17:3479
Sifa isiyojulikana: 32800
ServerName = Vovida.org 0.98-CPC
Ujumbe uliopokea wa aina 257 id=1
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 0
Karibu kutuma msg ya len 28 kwa 216.93.246.17:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 0
Karibu kutuma ujumbe wa len 28 kwa <IP Yangu>:2885
Umepokea ujumbe wa kushtukiza: baiti 28
BadilishaOmbi = 0
Ujumbe uliopokea wa aina 1 id=11
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 0
Karibu kutuma msg ya len 28 kwa 216.93.246.17:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Umepokea ujumbe wa kushtukiza: baiti 92
MappedAddress = <IP Yangu>:2885
SourceAddress = 216.93.246.17:3479
Anwani Iliyobadilishwa = 216.93.246.18:3478
Sifa isiyojulikana: 32800
ServerName = Vovida.org 0.98-CPC
Ujumbe uliopokea wa aina 257 id=10
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 4
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
Usimbaji ujumbe wa mshtuko:
Ombi la Kubadilisha Usimbaji: 2
Karibu kutuma msg ya len 28 kwa 216.93.246.18:3478
mtihani I = 1
mtihani II = 0
mtihani III = 0
mtihani I(2) = 1
ni nat = 1
IP iliyopangwa sawa = 1
nywele = 1
bandari ya hifadhi = 0
Msingi: Uchoraji Huru wa Ramani, Kichujio Kitegemezi Bandari, mlango wa nasibu, utabana nywele
Thamani ya kurejesha ni 0x000006
Kamba yenye thamani
MappedAddress = <IP Yangu>:2885
unachohitaji tu! Ilionyesha hali ya sasa ya muunganisho kwenye bandari ya ndani ya UDP 21234. Lakini hii ni nusu tu ya vita; swali liliibuka jinsi ya kuhamisha data hii kwa seva pangishi ya mbali na kuandaa muunganisho wa VPN. Kutumia itifaki ya barua, au labda Telegraph?! Kuna chaguo nyingi na niliamua kutumia Yandex.disk, tangu nilipokutana makala kuhusu kufanya kazi Curl kupitia WebDav na Yandex.disk. Baada ya kufikiria juu ya utekelezaji, nilikuja na mpango ufuatao:
Ishara kwamba nodes ziko tayari kuanzisha uunganisho kwa kuwepo kwa faili maalum na timestamp kwenye Yandex.disk;
Ikiwa nodes ziko tayari, kisha kupokea vigezo vya sasa kutoka kwa seva ya STUN;
Pakia mipangilio ya sasa kwa Yandex.disk;
Angalia uwepo na usome vigezo vya node ya mbali kutoka kwa faili kwenye Yandex.disk;
Kuanzisha muunganisho na seva pangishi ya mbali kwa kutumia OpenVPN.
Mazoezi
Baada ya kufikiria kidogo, kwa kuzingatia uzoefu wa makala ya mwisho, niliandika haraka script. Tutahitaji:
Nakili kwenye ubao wa kunakili na ubandike kwenye kihariri, kwa mfano:
# nano vpn10.sh
onyesha kuingia (mstari wa 2) na nenosiri la Yandex.disk (mstari wa 3).
taja anwani ya IP ya ndani ya handaki (mstari wa 4).
fanya hati itekelezwe:
# chmod +x vpn10.sh
endesha hati:
# ./vpn10.sh nZbVGBuX5dtturD
ambapo nZbVGBuX5dtturD ni kitambulisho cha muunganisho kilichotolewa hapa
Kwenye node ya mbali, fanya vivyo hivyo, taja anwani inayofanana ya IP ya ndani ya handaki na kitambulisho cha uunganisho.
Ili kuorodhesha hati inapowashwa, mimi hutumia amri "nohup /<path to the script>/vpn10.sh nZbVGBuX5dtturD > /var/log/vpn10.log 2>/dev/null &" iliyo kwenye faili /etc/ rc.ndani
Hitimisho
Hati inafanya kazi, iliyojaribiwa kwenye Ubuntu (18.04, 19.10, 20.04) na Debian 9. Unaweza kutumia huduma nyingine yoyote kama kisambazaji, lakini kwa uzoefu nilitumia Yandex.disk.
Wakati wa majaribio, iligunduliwa kuwa baadhi ya aina za watoa huduma za NAT haziruhusu kuanzisha muunganisho. Hasa kutoka kwa waendeshaji wa simu ambapo mito imezuiwa.
Ninapanga kuboresha katika suala la:
Uzalishaji wa kiotomatiki wa secret.key kila wakati unapoanza, simba kwa njia fiche na unakili kwa Yandex.disk ili uhamishe kwa nodi ya mbali (Kwa kuzingatia toleo lililosasishwa)
Ugawaji otomatiki wa anwani za IP za violesura
Inasimba data kabla ya kupakia kwenye Yandex.disk
Uboreshaji wa msimbo
Acha kuwe na IPv6 katika kila nyumba!
Imesasishwa! Faili za hivi punde na kifurushi cha DEB hapa - yandex.disk