ipipou: diẹ sii ju oju eefin ti a ko paro lọ

Kini a nwi fun Olorun IPv6?

ipipou: diẹ sii ju oju eefin ti a ko paro lọ
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ọ:

  • aṣa, asiko, odo WireGuard
  • multifunctional, bi awọn ọbẹ Swiss, OpenVPN ati SSH
  • atijọ ati ki o ko buburu GRE
  • awọn julọ o rọrun, sare, patapata unencrypted IPIP
  • actively sese GENEVA
  • ọpọlọpọ awọn miiran.

Ṣ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.

Awọn olukopa ninu idije:

  • ikanni akọkọ itọkasi
  • akoni ti yi article ni ipipou
  • ṢiiVPN pẹlu ijẹrisi ṣugbọn ko si fifi ẹnọ kọ nkan
  • ṢiiVPN ni ipo akojọpọ gbogbo
  • WireGuard laisi PresharedKey, pẹlu MTU=1440 (lati IPv4-nikan)

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", чтобы лишние пакеты не плодить и не портить производительность.

TCP

CPULOG=NAME.tcp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -c SERVER_IP -4 -t 60 -f m -i 10 -B LOCAL_IP -P 2; tail -1 "$CPULOG"

ICMP idaduro

ping -c 10 SERVER_IP | tail -1

lori olupin (ṣiṣẹ ni nigbakannaa pẹlu alabara):

UDP

CPULOG=NAME.udp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -s -i 10 -f m -1; tail -1 "$CPULOG"

TCP

CPULOG=NAME.tcp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -s -i 10 -f m -1; tail -1 "$CPULOG"

Eefin iṣeto ni

ipipou
olupin
/etc/ipipou/server.conf:

server
number 0
fou-dev eth0
fou-local-port 10000
tunl-ip 172.28.0.0
auth-remote-pubkey-b64 eQYNhD/Xwl6Zaq+z3QXDzNI77x8CEKqY1n5kt9bKeEI=
auth-secret topsecret
auth-lifetime 3600
reply-on-auth-ok
verb 3

systemctl start ipipou@server

alabara
/etc/ipipou/client.conf:

client
number 0
fou-local @eth0
fou-remote SERVER_IP:10000
tunl-ip 172.28.0.1
# pubkey of auth-key-b64: eQYNhD/Xwl6Zaq+z3QXDzNI77x8CEKqY1n5kt9bKeEI=
auth-key-b64 RuBZkT23na2Q4QH1xfmZCfRgSgPt5s362UPAFbecTso=
auth-secret topsecret
keepalive 27
verb 3

systemctl start ipipou@client

openvpn (ko si fifi ẹnọ kọ nkan, pẹlu ijẹrisi)
olupin

openvpn --genkey --secret ovpn.key  # Затем надо передать ovpn.key клиенту
openvpn --dev tun1 --local SERVER_IP --port 2000 --ifconfig 172.16.17.1 172.16.17.2 --cipher none --auth SHA1 --ncp-disable --secret ovpn.key

alabara

openvpn --dev tun1 --local LOCAL_IP --remote SERVER_IP --port 2000 --ifconfig 172.16.17.2 172.16.17.1 --cipher none --auth SHA1 --ncp-disable --secret ovpn.key

openvpn (pẹlu ìsekóòdù, ìfàṣẹsí, nipasẹ UDP, ohun gbogbo bi o ti ṣe yẹ)
Tunto nipa lilo openvpn-ṣakoso

onina
olupin
/etc/wireguard/server.conf:

[Interface]
Address=172.31.192.1/18
ListenPort=51820
PrivateKey=aMAG31yjt85zsVC5hn5jMskuFdF8C/LFSRYnhRGSKUQ=
MTU=1440

[Peer]
PublicKey=LyhhEIjVQPVmr/sJNdSRqTjxibsfDZ15sDuhvAQ3hVM=
AllowedIPs=172.31.192.2/32

systemctl start wg-quick@server

alabara
/etc/wireguard/client.conf:

[Interface]
Address=172.31.192.2/18
PrivateKey=uCluH7q2Hip5lLRSsVHc38nGKUGpZIUwGO/7k+6Ye3I=
MTU=1440

[Peer]
PublicKey=DjJRmGvhl6DWuSf1fldxNRBvqa701c0Sc7OpRr4gPXk=
AllowedIPs=172.31.192.1/32
Endpoint=SERVER_IP:51820

systemctl start wg-quick@client

Результаты

Ọririn ilosiwaju ami
Ẹru Sipiyu olupin kii ṣe itọkasi pupọ, nitori… Ọpọlọpọ awọn iṣẹ miiran wa nibẹ, nigbami wọn jẹ awọn orisun:

proto bandwidth[Mbps] CPU_idle_client[%] CPU_idle_server[%]
# 20 Mbps канал с микрокомпьютера (4 core) до VPS (1 core) через Атлантику
# pure
UDP 20.4      99.80 93.34
TCP 19.2      99.67 96.68
ICMP latency min/avg/max/mdev = 198.838/198.997/199.360/0.372 ms
# ipipou
UDP 19.8      98.45 99.47
TCP 18.8      99.56 96.75
ICMP latency min/avg/max/mdev = 199.562/208.919/220.222/7.905 ms
# openvpn0 (auth only, no encryption)
UDP 19.3      99.89 72.90
TCP 16.1      95.95 88.46
ICMP latency min/avg/max/mdev = 191.631/193.538/198.724/2.520 ms
# openvpn (full encryption, auth, etc)
UDP 19.6      99.75 72.35
TCP 17.0      94.47 87.99
ICMP latency min/avg/max/mdev = 202.168/202.377/202.900/0.451 ms
# wireguard
UDP 19.3      91.60 94.78
TCP 17.2      96.76 92.87
ICMP latency min/avg/max/mdev = 217.925/223.601/230.696/3.266 ms

## около-1Gbps канал между VPS Европы и США (1 core)
# pure
UDP 729      73.40 39.93
TCP 363      96.95 90.40
ICMP latency min/avg/max/mdev = 106.867/106.994/107.126/0.066 ms
# ipipou
UDP 714      63.10 23.53
TCP 431      95.65 64.56
ICMP latency min/avg/max/mdev = 107.444/107.523/107.648/0.058 ms
# openvpn0 (auth only, no encryption)
UDP 193      17.51  1.62
TCP  12      95.45 92.80
ICMP latency min/avg/max/mdev = 107.191/107.334/107.559/0.116 ms
# wireguard
UDP 629      22.26  2.62
TCP 198      77.40 55.98
ICMP latency min/avg/max/mdev = 107.616/107.788/108.038/0.128 ms

20 Mbps ikanni

ipipou: diẹ sii ju oju eefin ti a ko paro lọ

ipipou: diẹ sii ju oju eefin ti a ko paro lọ

ikanni fun 1 ireti Gbps

ipipou: diẹ sii ju oju eefin ti a ko paro lọ

ipipou: diẹ sii ju oju eefin ti a ko paro lọ

Ni gbogbo awọn ọran, ipipou jẹ isunmọ ni iṣẹ si ikanni ipilẹ, eyiti o jẹ nla!

Oju eefin openvpn ti ko paroko huwa lọpọlọpọ ni awọn ọran mejeeji.

Ti o ba ti ẹnikẹni ti wa ni lilọ lati se idanwo o, o yoo jẹ awon lati gbọ esi.

Ṣe IPv6 ati NetPrickle wa pẹlu wa!

orisun: www.habr.com

Fi ọrọìwòye kun