ipipou: karịa naanị ọwara ezoro ezo

Gịnị ka anyị na-agwa Chineke nke IPv6?

ipipou: karịa naanị ọwara ezoro ezo
Nke ahụ ziri ezi, anyị ga-ekwu otu ihe ahụ nye chi nke nzuzo taa.

N'ebe a, anyị ga-ekwu maka ọwara IPv4 ezoro ezo, ma ọ bụghị maka "oriọna na-ekpo ọkụ", kama banyere "LED" nke oge a. Ma enwerekwa sọket raw na-egbuke egbuke ebe a, a na-arụkwa ọrụ na ngwugwu na oghere ndị ọrụ.

Enwere N tunneling protocol maka uto na agba ọ bụla:

  • nkecha, ejiji, ntorobịa WireGuard
  • multifunctional, dị ka mma Switzerland, OpenVPN na SSH
  • ochie na ọ bụghị ajọ GRE
  • IPIP kachasị mfe, ngwa ngwa, ezoro ezo kpamkpam
  • na-emepe emepe nke ọma GENEVE
  • ọtụtụ ndị ọzọ.

Mana m bụ onye mmemme, yabụ m ga-abawanye N naanị site na obere akụkụ, wee hapụ mmepe nke ezigbo protocol na ndị mmepe Kommersant.

N'otu nwa ebu n'afọ oru ngoIhe m na-eme ugbu a bụ iru ndị ọbịa n'azụ NAT si n'èzí. N'iji protocol nwere cryptography okenye maka nke a, enweghị m ike ịmegharị mmetụta na ọ dị ka agbapụ nza n'ogbe egbe. N'ihi na A na-eji ọwara ahụ maka ọtụtụ akụkụ naanị iji kpoo oghere na NAT-e, a na-ezobekwa okporo ụzọ dị n'ime, mana mmiri ka na-eri na HTTPS.

Ka m na-eme nyocha usoro iwu ọwara dị iche iche, ndị na-achọ izu okè nke ime m dọtara na IPIP ugboro ugboro n'ihi ntakịrị ihe karịrị ya. Mana o nwere nnukwu ndọghachi azụ na ọkara maka ọrụ m:

  • ọ chọrọ IP ọha n'akụkụ abụọ,
  • na enweghị nyocha maka gị.

Ya mere, a chụpụrụ onye izu okè azụ n'ime akụkụ gbara ọchịchịrị nke okpokoro isi, ma ọ bụ ebe ọ bụla ọ na-anọdụ ala n'ebe ahụ.

Ma otu ụbọchị, mgbe ị na-agụ isiokwu na tunnels nke obodo akwadoro na Linux ahụrụ m FOU (Foo-over-UDP), i.e. ihe ọ bụla, ọbọp na UDP. Ka ọ dị ugbu a, naanị IPIP na GUE (Generic UDP Encapsulation) ka akwadoro.

“Lee mgbọ ọlaọcha! IPIP dị mfe ezuola m.” - M chere.

N'ezie, mgbọ ahụ tụgharịrị abụghị ọlaọcha kpamkpam. Encapsulation na UDP na-edozi nsogbu mbụ - ị nwere ike jikọọ na ndị ahịa n'azụ NAT site n'èzí site na iji njikọ emebere mbụ, ma ebe a ọkara nke ihe ndọghachi azụ nke IPIP na-esote na ìhè ọhụrụ - onye ọ bụla sitere na netwọk nzuzo nwere ike zoo n'azụ ihe a na-ahụ anya. IP ọha na ọdụ ụgbọ mmiri ndị ahịa (na IPIP dị ọcha nsogbu a adịghị adị).

Iji dozie nsogbu a otu na ọkara, a mụrụ ọrụ ahụ iko. Ọ na-eme usoro a rụrụ n'ụlọ maka ịchọpụta onye ọbịa dịpụrụ adịpụ, na-akpaghasịghị ọrụ nke kernel FOU, nke ga-ahazi ngwugwu ngwa ngwa na nke ọma na oghere kernel.

Anyị achọghị edemede gị!

Ọ dị mma, ọ bụrụ na ịmara ọdụ ụgbọ mmiri ọha na IP nke onye ahịa (dịka ọmụmaatụ, onye ọ bụla nọ n'azụ ya anaghị aga ebe ọ bụla, NAT na-anwa ịse ọdụ ụgbọ mmiri 1-in-1), ị nwere ike mepụta ọwara IPIP-over-FOU na na-eso iwu, na-enweghị script ọ bụla.

na sava:

# Подгрузить модуль ядра 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

na onye ahịa:

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

ebe

  • ipipou* - aha interface netwọk ọwara mpaghara
  • 203.0.113.1 - ihe nkesa IP ọha
  • 198.51.100.2 - ọha IP nke ndị ahịa
  • 192.168.0.2 - onye ahịa IP kenyere interface eth0
  • 10001 - ọdụ ụgbọ mmiri ndị ahịa mpaghara maka FOU
  • 20001 - ọdụ ụgbọ mmiri ndị ahịa ọha maka FOU
  • 10000 - ọdụ ụgbọ mmiri nke ọha maka FOU
  • encap-csum - nhọrọ ịgbakwunye UDP checksum na ngwugwu UDP ekpuchiri; enwere ike dochie ya noencap-csum, ọ bụghị ikwu, iguzosi ike n'ezi ihe na-ama na-achịkwa mpụta encapsulation oyi akwa (mgbe ngwugwu dị n'ime ọwara)
  • eth0 - interface mpaghara nke a ga-ejikọta ọwara ipip na ya
  • 172.28.0.1 - IP nke interface ọwara ndị ahịa (nkeonwe)
  • 172.28.0.0 - interface ihe nkesa ọwara IP (nkeonwe)

Ọ bụrụhaala na njikọ UDP dị ndụ, ọwara ahụ ga-arụ ọrụ, ma ọ bụrụ na ọ na-agbaji, ị ga-enwe obi ụtọ - ma ọ bụrụ na onye ahịa IP: ọdụ ụgbọ mmiri na-anọgide otu - ọ ga-adị ndụ, ọ bụrụ na ha agbanwee - ọ ga-agbaji.

Ụzọ kachasị mfe iji tụgharịa ihe niile azụ bụ ibupu modul kernel: modprobe -r fou ipip

Ọbụlagodi na achọghị nyocha, IP na ọdụ ụgbọ mmiri ọha nke onye ahịa anaghị ama mgbe niile yana enweghị atụ ma ọ bụ agbanwe (dabere na ụdị NAT). Ọ bụrụ na ị hapụ encap-dport n'akụkụ ihe nkesa, ọwara agaghị arụ ọrụ, ọ bụghị smart zuru ezu iji were ọdụ ụgbọ mmiri dịpụrụ adịpụ. N'okwu a, ipipou nwekwara ike inye aka, ma ọ bụ WireGuard na ndị ọzọ dị ka ya nwere ike inyere gị aka.

Olee otú ọ na-arụ ọrụ?

Onye ahịa (nke na-adịkarị n'azụ NAT) na-emepe oghere (dị ka ihe atụ dị n'elu), ma zipu ngwugwu nyocha na ihe nkesa ka ọ na-ahazi ọwara n'akụkụ ya. Dabere na ntọala ahụ, nke a nwere ike ịbụ ngwugwu efu (naanị ka ihe nkesa wee hụ IP ọha: ọdụ ụgbọ mmiri), ma ọ bụ na data nke ihe nkesa nwere ike mata onye ahịa. Ihe data a nwere ike ịbụ passphrase dị mfe na ederede doro anya (ntụnyere HTTP Basic Auth na-abata n'uche) ma ọ bụ data emebere nke ọma ejiri igodo nzuzo bịanye aka (dị ka HTTP Digest Auth naanị siri ike karị, lee ọrụ). client_auth na koodu).

Na ihe nkesa (n'akụkụ ya na IP ọha), mgbe ipipou malitere, ọ na-emepụta onye na-ahụ maka nfqueue queue ma hazie netfilter ka ezipụ ngwugwu ndị dị mkpa ebe ha kwesịrị ịbụ: ngwugwu na-amalite njikọ na nfqueue kwụ n'ahịrị, na [fọrọ nke nta ka ọ bụrụ] ndị ọzọ niile na-aga ozugbo na onye na-ege ntị FOU.

Maka ndị na-amaghị, nfqueue (ma ọ bụ NetfilterQueue) bụ ihe pụrụ iche maka ndị na-amụ ihe na-amaghị otú e si emepụta modul kernel, nke na-eji netfilter (nftables / iptables) na-enye gị ohere ịmegharị ngwugwu netwọk na oghere onye ọrụ ma hazie ha n'ebe ahụ site na iji. primitive pụtara n'aka: gbanwee (nhọrọ) ma nyeghachi ya na kernel, ma ọ bụ tụfuo ya.

Maka ụfọdụ asụsụ mmemme enwere njikọ maka ịrụ ọrụ na nfqueue, maka bash ọ nweghị (heh, ọ bụghị ihe ijuanya), aghaghị m iji python: ipipou na-eji. NetfilterQueue.

Ọ bụrụ na arụmọrụ adịghị mkpa, iji ihe a ị nwere ike dị ngwa ngwa na ngwa ngwa concoct gị onwe gị mgbagha maka ịrụ ọrụ na ngwugwu na a pụtara ala larịị, dị ka ọmụmaatụ, mepụta nnwale data mbufe ogbugba ndu, ma ọ bụ troll obodo na nke dịpụrụ adịpụ ọrụ na-abụghị ọkọlọtọ omume.

Sockets Raw na-arụ ọrụ aka na nfqueue, dịka ọmụmaatụ, mgbe a na-ahazi ọwara ahụ na FOU na-ege ntị n'ọdụ ụgbọ mmiri achọrọ, ị gaghị enwe ike izipu ngwugwu site n'otu ọdụ ụgbọ mmiri n'ụzọ ọ na-adị - ọ na-arụ ọrụ, mana ị nwere ike iburu ma zipu ngwugwu emepụtara na-enweghị usoro ozugbo na ntanetị netwọkụ site na iji oghere raw, ọ bụ ezie na ịmepụta ngwugwu dị otú ahụ ga-achọ ntakịrị tinkering. Otu a ka esi emepụta ngwugwu nwere nyocha na ipipou.

Ebe ọ bụ na ipipou na-arụ ọrụ naanị ngwugwu mbụ sitere na njikọ (yana ndị jisiri ike banye n'ahịrị tupu e guzobe njikọ), arụmọrụ ọ fọrọ nke nta ka ọ ghara ịta ahụhụ.

Ozugbo ihe nkesa ipipou nwetara ngwugwu egosipụtara, a na-emepụta ọwara ma kernel gafere nfqueue na-edozilarị ngwugwu niile na-esote na njikọ ahụ. Ọ bụrụ na njikọ ahụ ada ada, mgbe ahụ, a ga-eziga ngwugwu mbụ nke ọzọ na nfqueue kwụ n'ahịrị, dabere na ntọala, ma ọ bụrụ na ọ bụghị ngwugwu nwere nkwenye, mana site na IP na ọdụ ụgbọ mmiri ikpeazụ echeta, ọ nwere ike gafere ya. na ma ọ bụ tụfuo. Ọ bụrụ na ngwugwu enwetara sitere na IP na ọdụ ụgbọ mmiri ọhụrụ, a na-ahazigharị ọwara ka ọ jiri ha.

IPIP-over-FOU na-emebu nwere otu nsogbu ọzọ mgbe ya na NAT na-arụ ọrụ - ọ gaghị ekwe omume ịmepụta tunnels IPIP abụọ na-ekpuchi na UDP na otu IP, n'ihi na modul FOU na IPIP dịpụrụ adịpụ n'ebe ibe ha nọ. Ndị ahụ. Otu ụzọ ndị ahịa n'azụ otu IP ọha agaghị enwe ike jikọọ n'otu oge na otu ihe nkesa n'ụzọ dị otú a. N'ọdịnihu, ikekwe, a ga-edozi ya na ọkwa kernel, mana nke a ejighị n'aka. Ka ọ dị ugbu a, NAT nwere ike idozi nsogbu NAT - ọ bụrụ na ọ bụrụ na ọ bụ ụzọ ọzọ ejirila ụzọ IP adreesị, ipipou ga-eme NAT site na ọha na eze gaa na IP nzuzo ọzọ, voila! - ị nwere ike ịmepụta ọwara ruo mgbe ọdụ ụgbọ mmiri gwụchara.

N'ihi na Ọ bụghị ngwugwu niile dị na njikọ ahụ ka abanyela aka, mgbe ahụ nchebe dị mfe a dị mfe na MITM, yabụ ọ bụrụ na e nwere onye ọjọọ na-ezo n'okporo ụzọ dị n'etiti onye ahịa na onye nkesa nke nwere ike ige ntị na okporo ụzọ ma jiri ya mee ihe, ọ nwere ike ịmegharị ngwugwu ndị a kwadoro site na ya. adreesị ọzọ ma mepụta ọwara site na onye ọbịa na-atụkwasịghị obi .

Ọ bụrụ na onye ọ bụla nwere echiche banyere otu esi edozi nke a mgbe ị na-ahapụ ọtụtụ okporo ụzọ na isi, egbula oge ikwu okwu.

Site n'ụzọ, encapsulation na UDP egosila onwe ya nke ọma. E jiri ya tụnyere encapsulation n'elu IP, ọ na-akwụsi ike ma na-adịkarị ngwa ngwa n'agbanyeghị agbakwunyere isi nke isi UDP. Nke a bụ n'ihi na ọtụtụ ndị ọbịa na ịntanetị na-arụ ọrụ nke ọma naanị na usoro atọ kachasị ewu ewu: TCP, UDP, ICMP. Akụkụ a na-ahụ anya nwere ike tụfuo ihe ọ bụla ọzọ kpamkpam, ma ọ bụ hazie ya nwayọ nwayọ, n'ihi na emebere ya naanị maka atọ ndị a.

Dịka ọmụmaatụ, ọ bụ ya mere ngwa ngwa, nke HTTP / 3 dabeere, ka e kere n'elu UDP, ọ bụghị n'elu IP.

Ọfọn, okwu zuru oke, oge eruola ịhụ ka o si arụ ọrụ na "ezigbo ụwa".

Agha

Eji ṅomie ụwa n'ezie iperf3. N'ihe banyere ogo ịdị nso na eziokwu, nke a bụ ihe dịka iṅomi ụwa n'ezie na Minecraft, mana maka ugbu a ọ ga-eme.

Ndị so na asọmpi a:

  • akwụkwọ ntụaka isi ọwa
  • dike nke edemede a bụ ipipou
  • MepeeVPN nwere nyocha mana enweghị nzuzo
  • MepeeVPN na ọnọdụ gụnyere niile
  • WireGuard na-enweghị PresharedKey, yana MTU=1440 (ebe ọ bụ na IPv4-naanị)

Data nka maka geeks
A na-eji iwu ndị a were metrics:

na onye ahịa:

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 latency

ping -c 10 SERVER_IP | tail -1

na ihe nkesa (na-arụ ọrụ n'otu oge na onye ahịa):

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"

Nhazi ọwara

iko
nkesa
/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

onye ahia
/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 (enweghị ezoro ezo, yana nkwenye)
nkesa

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

onye ahia

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 (ya na izo ya ezo, nyocha, site na UDP, ihe niile dị ka a tụrụ anya)
Haziri site na iji openvpn-jikwaa

waya nche
nkesa
/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

onye ahia
/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

Результаты

Akara dị nro jọrọ njọ
Ibu CPU nke sava abụghị ihe na-egosi, n'ihi na... Enwere ọtụtụ ọrụ ndị ọzọ na-agba ebe ahụ, mgbe ụfọdụ ha na-eri ihe onwunwe:

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 ọwa

ipipou: karịa naanị ọwara ezoro ezo

ipipou: karịa naanị ọwara ezoro ezo

ọwa kwa 1 Gbps nwere nchekwube

ipipou: karịa naanị ọwara ezoro ezo

ipipou: karịa naanị ọwara ezoro ezo

N'ọnọdụ niile, ipipou dị nso na arụmọrụ na ọwa ntọala, nke dị mma!

Ọwara openvpn ahụ ezoro ezoghị ezo na-akpa n'ụzọ dị ịtụnanya n'ọnọdụ abụọ ahụ.

Ọ bụrụ na onye ọ bụla ga-anwale ya, ọ ga-adọrọ mmasị ịnụ nzaghachi.

Ka IPv6 na NetPrickle nọnyere anyị!

isi: www.habr.com

Tinye a comment