ipipou: mihoatra noho ny tonelina tsy misy encryption fotsiny
Inona no lazaintsika amin'ilay Andriamanitry ny IPv6?
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:
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
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", чтобы лишние пакеты не плодить и не портить производительность.
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
fantsona isaky ny 1 optimistic Gbps
Amin'ny toe-javatra rehetra, ny ipipou dia manakaiky ny fampisehoana amin'ny fantsona fototra, izay tsara!