Dak hu, aħna se ngħidu l-istess lill-alla tal-kriptaġġ illum.
Hawnhekk se nitkellmu dwar mina IPv4 mhux kriptata, iżda mhux dwar waħda "bozza sħuna", iżda dwar waħda moderna "LED". U hemm ukoll sokits mhux maħduma jteptep hawn, u għaddej xogħol b'pakketti fl-ispazju tal-utent.
Hemm N protokolli ta' tunneling għal kull togħma u kulur:
Imma jien programmatur, għalhekk se nżid N biss bi frazzjoni, u nħalli l-iżvilupp ta 'protokolli reali lill-iżviluppaturi Kommersant.
F'wieħed mhux imwieled proġettDak li qed nagħmel issa huwa li nilħaq hosts wara NAT minn barra. Bl-użu ta 'protokolli bi kriptografija għall-adulti għal dan, ma stajtx inħawwad is-sensazzjoni li kienet qisha sparaws sparrows minn kanun. Għax il-mina hija użata fil-biċċa l-kbira biss biex toqob f'NAT-e, it-traffiku intern ġeneralment ikun ukoll encrypted, iżda xorta jegħrqu f'HTTPS.
Waqt ir-riċerka dwar diversi protokolli ta' tunneling, l-attenzjoni tal-perfezzjonista ta 'ġewwa tiegħi nġibdet l-IPIP għal darb'oħra minħabba l-overhead minimu tagħha. Iżda għandu żvantaġġ sinifikanti wieħed u nofs għall-kompiti tiegħi:
teħtieġ IPs pubbliċi fuq iż-żewġ naħat,
u l-ebda awtentikazzjoni għalik.
Għalhekk, il-perfezzjonista ġie misjuq lura fil-kantuniera mudlama tal-kranju, jew kull fejn joqgħod hemm.
U mbagħad jum wieħed, waqt li taqra artikli fuq mini appoġġjati nattivament fil-Linux iltqajt ma' FOU (Foo-over-UDP), i.e. tkun xi tkun, imgeżwer f'UDP. S'issa, IPIP u GUE (Inkapsulazzjoni Ġenerika UDP) biss huma appoġġjati.
“Hawn il-balal tal-fidda! IPIP sempliċi huwa biżżejjed għalija.” - Ħsibt.
Fil-fatt, il-bullet irriżulta li ma kienx kompletament fidda. L-inkapsulament f'UDP issolvi l-ewwel problema - tista 'tikkonnettja mal-klijenti wara NAT minn barra billi tuża konnessjoni stabbilita minn qabel, iżda hawn nofs l-iżvantaġġ li jmiss ta' IPIP jiffjorixxi f'dawl ġdid - kull min minn netwerk privat jista 'jinħeba wara l-viżibbli. IP pubbliku u port tal-klijent (fl-IPIP pur din il-problema ma teżistix).
Biex issolvi din il-problema waħda u nofs, twieldet l-utilità ipipou. Hija timplimenta mekkaniżmu magħmul mid-dar għall-awtentikazzjoni ta 'host remot, mingħajr ma jfixkel l-operat tal-kernel FOU, li se jipproċessa malajr u b'mod effiċjenti pakketti fl-ispazju tal-kernel.
M'għandniex bżonn l-iskript tiegħek!
Ok, jekk taf il-port pubbliku u l-IP tal-klijent (per eżempju, kulħadd warajh ma jmur imkien, NAT jipprova jimmappa portijiet 1-in-1), tista 'toħloq mina IPIP-over-FOU bil- kmandi li ġejjin, mingħajr ebda skripts.
fuq is-server:
# Подгрузить модуль ядра 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
fuq il-klijent:
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
fejn
ipipou* — isem l-interface tan-netwerk lokali tal-mina
encap-csum — għażla li żżid checksum UDP ma' pakketti UDP inkapsulati; jistgħu jiġu sostitwiti minn noencap-csum, biex ma nsemmux, l-integrità hija diġà kkontrollata mis-saff ta 'inkapsulament ta' barra (filwaqt li l-pakkett ikun ġewwa l-mina)
eth0 — interface lokali li magħha se tkun marbuta l-ipip tunnel
172.28.0.1 — IP tal-interface tal-mina tal-klijent (privata)
172.28.0.0 — Interfaċċja tas-server tal-mini IP (privata)
Sakemm il-konnessjoni UDP tkun ħajja, il-mina tkun f'kondizzjoni li taħdem, imma jekk tinkiser, tkun xortik tajba - jekk l-IP tal-klijent: port jibqa 'l-istess - se tgħix, jekk tinbidel - tinkiser.
L-eħfef mod biex iddawwar kollox lura huwa li tħott il-moduli tal-qalba: modprobe -r fou ipip
Anke jekk l-awtentikazzjoni mhix meħtieġa, l-IP pubbliku u l-port tal-klijent mhux dejjem ikunu magħrufa u ħafna drabi huma imprevedibbli jew varjabbli (skond it-tip NAT). Jekk tħalli barra encap-dport fuq in-naħa tas-server, il-mina mhux se taħdem, mhix intelliġenti biżżejjed biex tieħu l-port tal-konnessjoni remota. F'dan il-każ, ipipou jista 'jgħin ukoll, jew WireGuard u oħrajn bħalu jistgħu jgħinuk.
Kif taħdem?
Il-klijent (li normalment ikun wara NAT) jiftaħ mina (bħal fl-eżempju ta 'hawn fuq), u jibgħat pakkett ta' awtentikazzjoni lis-server sabiex jikkonfigura l-mina fuq in-naħa tiegħu. Skont is-settings, dan jista 'jkun pakkett vojt (biss biex is-server ikun jista' jara l-IP pubbliku: port ta 'konnessjoni), jew b'dejta li biha s-server jista' jidentifika l-klijent. Id-dejta tista' tkun passphrase sempliċi f'test ċar (jiġi f'moħħna l-analoġija ma' HTTP Basic Auth) jew data ddisinjata apposta ffirmata b'ċavetta privata (simili għal HTTP Digest Auth biss aktar b'saħħitha, ara l-funzjoni client_auth fil-kodiċi).
Fuq is-server (in-naħa bl-IP pubbliku), meta jibda ipipou, joħloq nfqueue queue handler u jikkonfigura netfilter sabiex il-pakketti meħtieġa jintbagħtu fejn għandhom ikunu: pakketti li inizjalizzaw il-konnessjoni mal-kju nfqueue, u [kważi] il-kumplament kollu jmur dritt għand is-semmiegħ FOU.
Għal dawk li mhumiex jafu, nfqueue (jew NetfilterQueue) hija ħaġa speċjali għad-dilettanti li ma jafux kif jiżviluppaw moduli tal-kernel, li bl-użu ta 'netfilter (nftables/iptables) jippermettilek li terġa' tidderieġi pakketti tan-netwerk għall-ispazju tal-utent u tipproċessahom hemmhekk billi tuża mezzi primittivi fil-idejn: immodifika (mhux obbligatorju) u agħtiha lura lill-qalba, jew armiha.
Għal xi lingwi ta 'programmar hemm rbit biex taħdem ma' nfqueue, għal bash ma kien hemm xejn (heh, mhux sorprendenti), kelli nuża python: ipipou juża NetfilterQueue.
Jekk il-prestazzjoni mhix kritika, billi tuża din il-ħaġa tista 'tagħmel relattivament malajr u faċilment il-loġika tiegħek stess biex taħdem ma' pakketti f'livell pjuttost baxx, pereżempju, toħloq protokolli ta 'trasferiment ta' data sperimentali, jew troll servizzi lokali u remoti b'imġieba mhux standard.
Is-sokits mhux maħduma jaħdmu id f'id ma 'nfqueue, pereżempju, meta l-mina tkun diġà kkonfigurata u FOU tkun qed tisma' fuq il-port mixtieq, ma tkunx tista' tibgħat pakkett mill-istess port bil-mod tas-soltu - huwa okkupat, iżda tista 'tieħu u tibgħat pakkett iġġenerat bl-addoċċ direttament lill-interface tan-netwerk billi tuża sokit mhux maħdum, għalkemm il-ġenerazzjoni ta' pakkett bħal dan se teħtieġ ftit aktar tbagħbis. Hekk jinħolqu pakketti bl-awtentikazzjoni f'ipipou.
Peress li ipipou tipproċessa biss l-ewwel pakketti mill-konnessjoni (u dawk li rnexxielhom jnixxu fil-kju qabel ma ġiet stabbilita l-konnessjoni), il-prestazzjoni kważi ma tbatix.
Hekk kif is-server ipipou jirċievi pakkett awtentikat, tinħoloq mina u l-pakketti sussegwenti kollha fil-konnessjoni huma diġà pproċessati mill-kernel li jinjora nfqueue. Jekk il-konnessjoni tonqos, allura l-ewwel pakkett ta 'dak li jmiss jintbagħat lill-kju nfqueue, skond is-settings, jekk ma jkunx pakkett bl-awtentikazzjoni, iżda mill-aħħar IP mfakkar u port tal-klijent, jista' jew jiġi mgħoddi fuq jew mormija. Jekk pakkett awtentikat jiġi minn IP u port ġodda, il-mina tiġi kkonfigurata mill-ġdid biex tużahom.
L-IPIP-over-FOU tas-soltu għandha problema oħra meta taħdem man-NAT - huwa impossibbli li jinħolqu żewġ mini IPIP inkapsulati f'UDP bl-istess IP, minħabba li l-moduli FOU u IPIP huma pjuttost iżolati minn xulxin. Dawk. par ta 'klijenti wara l-istess IP pubbliku ma jkunux jistgħu jgħaqqdu fl-istess ħin mal-istess server b'dan il-mod. Fil-futur, forsi, se tiġi solvuta fil-livell tal-qalba, iżda dan mhux ċert. Sadanittant, il-problemi tan-NAT jistgħu jiġu solvuti permezz tan-NAT - jekk jiġri li par ta' indirizzi IP huwa diġà okkupat minn mina oħra, ipipou se jagħmel NAT minn IP pubbliku għal IP privat alternattiv, voila! - tista' toħloq mini sakemm jispiċċaw il-portijiet.
Għax Mhux il-pakketti kollha fil-konnessjoni huma ffirmati, allura din il-protezzjoni sempliċi hija vulnerabbli għall-MITM, allura jekk ikun hemm villain lurking fuq il-mogħdija bejn il-klijent u s-server li jista 'jisma' t-traffiku u jimmanipulah, jista 'jidderieġi mill-ġdid pakketti awtentikati permezz indirizz ieħor u oħloq mina minn host mhux fdat.
Jekk xi ħadd għandu ideat dwar kif jirranġa dan filwaqt li jħalli l-biċċa l-kbira tat-traffiku fil-qalba, toqgħodx lura milli titkellem.
Mill-mod, l-inkapsulament fl-UDP wera ruħu tajjeb ħafna. Meta mqabbel ma 'inkapsulament fuq IP, huwa ħafna aktar stabbli u ħafna drabi aktar mgħaġġel minkejja l-overhead addizzjonali tal-header UDP. Dan huwa dovut għall-fatt li ħafna hosts fuq l-Internet jaħdmu tajjeb biss bit-tliet protokolli l-aktar popolari: TCP, UDP, ICMP. Il-parti tanġibbli tista' tarmi kompletament kull ħaġa oħra, jew tipproċessaha aktar bil-mod, minħabba li hija ottimizzata biss għal dawn it-tlieta.
Pereżempju, huwa għalhekk li QUICK, li fuqu huwa bbażat HTTP/3, inħoloq fuq UDP, u mhux fuq IP.
Ukoll, kliem biżżejjed, wasal iż-żmien biex tara kif taħdem fid-"dinja reali".
Battalja
Użat biex jimita d-dinja reali iperf3. F'termini tal-grad ta 'qrubija għar-realtà, dan huwa bejn wieħed u ieħor l-istess bħall-emulazzjoni tad-dinja reali f'Minecraft, iżda għalissa se tagħmel.
Parteċipanti fil-kompetizzjoni:
kanal ewlieni ta' referenza
l-eroj ta' dan l-artiklu huwa ipipou
OpenVPN b'awtentikazzjoni iżda mingħajr kriptaġġ
OpenVPN fil-mod li jinkludi kollox
WireGuard mingħajr PresharedKey, b'MTU=1440 (minn IPv4 biss)
Dejta teknika għal geeks Il-metriċi jittieħdu bil-kmandi li ġejjin:
fuq il-klijent:
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", чтобы лишние пакеты не плодить и не портить производительность.