ipipou: nui atu i te kauhanga kore whakamuna

He aha ta matou korero ki te Atua o IPv6?

ipipou: nui atu i te kauhanga kore whakamuna
E tika ana, ka pera ano ta matou korero ki te atua whakamunatanga i tenei ra.

I konei ka korero tatou mo tetahi kohanga IPv4 kaore i whakamunatia, engari mo te "rama mahana", engari mo te "LED" hou. A kei reira ano nga turanga mata e rarapa ana i konei, kei te haere tonu te mahi me nga paatete kei te waahi kaiwhakamahi.

He N tikanga whakangao mo ia reka me nga tae:

  • huatau, huatau, taiohi WireGuard
  • he maha nga mahi, penei i nga maripi Swiss, OpenVPN me SSH
  • tawhito me te kore kino GRE
  • te IPIP tino ngawari, tere, tino kore whakamuna
  • kaha te whakawhanake HENEWA
  • maha atu.

Engari he kaihōtaka ahau, no reira ka whakanuia e ahau te N ma te hautau anake, ka waiho te whanaketanga o nga kawa tuturu ki nga kaihanga Kommersant.

I roto i tetahi whanau te tauiraKo taku mahi inaianei ko te toro atu ki nga kaihautu kei muri i te NAT mai i waho. Ma te whakamahi i nga kawa me te tuhinga tuhi pakeke mo tenei, kaore au i kaha ki te wiri i te ahua he rite ki te pupuhi pihoihoi mai i te pu. No te mea ka whakamahia te kauhanga mo te nuinga o te waa ki te wero rua i roto i te NAT-e, ka whakamunatia ano nga waka o roto, engari ka toremi tonu ratou i roto i te HTTPS.

I a au e rangahau ana i nga momo kawa tunneling, ka aro atu taku tino tangata o roto ki te IPIP na te mea he iti rawa te utu. Engari he kotahi me te hawhe nga ngoikoretanga nui mo aku mahi:

  • e hiahia ana ki nga IP whanui i nga taha e rua,
  • a kahore he motuhēhēnga māu.

Na reira, ka peia te tangata tino pai ki roto i te kokonga pouri o te angaanga, ki hea ranei ia e noho ana.

Na i tetahi ra, i te wa e panui ana nga tuhinga ko nga huarahi e tautokohia ana e te tangata whenua i roto i te Linux ka tutaki ahau ki te FOU (Foo-over-UDP), i.e. ahakoa, takaia ki te UDP. I tenei wa, ko te IPIP me te GUE (Generic UDP Encapsulation) e tautokohia ana.

“Tenei te matā hiriwa! He iti noa te IPIP mo au." - I whakaaro ahau.

Ko te mea pono, karekau te matā i tino hiriwa. Ko te whakaurunga i roto i te UDP e whakaoti ana i te raru tuatahi - ka taea e koe te hono atu ki nga kaihoko kei muri i te NAT mai i waho ma te whakamahi i te hononga kua whakaritea i mua, engari i konei ko te haurua o nga puāwaitanga IPIP e whai ake nei ka puta i roto i te marama hou - ka taea e tetahi mai i te whatunga motuhake te huna i muri o te kitea. IP tūmatanui me te tauranga kiritaki (i roto i te IPIP parakore karekau tenei raru).

Hei whakaoti i tenei raruraru kotahi me te hawhe, i whanau mai te taputapu ipipou. Ka whakatinanahia e ia he tikanga hanga-whare mo te whakamotuhēhē i te kaihautu mamao, me te kore e whakararu i te mahi o te kernel FOU, ka tere me te pai te tukatuka i nga paatete ki te waahi kernel.

Kaore matou e hiahia ana i to tuhinga!

Ae, mena ka mohio koe ki te tauranga whanui me te IP o te kiritaki (hei tauira, ko nga tangata katoa kei muri kare e haere ki hea, ka ngana a NAT ki te mapi i nga tauranga 1-i-1), ka taea e koe te hanga i tetahi kohanga IPIP-over-FOU me te whai i nga whakahau, kaore he tuhinga.

i runga i te tūmau:

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

i runga i te kiritaki:

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

te wahi

  • ipipou* — ingoa o te atanga whatunga kauhanga paetata
  • 203.0.113.1 — tūmau IP tūmatanui
  • 198.51.100.2 — IP tūmatanui o te kiritaki
  • 192.168.0.2 — kiritaki IP kua tohua ki te atanga eth0
  • 10001 — tauranga kiritaki rohe mo FOU
  • 20001 — tauranga kiritaki tūmatanui mo FOU
  • 10000 — tauranga tūmau tūmatanui mo FOU
  • encap-csum — he whiringa ki te taapiri i te utu arowhai UDP ki nga paanui UDP kua kapi; ka taea te whakakapi e noencap-csum, me te kore korero, kua whakahaerea kētia te tapatahi e te paparanga o waho (i te mea kei roto te kete i roto i te kauhanga)
  • eth0 — atanga rohe ka herea ai te tunnel ipip
  • 172.28.0.1 — IP o te atanga kauhanga kiritaki (takitahi)
  • 172.28.0.0 — Atanga tūmau kauhanga IP (takitahi)

I te wa e ora ana te hononga UDP, ka pai te mahi o te kauhanga, engari ki te pakaru, ka waimarie koe - mena kei te noho tonu te IP o te kiritaki: te tauranga - ka ora, ki te rereke - ka pakaru.

Ko te huarahi ngawari ki te whakahoki i nga mea katoa ko te tango i nga waahanga kernel: modprobe -r fou ipip

Ahakoa kaore e hiahiatia te motuhēhēnga, ko te IP tūmatanui me te tauranga o te kiritaki kaore i te mohiotia i nga wa katoa, he maha nga wa ohorere, rereke ranei (i runga i te momo NAT). Mena ka waiho e koe encap-dport i runga i te taha tūmau, karekau te kauhanga e mahi, karekau he mohio ki te tango i te tauranga hononga mamao. I tenei keehi, ka taea ano e te ipipou te awhina, ka awhina ranei a WireGuard me etahi atu penei i a koe.

Ka pēhea te mahi i te reira?

Ko te kiritaki (kei te nuinga o te waa kei muri i te NAT) ka whakatuwhera i tetahi kohanga (penei i te tauira i runga ake nei), ka tukuna he kete motuhēhēnga ki te tūmau kia whirihorahia e ia te kauhanga ki tona taha. I runga i nga tautuhinga, ka taea tenei he putea kau (kia kite te tūmau i te IP tūmatanui: tauranga hononga), me nga raraunga ranei e taea ai e te tūmau te tautuhi i te kiritaki. Ko nga raraunga ka taea te kiangahipa ngawari i roto i nga tuhinga maamaa (ko te whakataurite me te HTTP Basic Auth ka mau ki te hinengaro) me nga raraunga i hangaia motuhake kua hainatia me te taviri motuhake (he rite ki te HTTP Digest Auth he kaha ake, tirohia te mahi. client_auth i roto i te waehere).

I runga i te tūmau (te taha ki te IP tūmatanui), ka tīmata te ipipou, ka hanga he kaihautū tūtira nfqueue me te whirihora i te netfilter kia tukuna ai ngā pākete e tika ana ki te wāhi e tika ana: ngā pākete e arawhiti ana i te hononga ki te tūtira nfqueue, a [tata] haere tonu atu nga toenga katoa ki te kaiwhakarongo FOU.

Mo te hunga karekau i te mohio, he mea motuhake te nfqueue (NetfilterQueue ranei) mo nga runaruna kaore e mohio ki te whakawhanake i nga waahanga kernel, ma te whakamahi i te netfilter (nftables/iptables) ka taea e koe te huri i nga paatete whatunga ki te waahi kaiwhakamahi me te tukatuka ki reira ma te whakamahi tikanga o mua kei te ringa: whakarerekē (kwhiria) ka whakahokia ki te kakano, ka makahia ranei.

Mo etahi reo whakamaoritanga he here mo te mahi me te nfqueue, mo te bash kaore he (heh, ehara i te mea miharo), me whakamahi ahau i te python: ipipou te whakamahi NetfilterQueue.

Mena karekau he mea nui te mahi, ma te whakamahi i tenei mea ka taea e koe te hanga tere me te ngawari ki te hanga i o whakaaro mo te mahi me nga paatete i te taumata iti rawa, hei tauira, hanga kawa whakawhiti raraunga whakamatautau, taraihia ranei nga ratonga a-rohe me nga ratonga mamao me te whanonga kore-paerewa.

Ka mahi tahi nga turanga mata ki te nfqueue, hei tauira, i te wa kua whirihorahia te kauhanga me te whakarongo a FOU ki te tauranga e hiahiatia ana, kare e taea e koe te tuku i tetahi putea mai i te tauranga kotahi i runga i te tikanga - he pukumahi, engari ka taea e koe te tango me te tuku mai i tetahi paatete hanga matapōkeretia ki te atanga whatunga ma te whakamahi i te turanga mata, ahakoa ko te whakaputa i taua kete ka nui ake te mahi. Koinei te hanga o nga paakete me te motuhēhēnga i roto i te ipipou.

I te mea ka mahia e te ipipou nga paakete tuatahi mai i te hononga (me era i uru ki roto i te rarangi i mua i te whakaturanga o te hononga), karekau e raru te mahi.

Ina whiwhi te tūmau ipipou i tētahi pākete whakamotuhēhē, ka hangaia he kohanga, ā, ko ngā pākete katoa o muri mai i roto i te hononga kua oti kē te tukatuka e te kākano e hipa ana i te nfqueue. Mena ka rahua te hononga, ka tukuna te putea tuatahi o te mea e whai ake nei ki te rarangi nfqueue, i runga i nga tautuhinga, mena ehara i te mea he putea me te whakamotuhēhēnga, engari mai i te IP kua maumaharatia me te tauranga kiritaki, ka taea te tuku. ki runga, ka makahia ranei. Mēnā ka puta mai he pākete i whakamotuhēhēhia i tētahi IP hou me te tauranga, ka whirihora anō te kauhanga hei whakamahi.

Ko te IPIP-over-FOU o mua he raru ano i te wa e mahi tahi ana me te NAT - kaore e taea te hanga e rua nga kauhanga IPIP kua whakauruhia ki roto i te UDP me te IP kotahi, na te mea he tino mokemoke nga waahanga FOU me te IPIP tetahi ki tetahi. Ko era. e kore e taea e te tokorua o nga kiritaki kei muri i te IP whanui kotahi te hono ki te tuumau kotahi penei. Ake ake nei, pea, ka whakatauhia i te taumata kernel, engari kaore tenei i te tino mohio. I tenei wa, ka taea e te NAT te whakatika nga raruraru NAT - ki te mea kua noho kee te rua o nga wahitau IP e tetahi atu kauhanga, ka mahia e ipipou te NAT mai i te iwi whanui ki tetahi IP tūmataiti rereke, voila! - ka taea e koe te hanga kauhanga kia pau ra ano nga tauranga.

No te mea Karekau nga paatete katoa i roto i te hononga i hainatia, katahi ka whakaraerae tenei whakamarumaru ngawari ki te MITM, na mena he tangata nanakia e piri ana i te huarahi i waenga i te kaihoko me te kaimau ka taea te whakarongo ki nga waka me te raweke, ka taea e ia te huri i nga paatete kua whakamanahia ma tetahi atu wahitau ka hangaia he kauhanga mai i tetahi kaihautu kore pono.

Mena kei te whai whakaaro tetahi ki te whakatika i tenei i te wa e waiho ana te nuinga o nga waka ki te matua, kaua e whakaroa ki te korero.

Ma te ara, ko te whakaurunga i roto i te UDP kua tino pai te whakamatau. Ka whakatauritea ki te whakaurunga i runga i te IP, he nui ake te pumau me te tere ake ahakoa te taapiri o te pane UDP. Ko tenei na te mea ko te nuinga o nga kaihautu i runga i te Ipurangi e mahi pai ana me nga tikanga rongonui e toru: TCP, UDP, ICMP. Ka taea e te waahanga tangihanga te whakakore i nga mea katoa, ka tere haere ranei te mahi, na te mea ka arotauhia mo enei e toru anake.

Hei tauira, koinei te take i hanga ai a QUICK, kei runga te HTTP/3, i runga ake o te UDP, kaua ki runga ake o te IP.

Ana, he nui nga kupu, kua tae ki te wa ki te kite i te mahi i roto i te "ao tuturu".

Pakanga

I whakamahia ki te whai i te ao tūturu iperf3. Mo te ahua o te tata ki te mooni, he rite tonu tenei ki te whai i te ao tuuturu i Minecraft, engari mo tenei wa ka mahi.

Nga kaiuru ki te whakataetae:

  • te hongere matua tohutoro
  • ko ipipou te toa o tenei tuhinga
  • OpenVPN me te motuhēhēnga engari karekau he whakamunatanga
  • OpenVPN i roto i te aratau whakauru katoa
  • WireGuard kahore PresharedKey, me MTU=1440 (mai i te IPv4-anake)

Nga raraunga hangarau mo nga geeks
Ka tangohia nga ine me nga whakahau e whai ake nei:

i runga i te kiritaki:

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 torohūtanga

ping -c 10 SERVER_IP | tail -1

i runga i te tūmau (haere i te wā kotahi me te kiritaki):

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"

whirihoranga kauhanga

ipipou
tūmau
/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

kiritaki
/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 (kaore he whakamunatanga, me te motuhēhēnga)
tūmau

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

kiritaki

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 (me te whakamunatanga, motuhēhēnga, mā te UDP, nga mea katoa e tumanakohia ana)
Kua whirihorahia ma te whakamahi openvpn-whakahaere

kaitiaki
tūmau
/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

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

Результаты

Tohu haukū kino
Ko te utaina PTM tūmau kaore i te tino tohu, na te mea... He maha atu nga ratonga e rere ana i reira, i etahi wa ka pau nga rauemi:

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 teihana

ipipou: nui atu i te kauhanga kore whakamuna

ipipou: nui atu i te kauhanga kore whakamuna

hongere ia 1 Gbps pai

ipipou: nui atu i te kauhanga kore whakamuna

ipipou: nui atu i te kauhanga kore whakamuna

I nga ahuatanga katoa, he tata te mahi a ipipou ki te hongere turanga, he rawe!

Ko te tunnel openvpn kore whakamunatia he ahua kee i roto i nga keehi e rua.

Mena kei te whakamatau tetahi, he pai ki te whakarongo ki nga urupare.

Kia noho a IPv6 me NetPrickle ki a tatou!

Source: will.com

Tāpiri i te kōrero