iipou: barrachd air dìreach tunail gun chrioptachadh

Dè a chanas sinn ris an dia IPv6?

iipou: barrachd air dìreach tunail gun chrioptachadh
Tha sin ceart, agus canaidh sinn an aon rud ri dia a’ chrioptachaidh an-diugh.

An seo bidh e mu dheidhinn tunail IPv4 gun chrioptachadh, ach chan ann mu dheidhinn “lampa blàth”, ach mu dheidhinn “LED” ùr-nodha. Agus an seo tha socaidean amh a’ frasadh, agus ag obair le pacaidean ann an àite luchd-cleachdaidh a’ dol air adhart.

Tha protocolaidhean tunail N ann airson gach blas agus dath:

  • stoidhle, fasanta, òg Air adhart gu clàr na làraich
  • ioma-ghnìomhach mar sgeinean na h-Eilbheis, openvpn agus ssh
  • sean agus ni h-olc GRE
  • cho sìmplidh 's as urrainn, smart, gun a bhith idir air a chrioptachadh IPIP
  • gu gnìomhach a’ leasachadh GNIOMHARA
  • mòran eile.

Ach tha mi nam phrògramadair, agus mar sin àrdaichidh mi N a-mhàin le bloigh, agus fàgaidh mi leasachadh nam protocalan sin dha na b-leasaichean.

Ann an tè nach do rugadh fhathast pròiseict, a tha mi a’ dèanamh an-dràsta, feumaidh mi luchd-aoigheachd a ruighinn air cùl NAT bhon taobh a-muigh. A 'cleachdadh protocols le cryptography inbheach airson seo, cha b' urrainn dhomh am faireachdainn fhàgail gun robh e coltach ri canan gu gealagan. Air sgàth tha an tunail air a chleachdadh sa mhòr-chuid a-mhàin airson toll a chladhach ann an NAT-e, mar as trice bidh trafaic a-staigh air a chrioptachadh cuideachd, bidh iad fhathast a’ bàthadh airson HTTPS.

Fhad ‘s a bha mi a’ sgrùdadh diofar phròtacalan tunail, ghlac IPIP aire an neach-foirfeachd a-staigh agam a-rithist agus a-rithist air sgàth cho ìosal sa bha e. Ach tha aon eas-bhuannachdan cudromach gu leth ann airson na gnìomhan agam:

  • feumaidh e IPan poblach air gach taobh,
  • agus gun dearbhadh air do shon.

Mar sin, chaidh am foirfeachd a chuir air ais gu oisean dorcha a’ chlaigeann, no ge bith càite a bheil e na shuidhe.

Agus aon uair, fhad ‘s a bha thu a’ leughadh artaigilean air tunailean le taic dùthchasach ann an Linux thàinig mi tarsainn air FOU (Foo-over-UDP), i.e. rud sam bith air a phasgadh ann an UDP. Gu ruige seo, chan eil ach IPIP agus GUE (Generic UDP Encapsulation) a’ faighinn taic bho rud sam bith.

“Sin an urchair airgid! Mise agus IPIP sìmplidh airson na sùilean.” Smaoinich mi.

Gu dearbh, cha robh am peilear gu tur airgid. Bidh encapsulation ann an UDP a ’fuasgladh a’ chiad dhuilgheadas - faodaidh tu ceangal a dhèanamh ri teachdaichean air cùl NAT bhon taobh a-muigh a ’cleachdadh ceangal ro-stèidhichte, ach an seo bidh leth den ath eas-bhuannachd de bhlàthan IPIP ann an solas ùr - faodaidh duine sam bith bho lìonra prìobhaideach falach air cùl poblach follaiseach. IP agus port teachdaiche (ann an IPIP fìor-ghlan chan eil an duilgheadas seo ann).

Gus fuasgladh fhaighinn air an duilgheadas seo gu leth, rugadh an goireas pìob. Bidh e a’ cur an gnìomh uidheamachd fèin-rinn airson a bhith a’ dearbhadh aoigheachd iomallach, gun a bhith a’ cur dragh air obair FOU làidir, a làimhsicheas pacaidean gu sgiobalta agus gu h-èifeachdach ann an àite kernel.

Chan eil feum agad air an sgriobt agad!

Gu ceart, ma tha thu eòlach air port poblach agus IP an neach-dèiligidh (mar eisimpleir, chan eil a h-uile duine ga leantainn an àite sam bith, bidh NAT a ’feuchainn ri puirt 1-gu-1 a mhapadh), faodaidh tu tunail IPIP-over-FOU a chruthachadh leis na leanas àitheantan, gun sgriobtur sam bith.

air an fhrithealaiche:

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

air an neach-dèiligidh:

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

far a bheil

  • ipipou* is e ainm an eadar-aghaidh lìonra tunail ionadail
  • 203.0.113.1 - IP poblach an fhrithealaiche
  • 198.51.100.2 - IP poblach an neach-dèiligidh
  • 192.168.0.2 - IP teachdaiche air a shònrachadh don eadar-aghaidh eth0
  • 10001 - port teachdaiche ionadail airson FOU
  • 20001 - port teachdaiche poblach airson FOU
  • 10000 - port poblach frithealaiche airson FOU
  • encap-csum - roghainn seic UDP a chur ri pacaidean UDP dùinte; faodar a chur na àite noencap-csum, gun a bhith a’ cunntadh, tha ionracas mu thràth fo smachd an t-sreath a-muigh de chuairteachadh (fhad ‘s a tha am pasgan taobh a-staigh an tunail)
  • eth0 - eadar-aghaidh ionadail ris am bi an tunail ipip ceangailte
  • 172.28.0.1 - IP de eadar-aghaidh tunail an neach-dèiligidh (prìobhaideach)
  • 172.28.0.0 - IP de eadar-aghaidh tunail an fhrithealaiche (prìobhaideach)

Cho fad 's a tha an ceangal UDP beò, bidh an tunail ann an staid fhallain, agus mar a bhriseas e, dè cho fortanach - ma tha an IP: port cleachdaiche fhathast mar an ceudna - bidh e beò, ma dh'atharraicheas e - brisidh e.

Is e an dòigh as fhasa air a h-uile càil a thionndadh air ais le bhith a’ luchdachadh sìos na modalan kernel: modprobe -r fou ipip

Fiù mura h-eil feum air dearbhadh, chan eil fios an-còmhnaidh air an IP poblach agus am port teachdaiche agus gu tric bidh iad do-chreidsinneach no caochlaideach (a rèir an seòrsa NAT). Ma dh'fhàgas tu encap-dport air taobh an fhrithealaiche, chan obraich an tunail, chan eil e glic gu leòr am port ceangail iomallach a ghabhail. Anns a 'chùis seo, faodaidh iipou cuideachadh cuideachd, uill, no WireGuard agus feadhainn eile mar sin airson do chuideachadh.

Ciamar a dh'obraicheas e?

Bidh an neach-dèiligidh (mar as trice air cùl NAT) a 'togail an tunail (mar a tha san eisimpleir gu h-àrd), agus a' cur pasgan dearbhaidh chun an fhrithealaiche gus an tunail a stèidheachadh air a thaobh. A rèir nan roghainnean, faodaidh seo a bhith na phasgan falamh (dìreach gus am faic an frithealaiche an IP poblach: port ceangail), no le dàta leis an urrainn don fhrithealaiche an neach-dèiligidh aithneachadh. Faodaidh an dàta a bhith na fhacal-faire sìmplidh ann an teacsa shìmplidh (tha coltas ann le HTTP Basic Auth a’ tighinn gu inntinn) no dàta le cruth sònraichte air a shoidhnigeadh le iuchair phrìobhaideach (coltach ri HTTP Digest Auth a-mhàin nas làidire, faic an gnìomh client_auth ann an còd).

Air an fhrithealaiche (taobh IP poblach), nuair a thòisicheas ipipou, bidh e a’ cruthachadh inneal-làimhseachaidh ciudha nfqueue agus a’ rèiteachadh netfilter gus am bi na pacaidean riatanach air an stiùireadh far am bu chòir dhaibh a bhith: pacaidean a thòisicheas an ceangal ris a’ chiudha nfqueue, agus [cha mhòr] a h-uile càil eile a’ dol dìreach chun an neach-èisteachd FOU.

Cò nach eil sa chuspair, tha nfqueue (no NetfilterQueue) na rud cho sònraichte dha neo-dhreuchdail aig nach eil fios mar a leasaicheas iad modalan kernel, a leigeas leat, a’ cleachdadh netfilter (nftables / iptables), pacaidean lìonra ath-stiùireadh gu àite luchd-cleachdaidh agus pròiseas. iad an sin le dòighean primitive improved: atharraich (roghainneil ) agus thoir air ais don kernel e, no cuir air falbh e.

Airson cuid de chànanan prògramaidh tha ceangalaichean ann airson a bhith ag obair le nfqueue, airson bash cha deach a lorg (heh, chan eil e na iongnadh), bha agam ri python a chleachdadh: tha ipipou a’ cleachdadh NetfilterQueue.

Mura h-eil coileanadh deatamach, le bhith a’ cleachdadh an rud seo faodaidh tu an loidsig agad fhèin a chòcaireachd gu ìre mhath luath agus furasta airson a bhith ag obair le pacaidean aig ìre gu math ìosal, mar eisimpleir, snaidhte protocolaidhean gluasad dàta deuchainneach, no troll seirbheisean ionadail is iomallach le giùlan neo-àbhaisteach. .

Bidh socaidean amh ag obair làmh ri làimh le eadar-aghaidh nfqueue. Seo mar a tha pacaidean le dearbhadh air an cruthachadh ann an iipou.

Leis nach bi iipou a ’giullachd a’ chiad phasgan bhon cheangal (uill, an fheadhainn a fhuair air a dhol a-steach don ciudha mus deach an ceangal a stèidheachadh), cha mhòr gu bheil an coileanadh a ’fulang.

Cho luath ‘s a gheibh am frithealaiche iipou pasgan dearbhte, thèid an tunail a chruthachadh agus tha a h-uile pacaid às deidh sin sa cheangal air a phròiseasadh leis an kernel a’ dol seachad air nfqueue. Ma tha an ceangal grodadh, thèid a’ chiad phacaid den ath fhear a chuir chun ciudha nfqueue, a rèir nan roghainnean, mura h-eil e na phasgan le dearbhadh, ach bhon IP mu dheireadh air a bheil cuimhne agus port teachdaiche, faodaidh e a bhith air a thoirt seachad no air a chuir air falbh. Ma thig am pasgan dearbhte bhon IP agus am port ùr, thèid an tunail ath-dhealbhadh gus an cleachdadh.

Tha duilgheadas eile aig an IPIP-over-FOU àbhaisteach nuair a bhios tu ag obair le NAT - chan urrainn dhut dà thunail IPIP a chruthachadh anns an UDP leis an aon IP, oir tha na modalan FOU agus IPIP iomallach gu leòr bho chèile. An fheadhainn sin. cha bhith e comasach dha paidhir de luchd-dèiligidh air an aon IP poblach ceangal ris an aon fhrithealaiche aig an aon àm san dòigh seo. San àm ri teachd, 's dòcha, thèid a rèiteachadh aig an ìre kernel, ach chan eil seo cinnteach. Anns an eadar-ama, faodar duilgheadasan NAT fhuasgladh le NAT - ma thachras e gu bheil tunail eile ann an seòlaidhean IP no dhà mu thràth, cuiridh iipou NAT bhon phoball chun IP prìobhaideach eile, voila! - faodaidh tu tunailean a chruthachadh gus an ruith na puirt a-mach.

Air sgàth chan eil a h-uile pacaid sa cheangal air a shoidhnigeadh, tha dìon cho sìmplidh so-leònte ri MITM, mar sin ma tha villain a’ falach air an t-slighe eadar an neach-dèiligidh agus an frithealaiche, cò as urrainn èisteachd ri trafaic agus smachd a chumail air, faodaidh e pacaidean dearbhte ath-stiùireadh tro fhear eile seòladh agus cruthaich tunail bho òstair neo-earbsach.

Ma tha beachd sam bith aig duine air mar as urrainn dhut seo a chàradh fhad ‘s a tha thu a’ fàgail a ’mhòr-chuid den trafaic sa chridhe, na bi leisg bruidhinn.

Air an t-slighe, tha cuairteachadh ann an UDP air a dhearbhadh fhèin gu math. An coimeas ri cuairteachadh thairis air IP, tha e tòrr nas seasmhaiche agus gu tric nas luaithe a dh’ aindeoin an còrr a bharrachd de cheann-cinn an UDP. Tha seo air sgàth gu bheil a’ mhòr-chuid de luchd-aoigheachd air an eadar-lìn ag obair gu fulangach a-mhàin leis na trì protocolaidhean as mòr-chòrdte: TCP, UDP, ICMP. Mar as trice faodaidh am pàirt faicsinneach a h-uile càil eile a thilgeil air falbh, no pròiseasadh nas slaodaiche, oir chan eil e air a mheudachadh ach airson na trì sin.

Mar eisimpleir, is e seo as coireach gun deach QUICK, air a’ bhunait a chaidh HTTP / 3 a chruthachadh, a chruthachadh gu mionaideach thairis air UDP, agus chan ann thairis air IP.

Uill, faclan gu leòr, tha an t-àm ann faicinn mar a tha e ag obair anns an “fìor shaoghal”.

Blàr

Air a chleachdadh airson aithris a dhèanamh air an fhìor shaoghal iperf3. A thaobh cho faisg ‘s a tha e air fìrinn, tha seo timcheall air mar a bhith ag atharrais air an fhìor shaoghal ann am Minecraft, ach airson a-nis nì e.

A’ gabhail pàirt anns a’ cho-fharpais tha:

  • iomradh prìomh sianal
  • gaisgeach an artaigil seo iipou
  • OpenVPN le dearbhadh ach gun chrioptachadh
  • OpenVPN uile-in-ghabhalach
  • WireGuard gun PresharedKey, le MTU = 1440 (airson IPv4-a-mhàin)

Dàta teicnigeach airson geeks
Bidh sgiobaidhean mar sin a’ gabhail slatan-tomhais

air an neach-dèiligidh:

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"

Ùine ICMP

ping -c 10 SERVER_IP | tail -1

air an fhrithealaiche (a 'ruith aig an aon àm leis an neach-dèiligidh):

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"

Configuration Tunnel

pìob
frithealaiche
/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

neach-ceannach
/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 (gun chrioptachadh, le dearbhadh)
frithealaiche

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

neach-ceannach

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 (le crioptachadh, dearbhadh, tro UDP, tha a h-uile dad mar a bu chòir a bhith)
Air a rèiteachadh le bhith a 'cleachdadh openvpn-riaghladh

sreang-dìon
frithealaiche
/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

neach-ceannach
/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

Toraidhean

Soidhne grànda amh
Chan eil eallach CPU an fhrithealaiche gu math taisbeanach, oir. tha mòran sheirbheisean eile a’ snìomh an sin, uaireannan bidh iad a’ caitheamh ghoireasan:

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

sianal aig 20 Mbps

iipou: barrachd air dìreach tunail gun chrioptachadh

iipou: barrachd air dìreach tunail gun chrioptachadh

sianal gach 1 Gbps dòchasach

iipou: barrachd air dìreach tunail gun chrioptachadh

iipou: barrachd air dìreach tunail gun chrioptachadh

Anns a h-uile suidheachadh, tha iipou gu math faisg air an t-sianal bunaiteach a thaobh coileanadh, rud a tha sgoinneil!

Bha an tunail openvpn neo-chrioptaichte gu math neònach anns gach cùis.

Ma tha duine gu bhith a’ dèanamh deuchainn, bidh e inntinneach fios air ais a chluinntinn.

Is dòcha gum bi IPv6 agus NetPrickle còmhla rinn!

Source: www.habr.com

Cuir beachd ann