Iyẹn tọ, a yoo sọ kanna si ọlọrun fifi ẹnọ kọ nkan loni.
Nibi a yoo sọrọ nipa oju eefin IPv4 ti a ko sọ di mimọ, ṣugbọn kii ṣe nipa “atupa gbona” kan, ṣugbọn nipa “LED” igbalode kan. Ati pe awọn iho aise tun wa ti nmọlẹ nibi, ati pe iṣẹ n lọ lọwọ pẹlu awọn apo-iwe ni aaye olumulo.
Awọn ilana N tunneling wa fun gbogbo itọwo ati awọ:
Ṣugbọn olutọpa ni mi, nitorinaa Emi yoo mu N pọ si nipasẹ ida kan, ati fi idagbasoke awọn ilana gidi silẹ si awọn olupilẹṣẹ Kommersant.
Ninu ọkan unborn ise agbeseOhun ti Mo n ṣe ni bayi ni lati de ọdọ awọn ọmọ-ogun lẹhin NAT lati ita. Lilo awọn ilana pẹlu cryptography agbalagba fun eyi, Emi ko le gbọn rilara pe o dabi titu ologoṣẹ lati inu ibọn kan. Nitori oju eefin ti wa ni lilo fun awọn ti julọ apakan nikan lati poki ihò ninu NAT-e, ti abẹnu ijabọ ti wa ni tun ti paroko, sugbon ti won si tun rì ninu HTTPS.
Lakoko ti o n ṣe iwadii ọpọlọpọ awọn ilana ilana tunneling, akiyesi pipe inu inu mi ni a fa si IPIP leralera nitori oke ti o kere ju. Ṣugbọn o ni awọn abawọn pataki kan ati idaji fun awọn iṣẹ ṣiṣe mi:
O nilo awọn IP ti gbogbo eniyan ni ẹgbẹ mejeeji,
ko si si ìfàṣẹsí fun o.
Nítorí náà, a ti lé ẹni pípé náà padà sí igun òkùnkùn ti agbárí, tàbí níbikíbi tí ó bá jókòó sí.
Ati lẹhinna ni ọjọ kan, lakoko kika awọn nkan lori tunnels atilẹyin abinibi ni Linux Mo wa kọja FOU (Foo-over-UDP), i.e. ohunkohun ti, we ni UDP. Nitorinaa, IPIP ati GUE (Generic UDP Encapsulation) nikan ni atilẹyin.
“Eyi ni ọta ibọn fadaka! IPIP ti o rọrun ti to fun mi. ” - Mo ro.
Ni otitọ, ọta ibọn naa jade lati jẹ fadaka patapata. Encapsulation ni UDP yanju iṣoro akọkọ - o le sopọ si awọn alabara lẹhin NAT lati ita ni lilo asopọ ti a ti fi idi mulẹ, ṣugbọn nibi idaji idapada atẹle ti awọn ododo IPIP ni ina tuntun - ẹnikẹni lati nẹtiwọọki aladani le tọju lẹhin ti o han. IP gbangba ati ibudo onibara (ni IPIP mimọ iṣoro yii ko si).
Lati yanju iṣoro ọkan ati idaji yii, a ti bi ohun elo naa ipipou. O ṣe imuse ẹrọ ti a ṣe ni ile fun ijẹrisi agbalejo latọna jijin, laisi idalọwọduro iṣẹ ti ekuro FOU, eyiti yoo ṣe ilana awọn apo-iwe ni iyara ati daradara ni aaye ekuro.
A ko nilo iwe afọwọkọ rẹ!
O dara, ti o ba mọ ibudo ita gbangba ati IP ti alabara (fun apẹẹrẹ, gbogbo eniyan lẹhin rẹ ko lọ nibikibi, NAT gbiyanju lati ya awọn ebute oko oju omi 1-in-1), o le ṣẹda eefin IPIP-over-FOU pẹlu atẹle awọn aṣẹ, laisi eyikeyi awọn iwe afọwọkọ.
lori olupin:
# Подгрузить модуль ядра 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
lori onibara:
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
nibi ti
ipipou* - orukọ ti agbegbe eefin nẹtiwọki ni wiwo
203.0.113.1 - olupin IP gbangba
198.51.100.2 - àkọsílẹ IP ti awọn ose
192.168.0.2 - ibara IP sọtọ si ni wiwo eth0
10001 - ibudo onibara agbegbe fun FOU
20001 - ibudo onibara gbangba fun FOU
10000 - ibudo olupin gbangba fun FOU
encap-csum - aṣayan lati ṣafikun sọwedowo UDP kan si awọn apo-iwe UDP ti o kun; le ti wa ni rọpo nipasẹ noencap-csum, Lai mẹnuba, iṣotitọ ti wa ni iṣakoso tẹlẹ nipasẹ Layer encapsulation ita (lakoko ti apo-iwe naa wa ninu eefin)
eth0 - wiwo agbegbe si eyiti oju eefin ipip yoo dè
172.28.0.1 - IP ti wiwo oju eefin alabara (ikọkọ)
172.28.0.0 - Ni wiwo olupin oju eefin IP (ikọkọ)
Niwọn igba ti asopọ UDP ba wa laaye, oju eefin yoo wa ni iṣẹ ṣiṣe, ṣugbọn ti o ba ṣẹ, iwọ yoo ni orire - ti IP alabara: ibudo naa wa kanna - yoo gbe, ti wọn ba yipada - yoo fọ.
Ọna to rọọrun lati yi ohun gbogbo pada ni lati ṣaiṣilẹ awọn modulu kernel: modprobe -r fou ipip
Paapa ti o ko ba nilo ijẹrisi, IP ati ibudo gbangba ti alabara ko nigbagbogbo mọ ati nigbagbogbo jẹ airotẹlẹ tabi oniyipada (da lori iru NAT). Ti o ba fi silẹ encap-dport ni ẹgbẹ olupin, oju eefin kii yoo ṣiṣẹ, ko ni oye to lati mu ibudo asopọ latọna jijin. Ni idi eyi, ipipou tun le ṣe iranlọwọ, tabi WireGuard ati awọn miiran bi o le ṣe iranlọwọ fun ọ.
Bawo ni o ṣiṣẹ?
Onibara (eyiti o maa n wa lẹhin NAT) ṣii eefin kan (bii ninu apẹẹrẹ loke), ati firanṣẹ apo-ẹri ijẹrisi si olupin naa ki o tunto oju eefin ni ẹgbẹ rẹ. Da lori awọn eto, eyi le jẹ sofo sofo (o kan ki olupin le rii IP ti gbogbo eniyan: ibudo asopọ), tabi pẹlu data nipasẹ eyiti olupin le ṣe idanimọ alabara. Awọn data le jẹ ọrọ igbaniwọle ti o rọrun ni ọrọ mimọ (afarawe pẹlu HTTP Ipilẹ Auth wa si ọkan) tabi data apẹrẹ pataki ti a fowo si pẹlu bọtini ikọkọ (bii HTTP Digest Auth nikan ni okun sii, wo iṣẹ client_auth ninu koodu).
Lori olupin naa (ẹgbẹ pẹlu IP ti gbogbo eniyan), nigbati ipipou bẹrẹ, o ṣẹda oluṣakoso isinyi nfqueue ati tunto netfilter ki a fi awọn apo-iwe pataki ranṣẹ nibiti wọn yẹ ki o jẹ: awọn apo-iwe ti o bẹrẹ asopọ si isinyi nfqueue, ati [fere] gbogbo awọn iyokù lọ taara si olutẹtisi FOU.
Fun awọn ti ko mọ, nfqueue (tabi NetfilterQueue) jẹ ohun pataki fun awọn ope ti ko mọ bi o ṣe le ṣe agbekalẹ awọn modulu kernel, eyiti lilo netfilter (nftables / iptables) gba ọ laaye lati ṣe atunṣe awọn apo-iwe nẹtiwọọki si aaye olumulo ati ṣe ilana wọn nibẹ ni lilo ọna atijo ni ọwọ: yipada (aṣayan) ki o si fun pada si ekuro, tabi sọ ọ silẹ.
Fun diẹ ninu awọn ede siseto awọn ifunmọ wa fun ṣiṣẹ pẹlu nfqueue, fun bash ko si ọkan (heh, kii ṣe iyalẹnu), Mo ni lati lo Python: awọn lilo ipipou NetfilterQueue.
Ti iṣẹ ṣiṣe ko ba ṣe pataki, ni lilo nkan yii o le ni iyara ati irọrun concoct ọgbọn ti ara rẹ fun ṣiṣẹ pẹlu awọn apo-iwe ni ipele kekere ti iṣẹtọ, fun apẹẹrẹ, ṣẹda awọn ilana gbigbe data esiperimenta, tabi troll agbegbe ati awọn iṣẹ latọna jijin pẹlu ihuwasi ti kii ṣe boṣewa.
Awọn ibọsẹ aise ṣiṣẹ ni ọwọ pẹlu nfqueue, fun apẹẹrẹ, nigbati oju eefin ba ti tunto tẹlẹ ati pe FOU n tẹtisi ibudo ti o fẹ, iwọ kii yoo ni anfani lati fi soso kan ranṣẹ lati ibudo kanna ni ọna deede - o nšišẹ, ṣugbọn o le mu ati firanṣẹ apo-iwe ti ipilẹṣẹ laileto taara si wiwo nẹtiwọọki nipa lilo iho aise, botilẹjẹpe ṣiṣẹda iru soso kan yoo nilo tinkering diẹ sii. Eyi ni bii awọn apo-iwe pẹlu ijẹrisi ṣe ṣẹda ni ipipou.
Niwọn igba ti awọn ilana ipipou nikan ni awọn apo-iwe akọkọ lati asopọ (ati awọn ti o ṣakoso lati jo sinu isinyi ṣaaju ki o to ṣeto asopọ), iṣẹ ṣiṣe fẹrẹ ko jiya.
Ni kete ti olupin ipipou gba apo-iwe ti o jẹri, oju eefin kan ti ṣẹda ati gbogbo awọn apo-iwe ti o tẹle ni asopọ ti ni ilọsiwaju tẹlẹ nipasẹ ekuro fori nfqueue. Ti asopọ ba kuna, lẹhinna soso akọkọ ti atẹle ni yoo firanṣẹ si isinyi nfqueue, da lori awọn eto, ti kii ṣe apo-iwe pẹlu ijẹrisi, ṣugbọn lati iranti IP ti o kẹhin ati ibudo alabara, o le boya kọja. lori tabi asonu. Ti apo-iwe ti o jẹri ba wa lati IP ati ibudo tuntun, oju eefin naa jẹ atunto lati lo wọn.
IPIP-over-FOU ti o ṣe deede ni iṣoro ọkan diẹ sii nigbati o ba n ṣiṣẹ pẹlu NAT - ko ṣee ṣe lati ṣẹda awọn tunnels IPIP meji ti a fi sinu UDP pẹlu IP kanna, nitori awọn modulu FOU ati IPIP ti ya sọtọ si ara wọn. Awon. bata ti awọn alabara lẹhin IP gbangba gbangba kanna kii yoo ni anfani lati sopọ si olupin kanna ni ọna yii. Ni ojo iwaju, ṣeeṣe, yoo yanju ni ipele kernel, ṣugbọn eyi ko daju. Lakoko, awọn iṣoro NAT le jẹ ipinnu nipasẹ NAT - ti o ba ṣẹlẹ pe bata ti awọn adirẹsi IP ti wa tẹlẹ nipasẹ oju eefin miiran, ipipou yoo ṣe NAT lati gbogbo eniyan si IP aladani yiyan, voila! - o le ṣẹda awọn tunnels titi ti awọn ebute oko yoo jade.
Nitori Kii ṣe gbogbo awọn apo-iwe ti o wa ninu asopọ ni o fowo si, lẹhinna aabo ti o rọrun yii jẹ ipalara si MITM, nitorinaa ti o ba jẹ pe villain kan wa lori ọna laarin alabara ati olupin ti o le tẹtisi ijabọ naa ki o ṣakoso rẹ, o le ṣe atunṣe awọn apo-iwe ti o jẹri nipasẹ adirẹsi miiran ki o ṣẹda oju eefin lati ọdọ agbalejo ti a ko gbẹkẹle.
Ti ẹnikẹni ba ni awọn imọran lori bi o ṣe le ṣatunṣe eyi lakoko ti o nlọ ọpọlọpọ awọn ijabọ ni mojuto, ma ṣe ṣiyemeji lati sọrọ soke.
Nipa ọna, encapsulation ni UDP ti fi ara rẹ han daradara. Ti a ṣe afiwe si fifin lori IP, o jẹ iduroṣinṣin diẹ sii ati nigbagbogbo yiyara laibikita afikun afikun ti akọsori UDP. Eyi jẹ nitori otitọ pe ọpọlọpọ awọn ogun lori Intanẹẹti ṣiṣẹ daradara nikan pẹlu awọn ilana olokiki mẹta: TCP, UDP, ICMP. Apakan ojulowo le sọ ohun gbogbo silẹ patapata, tabi ṣe ilana rẹ diẹ sii laiyara, nitori pe o jẹ iṣapeye nikan fun awọn mẹta wọnyi.
Fun apẹẹrẹ, eyi ni idi ti QUICK, lori eyiti HTTP / 3 da, ti ṣẹda lori oke UDP, kii ṣe lori oke IP.
Daradara, awọn ọrọ ti o to, o to akoko lati wo bi o ṣe n ṣiṣẹ ni "aye gidi".
Ogun
Ti a lo lati ṣe apẹẹrẹ aye gidi iperf3. Ni awọn ofin ti isunmọ isunmọ si otitọ, eyi jẹ isunmọ kanna bi iṣapẹẹrẹ aye gidi ni Minecraft, ṣugbọn fun bayi yoo ṣe.
Imọ data fun geeks Awọn wiwọn ni a mu pẹlu awọn aṣẹ wọnyi:
lori onibara:
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", чтобы лишние пакеты не плодить и не портить производительность.