ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny

Inona no lazaintsika amin'ilay Andriamanitry ny IPv6?

ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny
Marina izany, hiteny toy izany koa isika amin'ny andriamanitry ny fanafenana ankehitriny.

Eto isika dia hiresaka momba ny tonelina IPv4 tsy voafehy, fa tsy momba ny "jiro mafana", fa ny "LED" maoderina. Ary misy koa ny socket manta manjelanjelatra eto, ary mandeha ny asa miaraka amin'ireo fonosana ao amin'ny habaka mpampiasa.

Misy protocole tonelina N ho an'ny tsiro sy loko rehetra:

  • stylish, lamaody, tanora WireGuard
  • multifunctional, toy ny antsy Swiss, OpenVPN ary SSH
  • taloha fa tsy ratsy GRE
  • ny IPIP tsotra indrindra, haingana, tsy voafehy tanteraka
  • mivoatra mavitrika Genève
  • maro hafa.

Fa programmer aho, noho izany dia hampitombo ny N amin'ny ampahany fotsiny aho, ary hamela ny fivoaran'ny protocole tena izy ho an'ny mpamorona Kommersant.

Amin'ny iray mbola tsy teraka tetikasaNy ataoko izao dia ny manatona mpampiantrano ao ambadiky ny NAT avy any ivelany. Amin'ny fampiasana protocole miaraka amin'ny kriptografika olon-dehibe amin'izany, tsy afaka manozongozona ny fahatsapana aho fa toy ny mitifitra fody avy ao anaty tafondro. SATRIA ny tonelina dia ampiasaina ho an'ny ankamaroany mba hanondroana lavaka ao amin'ny NAT-e, ny fifamoivoizana anatiny dia matetika voarakotra ihany koa, saingy mbola rendrika ao amin'ny HTTPS izy ireo.

Teo am-pikarohana ireo protocole tonelina isan-karazany, dia nisarika ny sain'ny mpikatroka lavorary anaty ny IPIP imbetsaka noho ny vidiny ambany indrindra. Saingy misy lesoka lehibe iray sy tapany amin'ny asako:

  • mitaky IP-bahoaka amin'ny lafiny roa,
  • ary tsy misy authentication ho anao.

Noho izany, ny perfectionist dia naverina tany amin'ny zoro maizina amin'ny karandohany, na aiza na aiza ipetrahany.

Ary avy eo indray andro, raha namaky lahatsoratra momba ny tonelina tohanan'ny teratany ao amin'ny Linux dia nahita FOU (Foo-over-UDP) aho, izany hoe. na inona na inona, fonosina amin'ny UDP. Hatreto, IPIP sy GUE (Generic UDP Encapsulation) ihany no tohana.

“Indro ny bala volafotsy! IPIP tsotra dia ampy ho ahy." - Noheveriko.

Raha ny marina dia hita fa tsy volafotsy tanteraka ilay bala. Ny encapsulation ao amin'ny UDP dia mamaha ny olana voalohany - afaka mifandray amin'ny mpanjifa ao ambadiky ny NAT avy any ivelany ianao amin'ny alàlan'ny fifandraisana efa napetraka, fa eto ny antsasaky ny tsy fahampian'ny IPIP manaraka mamelana amin'ny hazavana vaovao - na iza na iza avy amin'ny tambajotra tsy miankina dia afaka miafina ao ambadiky ny hita maso. IP public sy seranan-tsambo mpanjifa (amin'ny IPIP madio dia tsy misy io olana io).

Mba hamahana ity olana iray sy sasany ity dia teraka ny fitaovana ipipou. Mametraka mekanika vita an-trano izy io mba hanamarinana ny mpampiantrano lavitra, tsy manelingelina ny fiasan'ny kernel FOU, izay handamina haingana sy mahomby ireo fonosana ao amin'ny habaka kernel.

Tsy mila ny scripto izahay!

Eny, raha fantatrao ny seranan-tsambo ho an'ny daholobe sy ny IP an'ny mpanjifa (ohatra, ny olona rehetra ao ambadik'izany dia tsy mandeha na aiza na aiza, ny NAT dia manandrana manao sarintany ports 1-in-1), azonao atao ny mamorona tonelina IPIP-over-FOU miaraka amin'ny manaraka baiko, tsy misy script.

amin'ny mpizara:

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

amin'ny mpanjifa:

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

izay

  • ipipou* - anaran'ny tambajotran'ny tonelina eo an-toerana
  • 203.0.113.1 — mpizara IP-bahoaka
  • 198.51.100.2 - Public IP an'ny mpanjifa
  • 192.168.0.2 - mpanjifa IP nomena ny interface eth0
  • 10001 - seranan-tsambo mpanjifa eo an-toerana ho an'ny FOU
  • 20001 - seranan-tsambo mpanjifa ho an'ny FOU
  • 10000 — seranan-tsambo mpizara ho an'ny daholobe ho an'ny FOU
  • encap-csum - safidy hampidirana checksum UDP amin'ny fonosana UDP voafono; azo soloina amin'ny noencap-csum, tsy lazaina intsony, ny fahamendrehana dia efa voafehin'ny sosona encapsulation ivelany (raha ao anaty tonelina ny fonosana)
  • eth0 - interface eo an-toerana izay hifehezana ny tonelina ipip
  • 172.28.0.1 - IP an'ny interface tsara tonelina mpanjifa (tsy miankina)
  • 172.28.0.0 - Fifandraisana amin'ny mpizara tonelina IP (tsy miankina)

Raha mbola velona ny connexion UDP, dia hilamina tsara ny tonelina, fa raha tapaka ilay izy, dia ho tsara vintana ianao - raha toa ka tsy miova ny IP an'ny mpanjifa: port - ho velona izy, raha miova izy ireo - dia tapaka.

Ny fomba tsotra indrindra hamerenana ny zava-drehetra dia ny famoahana ireo modules kernel: modprobe -r fou ipip

Na dia tsy ilaina aza ny fanamarinana dia tsy fantatra foana ny IP sy seranan-tsambon'ny mpanjifa ary matetika tsy azo vinavinaina na miovaova (miankina amin'ny karazana NAT). Raha avelanao encap-dport eo amin'ny lafiny mpizara dia tsy mandeha ny tonelina, tsy mahay maka ny seranana fifandraisana lavitra. Amin'ity tranga ity dia afaka manampy anao koa ny ipipou, na ny WireGuard sy ny hafa toa azy dia afaka manampy anao.

Ahoana no miasa?

Ny mpanjifa (izay matetika ao ambadiky ny NAT) dia manokatra tonelina (toy ny amin'ny ohatra etsy ambony), ary mandefa fonosana fanamarinana ho an'ny mpizara mba hanitsiana ny tonelina eo amin'ny sisiny. Miankina amin'ny toe-javatra, mety ho fonosana tsy misy na inona na inona izany (mba ho hitan'ny mpizara ny IP ho an'ny daholobe: seranan-tsambo fifandraisana), na miaraka amin'ny angona ahafahan'ny mpizara mamantatra ny mpanjifa. Ny angon-drakitra dia mety ho fehezanteny tsotra amin'ny lahatsoratra mazava (ny fanoharana amin'ny HTTP Basic Auth no tonga ao an-tsaina) na angon-drakitra natao manokana nosoniavina tamin'ny fanalahidy manokana (mitovy amin'ny HTTP Digest Auth ihany no matanjaka kokoa, jereo ny fiasa. client_auth ao amin'ny code).

Eo amin'ny mpizara (miankina amin'ny IP public), rehefa manomboka ny ipipou, dia mamorona mpandrindra filaharana nfqueue izy ary manamboatra netfilter mba halefa any amin'ny toerana tokony hisy azy ireo fonosana ilaina: fonosana manomboka ny fifandraisana amin'ny filaharana nfqueue, ary [saika] ny ambiny rehetra dia mankany amin'ny mpihaino FOU.

Ho an'ireo tsy mahalala, nfqueue (na NetfilterQueue) dia zavatra manokana ho an'ireo mpankafy tsy mahay mamolavola modules kernel, izay mampiasa netfilter (nftables/iptables) ahafahanao mamindra ny packet amin'ny tambazotra mankany amin'ny habaka mpampiasa ary manamboatra azy ireo any amin'ny fampiasana azy. dikan'ny primitive eo am-pelatanana: manova (tsy voatery) dia avereno amin'ny voany, na ario.

Ho an'ny fiteny fandaharana sasany dia misy fatorana hiasa amin'ny nfqueue, ho an'ny bash tsy misy (heh, tsy mahagaga), tsy maintsy nampiasa python aho: ipipou mampiasa NetfilterQueue.

Raha tsy mitsikera ny fampisehoana, amin'ny fampiasana an'io zavatra io dia azonao atao ny manamboatra ny lojikanao manokana amin'ny fiasana amin'ny fonosana amin'ny ambaratonga ambany, ohatra, mamorona protocols famindrana angon-drakitra, na troll serivisy eo an-toerana sy lavitra miaraka amin'ny fitondran-tena tsy manara-penitra.

Ny socket manta dia miara-miasa amin'ny nfqueue, ohatra, rehefa efa namboarina ny tonelina ary ny FOU dia mihaino amin'ny seranana tianao, dia tsy afaka mandefa fonosana avy amin'ny seranana mitovy amin'ny fomba mahazatra ianao - sahirana, fa azonao atao ny maka sy mandefa packet novokarina kisendrasendra mivantana amin'ny seha-pifandraisana amin'ny alàlan'ny socket manta, na dia mila fitakiana kely kokoa aza ny famokarana fonosana toy izany. Toy izany no fomba hamoronana fonosana misy authentication ao amin'ny ipipou.

Koa satria ny fonosana voalohany avy amin'ny fifandraisana ihany no karakarain'i ipipou (sy ireo izay nahavita niditra an-tsehatra talohan'ny nametrahana ny fifandraisana), saika tsy hiharatsy ny fampisehoana.

Raha vantany vao mahazo fonosana voamarina ny mpizara ipipou, dia misy tonelina iray ary ny fonosana manaraka rehetra ao amin'ny fifandraisana dia efa nokarakarain'ny kernel mandalo ny nfqueue. Raha toa ka tsy mahomby ny fifandraisana dia halefa any amin'ny filaharana nfqueue ny fonosana voalohany amin'ny manaraka, miankina amin'ny toe-javatra, raha tsy fonosana misy authentication, fa avy amin'ny IP sy seranan-tsambon'ny mpanjifa farany tsaroany, dia azo alefa izany. eo na ariana. Raha misy fonosana voamarina avy amin'ny IP sy seranan-tsambo vaovao, ny tonelina dia amboarina hampiasa azy ireo.

Ny IPIP-over-FOU mahazatra dia manana olana iray hafa rehefa miara-miasa amin'ny NAT - tsy azo atao ny mamorona tonelina IPIP roa voarakitra ao amin'ny UDP miaraka amin'ny IP iray ihany, satria ny maody FOU sy IPIP dia tena mitoka-monina. Ireo. mpanjifa roa ao ambadiky ny IP-bahoaka iray ihany dia tsy ho afaka hifandray amin'ny mpizara mitovy amin'izany fomba izany. Amin'ny ho avy, mety, ho voavaha amin'ny ambaratonga kernel izany, saingy tsy azo antoka izany. Mandra-pahatongan'izany, ny olana NAT dia azon'ny NAT voavaha - raha sendra ny adiresy IP roa dia efa misy tonelina hafa, ipipou dia hanao NAT avy amin'ny daholobe mankany amin'ny IP manokana hafa, voila! - afaka mamorona tonelina ianao mandra-pahatapitry ny seranana.

SATRIA Tsy misy sonia daholo ny packet ao amin'ny connexion, dia io fiarovana tsotra io dia marefo amin'ny MITM, ka raha misy olon-dratsy miafina eo amin'ny lalan'ny mpanjifa sy ny server izay afaka mihaino ny fifamoivoizana sy manodinkodina azy, dia azony atao ny mamindra ny fonosana voamarina amin'ny alàlan'ny adiresy hafa ary mamorona tonelina avy amin'ny mpampiantrano tsy azo itokisana.

Raha misy manana hevitra momba ny fomba hamahana izany nefa mamela ny ankamaroan'ny fifamoivoizana ao amin'ny fototra, aza misalasala miteny.

Raha ny marina, ny encapsulation ao amin'ny UDP dia nanaporofo tsara ny tenany. Raha ampitahaina amin'ny encapsulation amin'ny IP, dia milamina kokoa ary matetika haingana kokoa na dia eo aza ny lohan'ny UDP fanampiny. Izany dia noho ny zava-misy fa ny ankamaroan'ny mpampiantrano amin'ny Internet dia miasa tsara ihany amin'ny protocols telo malaza indrindra: TCP, UDP, ICMP. Ny ampahany azo tsapain-tanana dia afaka manary tanteraka ny zavatra hafa rehetra, na manodina azy moramora kokoa, satria ho an'ireo telo ireo ihany.

Ohatra, izany no nahatonga ny QUICK, izay iorenan'ny HTTP/3, dia noforonina teo an-tampon'ny UDP, fa tsy teo an-tampon'ny IP.

Eny ary, ampy ny teny, fotoana izao hijerena ny fomba fiasa ao amin'ny "tontolo tena izy".

Battle

Nampiasaina maka tahaka ny tontolo tena izy iperf3. Raha ny haavon'ny akaiky ny zava-misy dia mitovy amin'ny fakana tahaka ny tontolo tena izy ao amin'ny Minecraft, fa amin'izao fotoana izao dia hanao izany.

Ireo mpandray anjara amin'ny fifaninanana:

  • fantsona lehibe reference
  • ny mahery fo amin'ity lahatsoratra ity dia ipipou
  • OpenVPN misy authentication fa tsy misy encryption
  • OpenVPN amin'ny fomba rehetra misy
  • WireGuard tsy misy PresharedKey, miaraka amin'ny MTU=1440 (hatramin'ny IPv4 ihany)

Data ara-teknika ho an'ny geeks
Ny metric dia raisina miaraka amin'ireto baiko manaraka ireto:

amin'ny mpanjifa:

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

amin'ny mpizara (mihazakazaka miaraka amin'ny mpanjifa):

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"

Fanofanana tonelina

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

mpanjifa
/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 (tsy misy encryption, misy authentication)
mpizara

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

mpanjifa

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 (miaraka amin'ny encryption, authentication, amin'ny UDP, ny zavatra rehetra araka ny efa nampoizina)
Namboarina mampiasa openvpn-manage

mpiambina
mpizara
/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

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

vokatra

Famantarana ratsy mando
Ny enta-mavesatra CPU amin'ny server dia tsy tena manondro, satria ... Misy serivisy maro hafa mandeha any, indraindray mandany loharanon-karena izy ireo:

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 fantsona

ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny

ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny

fantsona isaky ny 1 optimistic Gbps

ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny

ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny

Amin'ny toe-javatra rehetra, ny ipipou dia manakaiky ny fampisehoana amin'ny fantsona fototra, izay tsara!

Nitondra tena hafahafa ilay tonelina openvpn tsy voafehy tamin'ireo tranga roa ireo.

Raha misy olona hanandrana izany dia mahaliana ny mandre ny valin-teny.

Enga anie ny IPv6 sy NetPrickle hiaraka aminay!

Source: www.habr.com

Add a comment