iipou: barrachd air dìreach tunail gun chrioptachadh
Dè a chanas sinn ris an dia IPv6?
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:
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", чтобы лишние пакеты не плодить и не портить производительность.
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
sianal gach 1 Gbps dòchasach
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.