ipipou: e sili atu nai lo na o se alavai e le'i fa'ailogaina

O le a le mea tatou te fai atu ai i le Atua o IPv6?

ipipou: e sili atu nai lo na o se alavai e le'i fa'ailogaina
E saʻo, matou te fai atu tutusa i le atua o faʻamatalaga i aso nei.

O iinei o le a tatou talanoa ai e uiga i se alalaupapa IPv4 e leʻi faʻamaonia, ae le o se "moli mafanafana", ae e uiga i se "LED" faʻaonapo nei. Ma o loʻo i ai foʻi faʻailoga mata e susulu iinei, ma o loʻo faʻagasolo galuega faʻatasi ma afifi i avanoa faʻaoga.

O lo'o iai N tunneling protocols mo so'o se tofo ma lanu:

  • aulelei, fa'alelei, talavou WireGuard
  • multifunctional, pei o Swiss naifi, OpenVPN ma SSH
  • tuai ae le leaga GRE
  • le sili ona faigofie, vave, atoatoa unencrypted IPIP
  • mataalia atinae SINEVA
  • le tele o isi.

Ae o aʻu o se tagata fai polokalame, o lea o le a ou faʻateleina le N i se vaega, ma tuʻu le atinaʻeina o faʻasalalauga moni i tagata atinaʻe Kommersant.

I le tasi e lei fanau mai le ata faataitaiO le mea o loʻo ou faia nei o le oʻo atu lea i 'au i tua atu o le NAT mai fafo. I le faʻaaogaina o faʻasalalauga faʻatasi ai ma faʻataʻitaʻiga a tagata matutua mo lenei mea, e le mafai ona ou luluina le lagona e pei o le fanaina o manu iti mai se fana. Aua o le alavai e faʻaaogaina mo le tele o vaega naʻo le tuʻiina o pu i le NAT-e, o fefaʻatauaiga i totonu e masani lava ona faʻailogaina, ae latou te malemo pea i le HTTPS.

A'o su'esu'eina tunneling protocols eseese, o lo'u tagata atoatoa i totonu na tosina atu pea lava pea i le IPIP ona o le itiiti ifo o lona ulu. Ae e tasi ma le afa fa'aletonu taua mo a'u galuega:

  • e manaʻomia ai IP lautele i itu uma e lua,
  • ma leai se faʻamaoniga mo oe.

O le mea lea, na toe tulia ai le tagata atoatoa i le tulimanu pogisa o le ulupoo, poʻo soʻo se mea e nofo ai iina.

Ona sosoo ai lea ma se tasi aso, a o faitau tala i luga tunnels lagolago fa'alenu'u i Linux na ou tau atu i le FOU (Foo-over-UDP), i.e. po'o le a lava, afifi i le UDP. I le taimi nei, na'o le IPIP ma le GUE (Generic UDP Encapsulation) e lagolagoina.

“O le pulu siliva lenei! O se IPIP faigofie ua lava mo aʻu." - Faapea lava a'u.

O le mea moni, o le pulu na foliga mai e le o se siliva atoa. O le Encapsulation i le UDP e foia ai le faʻafitauli muamua - e mafai ona e faʻafesoʻotaʻi i tagata o loʻo i tua o le NAT mai fafo e faʻaaoga ai se fesoʻotaʻiga muamua, ae o le afa o le isi toe faʻafoʻi o le IPIP fuga i se malamalama fou - soʻo se tasi mai se fesoʻotaʻiga tumaoti e mafai ona natia i tua o le vaʻaia. IP lautele ma uafu tagata o tausia (i le IPIP mama e le o iai lenei faʻafitauli).

Ina ia foia lenei faafitauli e tasi ma le afa, na fanau ai le aoga ipipou. O loʻo faʻaaogaina se masini faʻapitoa mo le faʻamaoniaina o se talimalo mamao, e aunoa ma le faʻalavelaveina o le faʻaogaina o le kernel FOU, lea o le a vave ma lelei le faʻaogaina o pusa i le kernel space.

Matou te le manaʻomia lau tusitusiga!

Lelei, afai e te iloa le taulaga lautele ma le IP a le kalani (mo se faʻataʻitaʻiga, o tagata uma i tua e le alu i se mea, e taumafai le NAT e faʻafanua ports 1-in-1), e mafai ona e fatuina se IPIP-over-FOU tunnel ma le mulimuli i poloaiga, e aunoa ma ni tusitusiga.

luga ole 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

i luga ole kalani:

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

le mea

  • ipipou* - igoa ole feso'ota'iga feso'ota'iga alavai i le lotoifale
  • 203.0.113.1 — server IP lautele
  • 198.51.100.2 - IP lautele a le kalani
  • 192.168.0.2 — client IP ua tofia i le interface eth0
  • 10001 - uafu tagata fa'apitonu'u mo FOU
  • 20001 — uafu a tagata lautele mo FOU
  • 10000 — uafu server lautele mo FOU
  • encap-csum - filifiliga e faʻaopoopo se siaki siaki a le UDP i pusa UDP faʻapipiʻi; e mafai ona suia e noencap-csum, ae le o le taʻua, o le amiosaʻo ua uma ona pulea e le pito i fafo o le encapsulation layer (aʻo i ai le afifi i totonu o le alavai)
  • eth0 - fa'apitonu'u fa'apitonu'u lea o le a fusia ai le alavai ipip
  • 172.28.0.1 - IP o le aufaʻatasi a le kalani (faʻapitoa)
  • 172.28.0.0 - IP tunnel server interface (tutoatasi)

O le a lava le umi e ola ai le fesoʻotaʻiga UDP, o le a lelei le alavai, ae afai e malepe, o le a e laki - pe a tumau le IP a le tagata o tausia: o le taulaga - o le a ola, pe a suia - o le a malepe.

O le auala pito sili ona faigofie e toe faʻafoʻi ai mea uma o le lafoaʻiina lea o modules kernel: modprobe -r fou ipip

E tusa lava pe e le manaʻomia le faʻamaonia, o le IP a le tagata o tausia lautele ma le taulaga e leʻo iloa i taimi uma ma e masani ona le mautonu pe fesuisuiai (faʻalagolago i le NAT type). Afai e te lafoai encap-dport i luga o le itu o le server, o le a le galue le alavai, e le lava le atamai e ave le taulaga fesoʻotaʻiga mamao. I lenei tulaga, e mafai foi ona fesoasoani le ipipou, poo le WireGuard ma isi e mafai ona fesoasoani ia te oe.

E faapefea ona galulue?

O le tagata o tausia (lea e masani lava i tua o le NAT) e tatalaina se alavai (pei o le faʻataʻitaʻiga o loʻo i luga), ma auina atu se pusa faʻamaonia i le server ina ia faʻapipiʻi le alavai i lona itu. Faʻalagolago i faʻatulagaga, e mafai ona avea ma se pusa avanoa (naʻo le mea e mafai e le server ona vaʻaia le IP lautele: fesoʻotaʻiga port), poʻo faʻamatalaga e mafai ai e le server ona iloa le tagata o tausia. O faʻamaumauga e mafai ona avea ma faʻamatalaga faigofie i tusitusiga manino (o le tala faʻatusa ma le HTTP Basic Auth e oʻo mai i le mafaufau) poʻo faʻamaumauga faʻapitoa e sainia ma se ki faʻapitoa (e tutusa ma le HTTP Digest Auth naʻo le malosi, vaʻai galuega client_auth i le code).

I luga o le 'auʻaunaga (le itu ma le IP lautele), pe a amata le ipipou, e fatuina se nfqueue queue handler ma faʻapipiʻi le netfilter ina ia auina atu pepa manaʻomia i le mea e tatau ona i ai: afifi amata le fesoʻotaʻiga i le nfqueue queue, ma [toetoe lava] o isi uma e alu sa'o i le fa'afofoga FOU.

Mo i latou e le o iloa, nfqueue (poʻo NetfilterQueue) o se mea faʻapitoa mo amateurs e le iloa pe faʻafefea ona atiaʻe faʻaoga kernel, lea e faʻaaoga ai le netfilter (nftables/iptables) e mafai ai ona e toe faʻafeiloaʻi paʻu fesoʻotaiga i avanoa faʻaoga ma faʻaogaina iina e faʻaaoga ai. o lona uiga muamua: sui (filifiliga) ma toe avatu i le fatu, pe lafoa'i.

Mo nisi gagana polokalame o loʻo i ai fusi mo le galue ma le nfqueue, mo le bash e leai se (heh, e le o se mea e ofo ai), e tatau ona ou faʻaogaina le python: faʻaoga ipipou NetfilterQueue.

Afai e le taua le faʻatinoga, faʻaaoga lenei mea e mafai ona e faʻavave vave ma faigofie ona faʻapipiʻi lau oe lava manatu mo le galue ma paʻu i se tulaga maualalo, mo se faʻataʻitaʻiga, faia faʻataʻitaʻiga faʻasalalauga faʻasalalauga, poʻo le taʻavale i le lotoifale ma le mamao auaunaga ma le amio le masani.

O sockets mata e galulue faʻatasi ma le nfqueue, mo se faʻataʻitaʻiga, pe a uma ona faʻatulagaina le alalaupapa ma o loʻo faʻalogo FOU i luga o le uafu manaʻomia, o le a le mafai ona e lafoina se pusa mai le uafu tutusa i le auala masani - e pisi, ae e mafai ona e ave ma lafo sa'o mai se afifi fa'atupu fa'afuase'i i le feso'ota'iga feso'ota'iga e fa'aaoga ai se socket mata, e ui o le fa'atupuina o sea pepa o le a mana'omia ai sina fa'asili. O le ala lea e fai ai pepa fa'amaonia i le ipipou.

Talu ai ona o le ipipou o loʻo faʻagasolo naʻo pepa muamua mai le fesoʻotaʻiga (ma i latou na mafai ona tafe i totonu o le laina aʻo leʻi faʻatulagaina le fesoʻotaʻiga), e toetoe lava a le afaina le faʻatinoga.

O le taimi lava e maua ai e le 'au'auna ipipou se pepa fa'amaonia, e faia loa se alavai ma fa'asolo uma atu afifi i le feso'ota'iga ua uma ona fa'agasolo e le fatu e ala i le nfqueue. Afai e le manuia le fesoʻotaʻiga, ona tuʻuina atu lea o le pepa muamua o le isi i le laina nfqueue, e faʻatatau i faʻatulagaga, pe afai e le o se pepa faʻamaonia, ae mai le IP manatua mulimuli ma le port client, e mafai ona pasia. i luga pe lafoai. Afai o se pusa faʻamaonia e sau mai se IP fou ma se taulaga, e toe faʻaleleia le alavai e faʻaoga ai.

O le IPIP-over-FOU masani e iai le isi faʻafitauli pe a galue ma le NAT - e le mafai ona faia ni lua IPIP e faʻapipiʻiina i le UDP ma le IP tutusa, aua o le FOU ma le IPIP modules e matua vavae ese mai le tasi i le isi. O na. o le a le mafai e se paga o tagata faʻatau i tua atu o le IP lautele tutusa ona faʻafesoʻotaʻi i le server tutusa i lenei auala. I le lumana'i, atonu, o le a foia i le kernel tulaga, ae e le o mautinoa. I le taimi nei, e mafai ona foia faʻafitauli a le NAT e le NAT - afai e tupu se lua o tuatusi IP ua uma ona nofoia e se isi tunnel, o le a faia e ipipou le NAT mai le lautele i se isi IP tumaoti, voila! - e mafai ona e faia tunnel se'ia uma uafu.

Aua E le o saini uma pepa i totonu o le fesoʻotaʻiga, o lenei puipuiga faigofie e faigofie ile MITM, o lea afai o loʻo i ai se tagata leaga o loʻo lamalama i luga o le ala i le va o le kalani ma le 'auʻaunaga e mafai ona faʻalogo i le taʻavale ma faʻaogaina, e mafai ona ia toe faʻafeiloaʻi pepa faʻamaonia e ala i se isi tuatusi ma fai se alavai mai se tagata e le talitonuina.

Afai ei ai se tasi e iai ni manatu ile auala e faʻaleleia ai lenei mea aʻo tuʻu le tele o fefaʻatauaiga i totonu, aua le faatuai e tautala.

I le auala, o le faʻapipiʻiina i le UDP ua faʻamaonia lelei lava. Pe a faʻatusatusa i le faʻapipiʻiina i luga ole IP, e sili atu ona mautu ma e masani ona televave e ui lava i le faʻaopoopoga o le ulu o le UDP. E mafua lenei mea i le mea moni o le tele o 'au i luga o le Initaneti e galulue lelei naʻo le tolu faʻasalalauga sili ona lauiloa: TCP, UDP, ICMP. O le vaega moni e mafai ona lafoaia uma isi mea uma, pe faʻagasolo lemu, aua e sili ona lelei mo nei tolu.

Mo se faʻataʻitaʻiga, o le mea lea na faia ai le QUICK, lea e faʻavae ai HTTP / 3, i luga o le UDP, ae le o luga ole IP.

Ia, lava upu, ua oʻo i le taimi e vaʻai ai pe faʻapefea ona galue i le "lalolagi moni".

Taua

Fa'aoga e fa'aa'oa'o i le lalolagi moni iperf3. E tusa ai ma le maualuga o le vavalalata i le mea moni, e tutusa lava ma le faʻataʻitaʻiina o le lalolagi moni i Minecraft, ae mo le taimi nei o le a faia.

Tagata auai i le tauvaga:

  • fa'asino ala autu
  • o le toa o lenei tusitusiga o ipipou
  • OpenVPN faʻatasi ma faʻamaoniga ae leai se faʻamatalaga
  • OpenVPN i le faʻaogaina uma
  • WireGuard e aunoa ma le PresharedKey, ma MTU=1440 (talu mai IPv4-na'o)

Faʻamatalaga faʻapitoa mo geeks
O fua fa'atatau e faia i fa'atonuga nei:

i luga ole kalani:

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

i luga o le server (taufetuli fa'atasi ma le kalani):

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"

Fa'atonuga alavai

ipipou
tautua
/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

tagata faʻatau
/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 (leai se faʻamatalaga, faʻatasi ai ma faʻamaoniga)
tautua

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

tagata faʻatau

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 (faʻatasi ai ma faʻamatalaga, faʻamaoniga, e ala i le UDP, mea uma e pei ona faʻamoemoeina)
Fa'atonu le fa'aaogaina tatalavpn-pulea

leoleo
tautua
/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

tagata faʻatau
/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

Iʻuga

Faailoga mataga susu
O le uta CPU server e le faʻaalia tele, aua ... E tele isi auaunaga o loʻo faʻatautaia iina, o nisi taimi latou te 'ai ai punaoa:

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 alavai

ipipou: e sili atu nai lo na o se alavai e le'i fa'ailogaina

ipipou: e sili atu nai lo na o se alavai e le'i fa'ailogaina

auala ile 1 Gbps fa'amoemoe

ipipou: e sili atu nai lo na o se alavai e le'i fa'ailogaina

ipipou: e sili atu nai lo na o se alavai e le'i fa'ailogaina

I tulaga uma, o le ipipou e latalata i le faʻatinoga i le alalaupapa faavae, lea e sili!

O le alalaupapa openvpn e le'i fa'ailogaina e uiga ese le amio i tulaga uma e lua.

Afai e i ai se tasi o le a fa'ata'ita'i, o le a manaia le fa'alogo i fa'amatalaga.

Ia i ai le IPv6 ma NetPrickle ma i matou!

puna: www.habr.com

Faaopoopo i ai se faamatalaga