Laakiin waxaan ahay barnaamij-sameeyaha, sidaas darteed waxaan ku kordhin doonaa N kaliya jajab, oo ka tago horumarinta borotokoolka dhabta ah ee Kommersant.
Mid aan dhalan mashruucWaxa aan hadda sameynayaa waa in aan gaaro martigaliyayaasha ka dambeeya NAT dibadda. Isticmaalka borotokoolka qarsoodiga dadka waaweyn tan, ma aan ruxin karin dareenka ah in ay la mid tahay ka toogashada shimbiraha oo kale. Sababtoo ah tunnel-ka waxaa loo isticmaalaa inta badan kaliya in godadka NAT-e lagu dhufto, taraafikada gudaha sidoo kale badanaa waa la sifeeyaa, laakiin wali waxay ku hafanayaan HTTPS.
Markii aan baarayay hab-maamuusyada tunnel-ka ee kala duwan, dareenka dhammaystiran ee gudahayga ayaa soo jiitay IPIP marar badan iyadoo ay ugu wacan tahay sareynta ugu yar. Laakiin waxa ay hal iyo badh ku leedahay dib-u-dhacyo muhiim ah hawlahayga:
waxay u baahan tahay IP-yada guud ee labada dhinac,
oo aan laguu aqoonsanayn.
Sidaa darteed, kaamilnimada ayaa dib loogu celiyay geeska mugdiga ah ee madaxa, ama meel kasta oo uu fadhiyo.
Ka dibna maalin maalmaha ka mid ah, adigoo akhrinaya maqaallo ku saabsan tunnel-ka wadaniga ah ee taageera Linux waxaan kula kulmay FOU (Foo-over-UDP), i.e. wax kasta, oo ku duudduubay UDP. Ilaa hadda, kaliya IPIP iyo GUE (Generic UDP Encapsulation) ayaa la taageeray.
Waa kan xabbaddii qalinka ahayd! IPIP fudud ayaa igu filan." - Waxaan u maleeyay.
Dhab ahaantii, rasaastu waxay noqotay mid aan gebi ahaanba lacag ahayn. Ku-soo-ururinta UDP waxay xallisaa dhibaatada ugu horreysa - waxaad ku xiri kartaa macaamiisha ka dambeeya NAT dibadda adoo isticmaalaya xiriir horay loo aasaasay, laakiin halkan kala badh ka mid ah cilladda soo socota ee IPIP waxay u muuqataa iftiin cusub - qof kasta oo ka socda shabakad gaar ah ayaa qarin kara gadaashiisa muuqda. IP-ga guud iyo dekedda macmiilka (IPIP saafi ah dhibaatadani ma jirto).
Si loo xalliyo dhibaatadan hal iyo badh, utility ayaa dhashay ippou. Waxay fulisaa hab-guri lagu sameeyay oo lagu xaqiijinayo martigeliyaha fog, iyada oo aan la carqaladayn hawlgalka kernel FOU, kaas oo si dhakhso ah oo hufan uga baaraandegi doona baakadaha booska kernel-ka.
# Подгрузить модуль ядра FOU
modprobe fou
# Создать IPIP туннель с инкапсуляцией в FOU.
# Модуль ipip подгрузится автоматически.
ip link add name ipipou0 type ipip
remote 198.51.100.2 local 203.0.113.1
encap fou encap-sport 10000 encap-dport 20001
mode ipip dev eth0
# Добавить порт на котором будет слушать FOU для этого туннеля
ip fou add port 10000 ipproto 4 local 203.0.113.1 dev eth0
# Назначить IP адрес туннелю
ip address add 172.28.0.0 peer 172.28.0.1 dev ipipou0
# Поднять туннель
ip link set ipipou0 up
dhanka macmiilka:
modprobe fou
ip link add name ipipou1 type ipip
remote 203.0.113.1 local 192.168.0.2
encap fou encap-sport 10001 encap-dport 10000 encap-csum
mode ipip dev eth0
# Опции local, peer, peer_port, dev могут не поддерживаться старыми ядрами, можно их опустить.
# peer и peer_port используются для создания соединения сразу при создании FOU-listener-а.
ip fou add port 10001 ipproto 4 local 192.168.0.2 peer 203.0.113.1 peer_port 10000 dev eth0
ip address add 172.28.0.1 peer 172.28.0.0 dev ipipou1
ip link set ipipou1 up
192.168.0.2 - macmiilka IP loo qoondeeyey interface eth0
10001 - dekedda macmiilka maxalliga ah ee FOU
20001 - Dekedda macmiilka dadweynaha ee FOU
10000 - Dekadda server-ka dadweynaha ee FOU
encap-csum - ikhtiyaarka lagu daro jeegga UDP baakadaha UDP ee la duubay; waxaa lagu bedeli karaa noencap-csum, iyada oo aan la xusin, daacadnimada waxaa horeyba u xukumay lakabka daboolka dibadda (inta baakidhku ku jiro gudaha tunnelka)
Ilaa inta xiriirka UDP uu nool yahay, tunnelku wuxuu ahaan doonaa mid shaqeynaya, laakiin haddii uu jabo, waxaad yeelan doontaa nasiib - haddii IP-ga macmiilka: dekeddu ay sii ahaanayso - way noolaan doontaa, haddii ay isbeddelaan - way jebi doontaa.
Habka ugu fudud ee wax walba dib loogu celin karo waa in la dejiyo cutubyada kernel-ka: modprobe -r fou ipip
Xitaa haddii aan aqoonsiga loo baahnayn, IP-ga guud ee macmiilka iyo dekeddu mar walba lama yaqaan oo inta badan lama saadaalin karo ama waa doorsoomayaal (waxay kuxirantahay nooca NAT). Haddii aad ka tagto encap-dport dhinaca server-ka, tunnelku ma shaqayn doono, ma aha caqli ku filan in la qaato dekedda isku xirka fog. Xaaladdan oo kale, ipipou sidoo kale way ku caawin kartaa, ama WireGuard iyo kuwa kale oo la mid ah ayaa ku caawin kara.
Sidee u shaqeeyaan?
Macmiilka (oo inta badan ka dambeeya NAT) wuxuu furay tunnel (sida tusaalaha kore), wuxuuna u soo diraa xirmo aqoonsiga server-ka si uu u habeeyo tunnelka dhinaciisa. Iyada oo ku xidhan goobaha, tani waxay noqon kartaa baakidh madhan (kaliya si uu adeeguhu u arko IP-ga guud: dekedda xidhiidhka), ama xogta uu serverku ku aqoonsan karo macmiilka. Xogtu waxay noqon kartaa jumlad sir ah oo fudud oo qoraal cad ah (maskaxda ku haysa HTTP Basic Auth) ama xog si gaar ah loo nashqadeeyay oo lagu saxeexay fure gaar ah (oo la mid ah HTTP Digest Auth oo ka xoog badan, eeg shaqada client_auth in code).
Dhinaca server-ka (dhinaca IP-ga dadweynaha), marka ipipou bilaabo, waxay abuurtaa nfqueue queue-ga waxayna dejisaa netfilter si xirmooyinka lagama maarmaanka ah loo diro halka ay tahay: xirmooyinka bilowga xiriirka safka nfqueue, iyo [ku dhowaad] inta soo hartay oo dhami waxay toos u aadayaan dhagaystaha FOU.
Kuwa aan aqoonta u lahayn, nfqueue (ama NetfilterQueue) waa shay gaar ah oo loogu talagalay hiwaayadda kuwaas oo aan garanayn sida loo horumariyo qaybaha kernel, kuwaas oo isticmaalaya netfilter (nftables / iptables) waxay kuu ogolaaneysaa inaad u wareejiso xirmooyinka shabakada ee booska isticmaalaha oo aad ku socodsiiso adigoo isticmaalaya Macnaha aasaasiga ah ee gacanta: wax ka beddel (ikhtiyaar) oo ku celi kernel-ka, ama iska tuur.
Qaar ka mid ah luqadaha barnaamijyada waxaa jira xiritaanno lagu shaqeynayo nfqueue, bash ma jirin (heh, la yaab ma leh), waa inaan isticmaalo python: ipipou wuxuu isticmaalaa NetfilterQueue.
Haddii wax qabadku aanu ahayn mid muhiim ah, adoo isticmaalaya shaygan waxaad si dhakhso ah oo fudud u qabsan kartaa caqligaaga ku shaqaynta baakadaha heer aad u hooseeya, tusaale ahaan, samee borotokoolka wareejinta xogta tijaabada ah, ama ku wareeji adeegyada maxaliga ah iyo kuwa fog ee leh dabeecad aan caadi ahayn.
Saldhigyada cayriin waxay gacanta ku hayaan nfqueue, tusaale ahaan, marka tunnel-ka horay loo habeeyay oo FOU ay ku dhegeysanayso dekedda la rabo, ma awoodi doontid inaad baakidh ka soo dirto isla deked la mid ah habka caadiga ah - waa mashquul, laakiin Waxaad qaadan kartaa oo aad si toos ah ugu diri kartaa baakidh si bakhtiyaan ah loo soo saaray is-dhexgalka shabakada adoo isticmaalaya godad cayriin ah, inkasta oo soo saarista baakidhkaas ay u baahan doonto in yar oo tinkering ah. Tani waa sida baakadaha aqoonsiga lagu abuuray ipipou.
Maaddaama ipipou ay ka shaqeyso kaliya xirmooyinka ugu horreeya ee isku xirka (iyo kuwa u suurtagashay in ay ku daataan safka ka hor inta aan la dhisin), waxqabadka ku dhawaad ma dhibtoonayo.
Sida ugu dhakhsaha badan server-ka ipipou uu helo baakidh la xaqiijiyay, tunnel ayaa la abuurayaa oo dhammaan baakadaha xiga ee xidhiidhka waxa mar hore ka baaraandegay kernel-ka dhaafa nfqueue. Haddii xiriirku xumaado, markaa baakidhka ugu horreeya ee kan soo socda ayaa loo diri doonaa safka nfqueue, iyadoo kuxiran goobaha, haddii aysan ahayn baakidh leh aqoonsi, laakiin laga soo bilaabo IP-ga ugu dambeeya ee xusuusta iyo dekedda macmiilka, midkoodna waa la gudbi karaa. saaran ama la tuuro. Haddii baakidh la xaqiijiyay uu ka yimid IP iyo deked cusub, tunnelka ayaa dib loo habeeyey si loo isticmaalo.
IPIP-over-FOU-ga caadiga ah waxay leedahay hal dhibaato oo kale marka la shaqeynayo NAT - macquul maaha in la abuuro laba tunnel IPIP oo ku xiran UDP oo leh IP isku mid ah, sababtoo ah qaybaha FOU iyo IPIP ayaa midba midka kale ka go'doonsan. Kuwaas. Labada macaamiil ee ka dambeeya isla IP-ga guud ma awoodi doonaan inay isku mar ku xidhmaan server isku mid ah habkan. Mustaqbalka, suurtagal ahaan, waxaa lagu xallin doonaa heerka kernel-ka, laakiin tani lama hubo. Dhanka kale, dhibaatooyinka NAT waxaa lagu xallin karaa NAT - haddii ay dhacdo in labo cinwaan oo IP ah ay horey u qabsadeen tunnel kale, ipipou waxay NAT ka samayn doontaa dadweynaha ilaa IP kale oo gaar ah, voila! - waxaad samayn kartaa tunnels ilaa ay dekeduhu ka dhammaadaan.
Sababtoo ah Dhammaan xirmooyinka xiriirka lama saxiixin, markaa ilaalintan fudud ayaa u nugul MITM, markaa haddii uu jiro qof xun oo ku dhuumanaya jidka u dhexeeya macmiilka iyo server-ka kaas oo dhagaysan kara taraafikada oo uu maamuli karo, wuxuu u wareejin karaa baakadaha la xaqiijiyay iyada oo loo marayo ciwaan kale oo tunnel ka samee martigeliyaha aan la aamini karin .
Haddii qof uu haysto fikrado ku saabsan sida tan loo hagaajiyo marka uu ka tago inta badan taraafikada xudunta, ha ka waaban inaad hadasho.
Jid ahaan, isku-duubnida UDP ayaa si fiican isu cadeeysay. Marka la barbar dhigo ku-kordhinta IP-ga, aad bay u xasiloon tahay oo inta badan way dhakhso badan tahay inkasta oo dheeraadka ah ee ka sarreeya madaxa UDP. Tani waxay sabab u tahay xaqiiqda ah in inta badan martigeliyayaasha internetka ay si fiican ugu shaqeeyaan kaliya saddexda borotokool ee ugu caansan: TCP, UDP, ICMP. Qaybta la taaban karo waxay si buuxda u tuuri kartaa wax kasta oo kale, ama waxay u socodsiin kartaa si tartiib tartiib ah, sababtoo ah waxaa loo hagaajiyay kaliya saddexdan.
Tusaale ahaan, tani waa sababta degdegga ah, ee HTTP / 3 ku salaysan, loo abuuray dusha sare ee UDP, oo aan dusha sare ee IP.
Waa hagaag, ereyo ku filan, waa waqtigii la arki lahaa sida ay u shaqeyso "adduunka dhabta ah".
Dagaal
Loo isticmaalo in lagu daydo adduunka dhabta ah iperf3. Marka la eego heerka u dhowaanshaha xaqiiqada, tani waxay la mid tahay ku dayashada adduunka dhabta ah ee Minecraft, laakiin hadda way sameyn doontaa.
Ka qaybgalayaasha tartanka:
kanaalka weyn ee tixraaca
geesiga maqaalkan waa ipipou
Fur VPN oo leh aqoonsi laakiin aan sir lahayn
Ku fur VPN qaab loo dhan yahay
WireGuard aan lahayn PresharedKey, oo wata MTU=1440 (tan iyo IPV4-kaliya)
Xogta farsamada ee geeks Qiyaasta waxaa lagu qaadaa amarada soo socda:
dhanka macmiilka:
UDP
CPULOG=NAME.udp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -c SERVER_IP -4 -t 60 -f m -i 10 -B LOCAL_IP -P 2 -u -b 12M; tail -1 "$CPULOG"
# Где "-b 12M" это пропускная способность основного канала, делённая на число потоков "-P", чтобы лишние пакеты не плодить и не портить производительность.