ipipou: e fetang feela kotopo e sa ngolwang

Re re'ng ho Molimo oa IPv6?

ipipou: e fetang feela kotopo e sa ngolwang
Ke 'nete, re tla bua se tšoanang ho molimo oa encryption kajeno.

Mona re tla bua ka kotopo ea IPv4 e sa ngolisoang, empa eseng ka "lebone le futhumetseng", empa ka "LED" ea kajeno. Hape ho na le li-sockets tse tala mona, 'me mosebetsi o ntse o tsoela pele ka lipakete sebakeng sa basebelisi.

Ho na le li-protocol tsa N tunneling bakeng sa tatso le 'mala o mong le o mong:

  • setaele, feshene, bocha WireGuard
  • e sebetsa ka bongata, joalo ka lithipa tsa Switzerland, OpenVPN le SSH
  • khale eseng bobe GRE
  • IPIP e bonolo, e potlakileng, e sa ngolisoang ka botlalo
  • ho ntshetsa pele ka mafolofolo GENESE
  • tse ling tse ngata.

Empa 'na ke moqapi, kahoo ke tla eketsa N feela ka karoloana,' me ke tlohele nts'etsopele ea liprothokholo tsa 'nete ho baetsi ba Kommersant.

Ho e 'ngoe e e-s'o tsoaloe moreroSeo ke se etsang hona joale ke ho fihlela batho ba amohelang baeti ka morao ho NAT ho tsoa kantle. Ke sebelisa liprothokholo tse nang le li-cryptography tsa batho ba baholo bakeng sa sena, ke ne ke sitoa ho sisinya maikutlo a hore ho ne ho tšoana le ho thunya lirobele ka kanono. Hobane kotopo e sebelisoa hangata ho phunya masoba ho NAT-e, hangata sephethephethe sa kahare le sona se patiloe, empa se ntse se khangoa ke metsi ho HTTPS.

Ha ke ntse ke etsa lipatlisiso ka liprothokholo tse fapaneng tsa tunneling, tlhokomelo ea ka ea ka hare ea phetheho e ile ea huleloa ho IPIP khafetsa ka lebaka la ho fokola ha eona. Empa e na le mathata a le mong le halofo ea bohlokoa bakeng sa mesebetsi ea ka:

  • e hloka li-IP tsa sechaba ka mahlakore ka bobeli,
  • mme ha ho netefatso bakeng sa hau.

Ka hona, motho ea batlang phetheho o ile a khutlisetsoa sekhutlong se lefifi sa lehata, kapa kae kapa kae moo a lutseng teng.

Mme ka tsatsi le leng, ha re ntse re bala dingolwa ka lithanele tse tšehelitsoeng ka tlhaho ho Linux ke ile ka kopana le FOU (Foo-over-UDP), ke hore. eng kapa eng, e phuthetsoe ka UDP. Ho fihlela joale, ke IPIP le GUE feela (Generic UDP Encapsulation) e tšehetsoeng.

kulo ea silevera ke ena! IPIP e bonolo e ntekane.” - Ke ile ka nahana.

Ha e le hantle, kulo e ile ea bonahala e se silevera ka ho feletseng. Encapsulation ho UDP e rarolla bothata ba pele - o ka hokela ho bareki ka morao ho NAT ho tsoa kantle ho sebelisa khokahano e seng e thehiloe, empa mona halofo ea lithunthung tse latelang tsa lithunthung tsa IPIP ka leseli le lecha - mang kapa mang ea tsoang marang-rang a ikemetseng a ka ipata ka mor'a se bonahalang. IP ea sechaba le boema-kepe ba bareki (ka IPIP e hloekileng bothata bona ha bo eo).

Ho rarolla bothata bona le halofo, thuso e ile ea tsoaloa ipipou. E sebelisa mokhoa o entsoeng lapeng bakeng sa ho netefatsa moamoheli ea hole, ntle le ho senya ts'ebetso ea kernel FOU, e tla sebetsana ka potlako le ka nepo lipakete sebakeng sa kernel.

Ha re hloke mongolo oa hau!

Ho lokile, haeba u tseba boema-kepe ba sechaba le IP ea moreki (mohlala, motho e mong le e mong ea ka morao ha a ee kae kapa kae, NAT e leka ho etsa 'mapa oa 1-in-1), o ka theha kotopo ea IPIP-over-FOU ka ho latela litaelo, ntle le mangolo afe kapa afe.

ho seva:

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

ho moreki:

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

moo

  • ipipou* - lebitso la sehokelo sa marang-rang sa thanele ea lehae
  • 203.0.113.1 — seva ea sechaba ea IP
  • 198.51.100.2 - IP ea sechaba ea moreki
  • 192.168.0.2 - IP ea bareki e abetsoe ho sehokelo eth0
  • 10001 - boema-kepe ba bareki ba lehae bakeng sa FOU
  • 20001 - boema-kepe ba bareki ba sechaba bakeng sa FOU
  • 10000 - boema-kepe ba seva sa sechaba bakeng sa FOU
  • encap-csum - khetho ea ho kenyelletsa cheke ea UDP ho lipakete tsa UDP tse kentsoeng; e ka nkeloa sebaka ke noencap-csum, re sa bue ka, botšepehi bo se bo ntse bo laoloa ke lera la ka ntle la encapsulation (ha pakete e le ka har'a kotopo)
  • eth0 - sehokelo sa lehae seo kotopo ea ipip e tla tlangoa ho eona
  • 172.28.0.1 - IP ea sebopeho sa kotopo ea bareki (se ikemetseng)
  • 172.28.0.0 - Sebopeho sa seva sa IP tunnel (se ikemetseng)

Hafeela khokahanyo ea UDP e ntse e phela, kotopo e tla be e sebetsa, empa haeba e robeha, u tla ba lehlohonolo - haeba IP ea mofani: port e lula e tšoana - e tla phela, haeba e fetoha - e tla robeha.

Mokhoa o bonolo oa ho khutlisa ntho e ngoe le e ngoe morao ke ho laolla li-module tsa kernel: modprobe -r fou ipip

Le haeba netefatso e sa hlokehe, IP le boema-kepe ba moreki ha li tsejoe ka linako tsohle 'me hangata li sa lebelloa kapa li fetoha (ho latela mofuta oa NAT). Haeba u tlohela encap-dport ka lehlakoreng la seva, kotopo e ke ke ea sebetsa, ha e bohlale ho lekana ho nka boema-kepe ba khokahano e hole. Tabeng ena, ipipou e ka boela ea thusa, kapa WireGuard le tse ling tse kang eona li ka u thusa.

Hona e sebetsa?

Moreki (eo hangata e leng ka morao ho NAT) o bula kotopo (joalo ka mohlala o ka holimo), ebe o romela pakete ea netefatso ho seva e le hore e lokise kotopo lehlakoreng la eona. Ho itšetlehile ka litlhophiso, sena se ka ba sephutheloana se se nang letho (feela e le hore seva se ka bona IP ea sechaba: port port), kapa ka data eo seva e ka khethollang mofani ka eona. Lintlha e ka ba poleloana e bonolo ea mongolo o hlakileng (papiso le HTTP Basic Auth e tla kelellong) kapa data e entsoeng ka mokhoa o ikhethileng e saennoeng ka senotlolo sa poraefete (e ts'oanang le HTTP Digest Auth e matla feela, bona ts'ebetso. client_auth khoutung).

Ho seva (lehlakoreng le nang le IP ea sechaba), ha ipipou e qala, e theha mochine oa queue oa nfqueue le ho lokisa netfilter e le hore liphutheloana tse hlokahalang li rometsoe moo li lokelang ho ba teng: lipakete tse qalang ho hokahanya le mokoloko oa nfqueue, le [hoo e ka bang] tse ling kaofela li leba ho FOU ea mametseng.

Bakeng sa ba sa tsebeng, nfqueue (kapa NetfilterQueue) ke ntho e ikhethang bakeng sa batho ba sa tsebeng ho etsa li-module tsa kernel, tse sebelisang netfilter (nfttables/iptables) tse u lumellang hore u tsamaise lipakete tsa marang-rang sebakeng sa mosebelisi le ho li sebetsa moo u sebelisa. mekhoa ea khale e haufi: fetola (ho ikhethela) ebe u e khutlisetsa kernel, kapa u e lahle.

Bakeng sa lipuo tse ling tsa lenaneo ho na le litlamo tsa ho sebetsa le nfqueue, bakeng sa bash ho ne ho se na (heh, ha ho makatse), ke ile ka tlameha ho sebelisa python: ipipou e sebelisa NetfilterQueue.

Haeba ts'ebetso e se ea bohlokoa, u sebelisa ntho ena, u ka khona ho iketsetsa mohopolo oa hau kapele le ha bonolo bakeng sa ho sebetsa le lipakete ka boemo bo tlase haholo, mohlala, ho theha liprothokholo tsa liteko tsa phetisetso ea data, kapa ho tsamaisa lits'ebeletso tsa lehae le tse hole ka boitšoaro bo sa tloaelehang.

Li-sockets tse tala li sebetsa ka letsoho le nfqueue, mohlala, ha kotopo e se e hlophisitsoe 'me FOU e mametse koung e lakatsehang, u ke ke ua khona ho romela pakete ho tloha koung e le' ngoe ka tsela e tloaelehileng - e phathahane, empa o ka nka le ho romela sephutheloana se entsoeng ka mokhoa o sa reroang ka kotloloho ho sehokelo sa marang-rang u sebelisa sokete e tala, le hoja ho hlahisa pakete e joalo ho tla hloka ho fokotsa ho feta. Ena ke tsela eo lipakete tse nang le netefatso li entsoeng ka eona ho ipipou.

Kaha ipipou e sebetsa feela lipakete tsa pele tse tsoang ho khokahanyo (le tse ileng tsa khona ho kena ka har'a mokoloko pele ho thehoa khokahano), ts'ebetso e batla e sa utloe bohloko.

Hang ha seva sa ipipou se fumana sephutheloana se tiisitsoeng, ho etsoa kotopo 'me lipakete tsohle tse latelang li se li ntse li sebetsoa ke kernel bypassing nfqueue. Haeba khokahano e hloleha, sephutheloana sa pele sa e latelang se tla romelloa moleng oa nfqueue, ho latela litlhophiso, haeba e se pakete e nang le netefatso, empa ho tloha ho IP le koung ea bareki, e ka fetisoa. ho kapa ho lahloa. Haeba pakete e netefalitsoeng e tsoa ho IP e ncha le boema-kepe, kotopo e lokisoa bocha ho e sebelisa.

IPIP-over-FOU e tloaelehileng e na le bothata bo bong hape ha o sebetsa le NAT - ha ho khonehe ho etsa lithanele tse peli tsa IPIP tse kentsoeng UDP ka IP e tšoanang, hobane li-module tsa FOU le IPIP li arohane haholo. Tseo. bareki ba babeli ka mor'a IP e tšoanang ea sechaba ba ke ke ba khona ho hokahanya ka nako e le 'ngoe ho seva se le seng ka tsela ena. Nakong e tlang, hoa khoneha, e tla rarolloa boemong ba kernel, empa sena ha se na bonnete. Khabareng, mathata a NAT a ka rarolloa ke NAT - haeba ho etsahala hore para ea liaterese tsa IP e se e tšoaretsoe ke kotopo e 'ngoe, ipipou e tla etsa NAT ho tloha sechabeng ho ea ho IP e 'ngoe ea poraefete, voila! - o ka etsa lithanele ho fihlela likou li fela.

Hobane Ha se lipakete tsohle tse hokahaneng tse saennoeng, joale ts'ireletso ena e bonolo e kotsing ea MITM, kahoo haeba ho na le molotsana ea laletseng tseleng pakeng tsa moreki le seva ea ka mamelang sephethephethe le ho se laola, a ka tsamaisa lipakete tse netefalitsoeng aterese e 'ngoe' me u thehe kotopo ho tsoa ho moamoheli ea sa tšepahaleng .

Haeba mang kapa mang a e-na le maikutlo a ho lokisa sena ha a ntse a siea bongata ba sephethephethe bohareng, u se ke ua tsilatsila ho bua.

Ka tsela, encapsulation ho UDP e ipakile hantle haholo. Ha e bapisoa le encapsulation holim'a IP, e tsitsitse haholo 'me hangata e potlakile ho sa tsotellehe ho feta holimo ho hlooho ea UDP. Sena se bakoa ke taba ea hore mabotho a mangata a Marang-rang a sebetsa hantle feela ka liprothokholo tse tharo tse tsebahalang haholo: TCP, UDP, ICMP. Karolo e bonahalang e ka lahla ntho e 'ngoe le e' ngoe ka ho feletseng, kapa ea e sebetsana butle-butle, hobane e ntlafalitsoe feela bakeng sa tsena tse tharo.

Mohlala, ke ka lebaka lena QUICK, eo HTTP/3 e thehiloeng ho eona, e entsoeng ka holim'a UDP, eseng ka holim'a IP.

Hantle, mantsoe a lekaneng, ke nako ea ho bona kamoo e sebetsang kateng "lefatšeng la sebele".

Ntoa

E sebelisetsoa ho etsisa lefatše la 'nete iperf3. Mabapi le boemo ba ho ba haufi le 'nete, sena se batla se tšoana le ho etsisa lefatše la' nete ho Minecraft, empa hajoale se tla etsa joalo.

Barupeluoa tlholisanong:

  • mocha o moholo oa litšupiso
  • mohale oa sehlooho sena ke ipipou
  • OpenVPN ka netefatso empa ha e na encryption
  • OpenVPN ka mokhoa o kenyelletsang tsohle
  • WireGuard ntle le PresharedKey, e nang le MTU=1440 (ho tloha ka IPv4-feela)

Lintlha tsa tekheniki bakeng sa li-geek
Metrics e nkuoa ka litaelo tse latelang:

ho moreki:

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

ho seva (e sebetsa ka nako e le 'ngoe le moreki):

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"

Tokiso ea tunnel

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

moreki
/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 (ha ho encryption, e nang le netefatso)
seva

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

moreki

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 (ka encryption, netefatso, ka UDP, ntho e ngoe le e ngoe kamoo ho lebelletsoeng)
E lokiselitsoe ho sebelisoa Openvpn-tsamaisa

terata
seva
/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

moreki
/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

Liphetho

Letšoao le mobe le mongobo
Mojaro oa seva oa CPU ha o bontše haholo, hobane ... Ho na le lits'ebeletso tse ling tse ngata tse sebetsang moo, ka linako tse ling li ja lisebelisoa:

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 mocha

ipipou: e fetang feela kotopo e sa ngolwang

ipipou: e fetang feela kotopo e sa ngolwang

mocha ka 1 Gbps e nang le tšepo

ipipou: e fetang feela kotopo e sa ngolwang

ipipou: e fetang feela kotopo e sa ngolwang

Maemong 'ohle, ipipou e haufi haholo le ts'ebetso ho mocha oa motheo, o motle haholo!

Tunnel e sa ngolisoang ea openvpn e sebetsa ka mokhoa o makatsang maemong ana ka bobeli.

Haeba ho na le motho ea tla e hlahloba, ho tla ba monate ho utloa maikutlo.

E se eka IPv6 le NetPrickle li ka ba le rona!

Source: www.habr.com

Eketsa ka tlhaloso