ipipou: ʻoi aku ma mua o kahi tunnel i hoʻopili ʻole ʻia
He aha kā mākou e ʻōlelo nei i ke Akua o IPv6?
Pololei, e ʻōlelo like mākou i ke akua o ka hoʻopunipuni i kēia lā.
Maanei e kamaʻilio mākou e pili ana i kahi tunnel IPv4 unencrypted, akā ʻaʻole e pili ana i kahi "kukui mahana", akā e pili ana i kahi "LED" hou. A aia kekahi mau kumu maka e ʻā ana ma ʻaneʻi, a ke hoʻomaka nei ka hana me nā ʻeke ma kahi o ka mea hoʻohana.
Aia nā protocol tunneling N no kēlā me kēia ʻono a me nā kala:
Akā, he polokalamu wau, no laila e hoʻonui au i ka N ma kahi hapa, a waiho i ka hoʻomohala ʻana o nā protocols maoli i nā mea hoʻomohala Kommersant.
I kahi hānau ʻole ka hanaʻO kaʻu e hana nei i kēia manawa, ʻo ia ke hōʻea i nā pūʻali ma hope o NAT mai waho. Ke hoʻohana nei i nā protocols me ka cryptography makua no kēia, ʻaʻole hiki iaʻu ke hoʻoluliluli i ka manaʻo ua like ia me ka pana ʻana i nā manu liʻiliʻi mai kahi pūkuniahi. No ka mea Hoʻohana ʻia ka tunnel no ka hapa nui wale no ka ʻoki ʻana i nā lua i ka NAT-e, hoʻopili pinepine ʻia nā kaʻa kūloko, akā hāʻule lākou i ka HTTPS.
ʻOiai e noiʻi ana i nā protocol tunneling like ʻole, ua huki ʻia koʻu manaʻo i ka IPIP ma muli o ka liʻiliʻi o ke poʻo. Akā he hoʻokahi a me ka hapa koʻikoʻi drawbacks no kaʻu mau hana:
pono ia i nā IP lehulehu ma nā ʻaoʻao ʻelua,
a ʻaʻohe hōʻoia no ʻoe.
No laila, ua hoʻihoʻi ʻia ka mea hemolele i ke kihi ʻeleʻele o ka iwi poʻo, a i ʻole ma kahi āna e noho ai.
A i kekahi lā, i ka heluhelu ʻana i nā ʻatikala ma nā tunnels kākoʻo maoli ma Linux ua hele au ma FOU (Foo-over-UDP), i.e. ʻo nā mea a pau, i ʻōwili ʻia i ka UDP. I kēia manawa, kākoʻo wale ʻia ʻo IPIP a me GUE (Generic UDP Encapsulation).
“Eia ka poka kala! Ua lawa ka IPIP maʻalahi iaʻu. - Ua manaʻo wau.
ʻO ka ʻoiaʻiʻo, ua lilo ka pōkā ʻaʻole kālā piha. Hoʻopau ka Encapsulation i ka UDP i ka pilikia mua - hiki iā ʻoe ke hoʻopili i nā mea kūʻai aku ma hope o NAT mai waho me ka hoʻohana ʻana i kahi pilina i hoʻonohonoho mua ʻia, akā eia ka hapalua o ka drawback hou o nā pua IPIP i kahi kukui hou - hiki i kekahi mai kahi pūnaewele pilikino ke hūnā ma hope o ka ʻike ʻia. IP lehulehu a me ka port client (ma ka IPIP maʻemaʻe ʻaʻole kēia pilikia).
No ka hoʻoponopono ʻana i kēia pilikia hoʻokahi a me ka hapa, ua hānau ʻia ka pono ipipou. Hoʻohana ʻo ia i kahi mīkini hana home no ka hōʻoia ʻana i kahi mea hoʻokipa mamao, me ka ʻole o ka hoʻopau ʻana i ka hana o ka kernel FOU, ka mea e hoʻoponopono wikiwiki a maikaʻi i nā ʻeke i loko o ka lumi kernel.
ʻAʻole pono mākou i kāu palapala!
ʻAe, inā ʻike ʻoe i ke awa ākea a me ka IP o ka mea kūʻai aku (no ka laʻana, ʻaʻole hele ka poʻe a pau ma hope, hoʻāʻo ʻo NAT e palapala i nā awa 1-i-1), hiki iā ʻoe ke hana i kahi tunnel IPIP-over-FOU me ka e hahai ana i na kauoha, me ka palapala ole.
ma ke kikowaena:
# Подгрузить модуль ядра 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
ma ka mea kūʻai aku:
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
kahi
ipipou* - ka inoa o ke kikowaena pūnaewele tunnel kūloko
203.0.113.1 — kikowaena IP lehulehu
198.51.100.2 - IP lehulehu o ka mea kūʻai
192.168.0.2 — hāʻawi ʻia ka IP client i ka interface eth0
10001 — awa mea kūʻai aku kūloko no FOU
20001 — awa o ka lehulehu no FOU
10000 — awa kikowaena lehulehu no FOU
encap-csum - koho e hoʻohui i kahi helu UDP i nā ʻeke UDP i hoʻopili ʻia; hiki ke pani ia e noencap-csum, ʻaʻole e haʻi ʻia, ua hoʻomalu ʻia ka pono e ka papa encapsulation o waho (ʻoiai ka ʻeke i loko o ka tunnel)
eth0 - ke kikowaena kūloko kahi e hoʻopaʻa ʻia ai ka tunnel ipip
172.28.0.1 - IP o ka mea kūʻai aku tunnel interface (private)
172.28.0.0 — Ke kikowaena kikowaena IP tunnel (kūʻokoʻa)
E like me ka lōʻihi o ka pili UDP e ola ana, ka tunnel e ma ka hana ana, akā, ina e haki, oe e Laki - ina ka mea kūʻai mai o IP: awa noho like - e ola ia, ina lakou e hoʻololi - e wawahi.
ʻO ke ala maʻalahi loa e hoʻohuli i nā mea āpau, ʻo ka wehe ʻana i nā modules kernel: modprobe -r fou ipip
ʻOiai inā ʻaʻole koi ʻia ka hōʻoia ʻana, ʻaʻole ʻike mau ʻia ka IP ākea a me ke awa o ka mea kūʻai aku a ʻike pinepine ʻole ʻia a ʻano loli paha (ma muli o ke ʻano NAT). Inā haʻalele ʻoe encap-dport ma ka ʻaoʻao kikowaena, ʻaʻole e hana ka tunnel, ʻaʻole lawa ke akamai e lawe i ke awa pili mamao. I kēia hihia, hiki i ka ipipou ke kōkua, a i ʻole WireGuard a me nā mea ʻē aʻe e hiki ke kōkua iā ʻoe.
Pehea ia hana?
ʻO ka mea kūʻai (ʻo ia ka mea maʻamau ma hope o NAT) wehe i kahi tunnel (e like me ka laʻana ma luna), a hoʻouna i kahi ʻeke hōʻoia i ke kikowaena e hoʻonohonoho ai i ka tunnel ma kona ʻaoʻao. Ma muli o nā hoʻonohonoho, hiki ke lilo i ʻeke kaʻawale (i hiki i ke kikowaena ke ʻike i ka IP lehulehu: port port), a i ʻole me ka ʻikepili e hiki ai i ke kikowaena ke ʻike i ka mea kūʻai aku. Hiki i ka ʻikepili ke lilo i huaʻōlelo maʻalahi ma ka kikokikona maʻalahi (ʻo ka hoʻohālikelike me HTTP Basic Auth e hiki mai ana i ka noʻonoʻo) a i ʻole ka ʻikepili i hoʻolālā ʻia i kau inoa ʻia me kahi kī pilikino (e like me HTTP Digest Auth ikaika wale nō, ʻike i ka hana. client_auth ma ke code).
Ma ke kikowaena (ka ʻaoʻao me ka IP lehulehu), i ka wā e hoʻomaka ai ka ipipou, hana ia i kahi nfqueue queue handler a hoʻonohonoho i ka netfilter i hoʻouna ʻia nā ʻeke kūpono i kahi e pono ai: nā packets e hoʻomaka i ka pilina i ka queue nfqueue, a [kokoke] hele pololei nā koena a pau i ka mea hoʻolohe FOU.
No ka poʻe ʻike ʻole, ʻo ka nfqueue (a i ʻole NetfilterQueue) he mea kūikawā no nā poʻe amateurs ʻaʻole ʻike i ka hoʻomohala ʻana i nā modula kernel, me ka hoʻohana ʻana i ka netfilter (nftables/iptables) hiki iā ʻoe ke hoʻihoʻi hou i nā ʻeke pūnaewele i ka wahi hoʻohana a hana iā lākou ma laila me ka hoʻohana ʻana. ʻo ka manaʻo mua ma ka lima: hoʻololi (koho) a hoʻihoʻi i ka kernel, a hoʻolei paha.
No kekahi mau ʻōlelo papahana aia nā mea paʻa no ka hana ʻana me nfqueue, no ka bash ʻaʻohe mea (heh, ʻaʻole kahaha), pono wau e hoʻohana i ka python: hoʻohana ipipou NetfilterQueue.
Inā ʻaʻole koʻikoʻi ka hana, me ka hoʻohana ʻana i kēia mea hiki iā ʻoe ke hana wikiwiki a maʻalahi hoʻi i kāu loiloi no ka hana ʻana me nā ʻeke ma kahi haʻahaʻa haʻahaʻa, no ka laʻana, hana i nā protocols hoʻoili ʻikepili hoʻokolohua, a i ʻole troll i nā lawelawe kūloko a me kahi mamao me ka hana maʻamau.
Hoʻopili lima ʻia nā kumu maka me ka nfqueue, no ka laʻana, i ka wā i hoʻonohonoho ʻia ai ka tunnel a ke hoʻolohe nei ʻo FOU i ke awa i makemake ʻia, ʻaʻole hiki iā ʻoe ke hoʻouna i kahi ʻeke mai ke awa like ma ke ʻano maʻamau - he hana, akā. hiki iā ʻoe ke lawe a hoʻouna i kahi ʻeke i hana ʻole ʻia i ke kikowaena pūnaewele me ka hoʻohana ʻana i kahi kumu maka, ʻoiai ʻo ka hana ʻana i kēlā ʻeke e koi aku i kahi tinkering hou aʻe. ʻO kēia ke ʻano o ka hana ʻana i nā ʻeke me ka hōʻoia i ka ipipou.
Ma muli o ka hana ʻana o ipipou i nā ʻeke mua wale nō mai ka pilina (a me nā mea i hoʻokele i ka leak i ka pila ma mua o ka hoʻokumu ʻia ʻana o ka pilina), aneane ʻaʻole pilikia ka hana.
Ke loaʻa koke i ka server ipipou kahi ʻeke hōʻoia ʻia, hana ʻia kahi tunnel a ua hana mua ʻia nā ʻeke a pau ma hope o ka pilina e ka kernel bypassing nfqueue. Inā hāʻule ka pilina, a laila e hoʻouna ʻia ka ʻeke mua o ka mea e hiki mai ana i ka nfqueue queue, e pili ana i nā hoʻonohonoho, inā ʻaʻole ia he ʻeke me ka hōʻoia, akā mai ka IP i hoʻomanaʻo ʻia a me ke awa o ka mea kūʻai aku, hiki ke hoʻoholo ʻia. ma luna a hoʻolei ʻia. Inā hele mai kahi ʻeke i hōʻoia ʻia mai kahi IP hou a me ke awa, ua hoʻonohonoho hou ʻia ka tunnel e hoʻohana iā lākou.
ʻO ka IPIP-over-FOU maʻamau he hoʻokahi pilikia hou i ka hana ʻana me NAT - ʻaʻole hiki ke hana i ʻelua IPIP tunnels i hoʻopaʻa ʻia ma UDP me ka IP like, no ka mea, ua kaʻawale loa nā modules FOU a me IPIP mai kekahi i kekahi. ʻO kēlā mau. ʻAʻole hiki i nā mea kūʻai aku ma hope o ka IP lehulehu hoʻokahi ke hoʻohui like i ka kikowaena like ma kēia ala. I ka wā e hiki mai ana, hiki paha, e hoʻoholo ʻia ma ka pae kernel, akā ʻaʻole maopopo kēia. I kēia manawa, hiki ke hoʻoponopono ʻia nā pilikia NAT e NAT - inā ua noho ʻia kekahi mau IP address e kekahi tunnel, e hana ʻo ipipou iā NAT mai ka lehulehu a i kahi IP pilikino ʻē aʻe, voila! - hiki iā ʻoe ke hana i nā tunnels a pau nā awa.
No ka mea ʻAʻole i hoʻopaʻa inoa ʻia nā paʻi āpau i ka pilina, a laila hiki ke pale ʻia kēia palekana maʻalahi i ka MITM, no laila inā aia kahi mea ʻino e hūnā ma ke ala ma waena o ka mea kūʻai aku a me ke kikowaena hiki ke hoʻolohe i ke kaʻa a me ka hoʻoponopono ʻana iā ia, hiki iā ia ke hoʻihoʻi i nā ʻeke i hōʻoia ʻia ma o kahi helu ʻē aʻe a hana i kahi tunnel mai kahi hoʻokipa hilinaʻi ʻole.
Inā loaʻa i kekahi nā manaʻo e pili ana i ka hoʻoponopono ʻana i kēia me ka waiho ʻana i ka hapa nui o ke kaʻa i ke kumu, mai kānalua e ʻōlelo.
Ma ke ala, ua hōʻoia maikaʻi loa ka encapsulation ma UDP. Ke hoʻohālikelike ʻia i ka encapsulation ma luna o IP, ʻoi aku ka paʻa a ʻoi aku ka wikiwiki ma mua o ka nui o ke poʻo o ke poʻo UDP. ʻO kēia ma muli o ka hana maikaʻi ʻana o ka hapa nui o nā mea hoʻokipa ma ka Pūnaewele me nā protocols kaulana ʻekolu: TCP, UDP, ICMP. Hiki i ka ʻāpana kino ke hoʻolei loa i nā mea ʻē aʻe, a i ʻole e hoʻomaʻamaʻa lohi, no ka mea, ʻoi aku ka maikaʻi no kēia mau mea ʻekolu.
No ka laʻana, ʻo ia ke kumu QUICK, kahi i hoʻokumu ʻia ai ʻo HTTP/3, ma luna o UDP, ʻaʻole ma luna o IP.
ʻAe, lawa nā huaʻōlelo, ʻo ia ka manawa e ʻike ai pehea e hana ai i ka "honua maoli".
kaua
Hoʻohana ʻia e hoʻohālike i ke ao maoli iperf3. Ma ke ʻano o ke kiʻekiʻe o ka pili ʻana i ka ʻoiaʻiʻo, ua like kēia me ka hoʻohālikelike ʻana i ka honua maoli i Minecraft, akā i kēia manawa e hana ia.
Nā mea komo i ka hoʻokūkū:
reference main channel
ipipou ka meʻe o kēia ʻatikala
OpenVPN me ka hōʻoia akā ʻaʻohe hoʻopunipuni
OpenVPN ma ke ʻano holoʻokoʻa
WireGuard me ka PresharedKey, me MTU=1440 (mai ka IPv4 wale nō)
ʻikepili ʻenehana no nā geeks Lawe ʻia nā metric me kēia mau kauoha:
ma ka mea kūʻai aku:
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", чтобы лишние пакеты не плодить и не портить производительность.
Hōʻailona ʻino ʻino
ʻAʻole hōʻike nui ka ukana CPU server, no ka mea... Nui nā lawelawe ʻē aʻe e holo ana ma laila, i kekahi manawa ʻai lākou i nā kumuwaiwai:
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 pūnaewele
kaila no 1 optimistic Gbps
I nā hihia a pau, kokoke loa ka ipipou i ka hana i ke kahawai kumu, maikaʻi loa!
He ʻano ʻē ka hana ʻana o ka tunnel openvpn unencrypted i nā hihia ʻelua.
Inā e hoʻāʻo kekahi, e hauʻoli ka lohe ʻana i nā manaʻo.