ለ IPv6 አምላክ ምን እያልን ነው?
ልክ ነው, ዛሬ ለምስጠራ አምላክ ተመሳሳይ ነገር እንናገራለን.
እዚህ ስለ ያልተመሰጠረ IPv4 ዋሻ እንነጋገራለን, ነገር ግን ስለ "ሙቅ መብራት" ሳይሆን ስለ ዘመናዊ "LED" አንድ. እና እዚህም የሚያበሩ ጥሬ ሶኬቶች አሉ, እና በተጠቃሚ ቦታ ላይ ከጥቅሎች ጋር ስራ በመካሄድ ላይ ነው.
ለእያንዳንዱ ጣዕም እና ቀለም N መሿለኪያ ፕሮቶኮሎች አሉ፡-
- ቄንጠኛ፣ ፋሽን፣ ወጣትነት
WireGuard - እንደ ስዊስ ቢላዎች፣ OpenVPN እና SSH ያሉ ባለብዙ ተግባር
- አሮጌ እና ክፉ አይደለም GRE
- በጣም ቀላል ፣ ፈጣን ፣ ሙሉ በሙሉ ያልተመሰጠረ አይፒአይፒ
- በንቃት ማደግ
ጄኔቭ - ሌሎች ብዙ።
ግን እኔ ፕሮግራመር ነኝ ፣ ስለሆነም N ን በትንሽ ክፍል ብቻ እጨምራለሁ ፣ እና የእውነተኛ ፕሮቶኮሎችን ልማት ለ Kommersant ገንቢዎች እተወዋለሁ።
በአንድ ባልተወለደ
የተለያዩ የመሿለኪያ ፕሮቶኮሎችን በምመረምርበት ጊዜ፣የእኔ የውስጥ ፍፁምነት ባለሙያ ትኩረቱ በትንሹ ከአቅም በላይ በመሆኑ ደጋግሞ ወደ IPIP ይሳባል። ግን ለተግባሮቼ አንድ ተኩል ጉልህ ድክመቶች አሉት።
- በሁለቱም በኩል ይፋዊ አይፒዎችን ይፈልጋል ፣
- እና ለእርስዎ ምንም ማረጋገጫ የለም።
ስለዚህ፣ ፍፁምነት አጥኚው ወደ ቅሉ ጨለማ ጥግ፣ ወይም እዚያ በተቀመጠበት ቦታ ተመልሶ ተነዳ።
እና ከዚያ አንድ ቀን ፣ ጽሑፎችን በሚያነቡበት ጊዜ
“ይኸው የብር ጥይት! ቀላል አይፒፒ ይበቃኛል::" - አስብያለሁ.
እንደውም ጥይቱ ሙሉ በሙሉ ብር ሆኖ አልተገኘም። በ UDP ውስጥ መጨናነቅ የመጀመሪያውን ችግር ይፈታል - ቀደም ሲል የተፈጠረ ግንኙነትን በመጠቀም ከውጭ ከ NAT በስተጀርባ ካሉ ደንበኞች ጋር መገናኘት ይችላሉ ፣ ግን እዚህ ከሚቀጥለው የአይፒአይፒ ጉድለት ግማሹ በአዲስ ብርሃን ያብባል - ከግል አውታረ መረብ የመጣ ማንኛውም ሰው ከሚታየው በስተጀርባ መደበቅ ይችላል። የህዝብ አይፒ እና የደንበኛ ወደብ (በንፁህ IPIP ይህ ችግር የለም)።
ይህንን አንድ ተኩል ችግር ለመፍታት መገልገያው ተወለደ
የእርስዎን ስክሪፕት አንፈልግም!
እሺ፣ የደንበኛውን የህዝብ ወደብ እና አይፒ (ለምሳሌ ከኋላው ያለው ሁሉ የትም አይሄድም፣ NAT 1-in-1 ወደቦችን ለመቅረጽ ይሞክራል) የምታውቁ ከሆነ፣ ከ IPIP-over-FOU ዋሻ ጋር መፍጠር ትችላለህ። ያለ ምንም ስክሪፕት ትዕዛዞችን በመከተል።
በአገልጋይ:
# Подгрузить модуль ядра 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
በደንበኛው ላይ:
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
የት
ipipou*
- የአካባቢያዊ ዋሻ አውታረ መረብ በይነገጽ ስም203.0.113.1
- የህዝብ አይፒ አገልጋይ198.51.100.2
- የደንበኛው የህዝብ አይፒ192.168.0.2
- ደንበኛ አይፒ ለ በይነገጽ eth0 ተመድቧል10001
- የአካባቢ ደንበኛ ወደብ ለ FOU20001
- የህዝብ ደንበኛ ወደብ ለ FOU10000
- የህዝብ አገልጋይ ወደብ ለ FOUencap-csum
- ወደ የታሸጉ የ UDP ፓኬቶች የ UDP ቼክ ለመጨመር አማራጭ; ሊተካ ይችላልnoencap-csum
ሳይጠቅስ፣ ንፁህነት አስቀድሞ የሚቆጣጠረው በውጫዊው የመከለያ ንብርብር ነው (ጥቅሉ በዋሻው ውስጥ እያለ)eth0
- የአይፒፕ ዋሻው የሚታሰርበት አካባቢያዊ በይነገጽ172.28.0.1
- የደንበኛ ዋሻ በይነገጽ አይፒ (የግል)172.28.0.0
- የአይፒ ዋሻ አገልጋይ በይነገጽ (የግል)
የ UDP ግንኙነት በህይወት እስካለ ድረስ ዋሻው በስራ ላይ ይሆናል, ነገር ግን ከተበላሸ, እድለኞች ይሆናሉ - የደንበኛው አይፒ: ወደብ ተመሳሳይ ከሆነ - ይኖራል, ከተቀየሩ - ይሰበራል.
ሁሉንም ነገር ለመመለስ ቀላሉ መንገድ የከርነል ሞጁሎችን ማራገፍ ነው፡- modprobe -r fou ipip
ማረጋገጥ ባይፈለግም የደንበኛው ይፋዊ አይፒ እና ወደብ ሁልጊዜ የማይታወቁ እና ብዙ ጊዜ የማይገመቱ ወይም ተለዋዋጭ ናቸው (እንደ NAT አይነት)። ከተወው encap-dport
በአገልጋዩ በኩል, ዋሻው አይሰራም, የርቀት ግንኙነት ወደብ ለመውሰድ በቂ ብልጥ አይደለም. በዚህ አጋጣሚ ippou ሊረዳህ ይችላል ወይም WireGuard እና ሌሎችም ሊረዱህ ይችላሉ።
ይህ የሚሠራው እንዴት ነው?
ደንበኛው (ብዙውን ጊዜ ከኤንኤቲ ጀርባ ያለው) ዋሻውን ይከፍታል (ከላይ ባለው ምሳሌ ላይ እንዳለው) እና የማረጋገጫ ፓኬት ወደ አገልጋዩ በመላክ በጎኑ ላይ ያለውን ዋሻ ያዋቅራል። በቅንብሮች ላይ በመመስረት ይህ ባዶ ፓኬት ሊሆን ይችላል (ልክ አገልጋዩ የህዝብ IP: የግንኙነት ወደብ ማየት እንዲችል) ወይም አገልጋዩ ደንበኛውን የሚለይበት ውሂብ ያለው። ውሂቡ ግልጽ በሆነ ጽሑፍ ውስጥ ቀላል የይለፍ ሐረግ ሊሆን ይችላል (ከኤችቲቲፒ መሠረታዊ ማረጋገጫ ጋር ያለው ተመሳሳይነት ወደ አእምሮው ይመጣል) ወይም በልዩ ሁኔታ የተነደፈ ውሂብ በግል ቁልፍ የተፈረመ (ከኤችቲቲፒ Digest Auth ጋር ተመሳሳይነት የበለጠ ጠንካራ ነው ፣ ተግባሩን ይመልከቱ) client_auth
በኮዱ ውስጥ)።
በአገልጋዩ ላይ (ከህዝብ አይፒ ጋር ጎን) ፣ ipipou ሲጀምር nfqueue ወረፋ ተቆጣጣሪን ይፈጥራል እና netfilterን ያዋቅራል ፣ ስለሆነም አስፈላጊዎቹ እሽጎች ወደነበሩበት ይላካሉ ። ከ nfqueue ወረፋ ጋር ያለውን ግንኙነት የሚያስጀምሩ ፓኬቶች እና [ማለት ይቻላል] የተቀሩት ሁሉ በቀጥታ ወደ አድማጭ FOU ይሄዳሉ።
ለማያውቁት፣ nfqueue (ወይም NetfilterQueue) የከርነል ሞጁሎችን እንዴት ማዳበር እንዳለባቸው ለማያውቁ አማተሮች ልዩ ነገር ነው፣ ይህም netfilter (nftables/iptables) በመጠቀም የአውታረ መረብ ፓኬጆችን ወደ ተጠቃሚ ቦታ እንዲያዞሩ እና እዚያ እንዲሰሩ ያስችላቸዋል። ጥንታዊ ማለት በእጅ ነው፡ አሻሽለው (አማራጭ) እና ወደ ከርነል መልሰው ይስጡት፣ ወይም ያስወግዱት።
ለአንዳንድ የፕሮግራም አወጣጥ ቋንቋዎች ከ nfqueue ጋር ለመስራት ማያያዣዎች አሉ ፣ ለ bash ምንም አልነበረም (ሄህ ፣ አያስደንቅም) ፣ ፓይቶን መጠቀም ነበረብኝ-ipipou ይጠቀማል።
አፈፃፀሙ ወሳኝ ካልሆነ፣ ይህን ነገር በመጠቀም በአንፃራዊነት በፍጥነት እና በቀላሉ በዝቅተኛ ደረጃ ከፓኬቶች ጋር ለመስራት የእራስዎን አመክንዮ ማቀናጀት ይችላሉ ፣ ለምሳሌ ፣ የሙከራ ውሂብ ማስተላለፍ ፕሮቶኮሎችን ይፍጠሩ ፣ ወይም የአካባቢ እና የርቀት አገልግሎቶችን መደበኛ ባልሆነ ባህሪ ማዞር።
ጥሬ ሶኬቶች ከ nfqueue ጋር እጅ ለእጅ ተያይዘው ይሰራሉ፣ ለምሳሌ ዋሻው አስቀድሞ ሲዋቀር እና FOU በሚፈለገው ወደብ ላይ ሲያዳምጥ በተለመደው መንገድ ከተመሳሳይ ወደብ ፓኬት መላክ አይችሉም - ስራ በዝቶበታል ነገር ግን ጥሬ ሶኬትን በመጠቀም በዘፈቀደ የተፈጠረ ፓኬት በቀጥታ ወደ አውታረ መረቡ በይነገጽ መላክ እና መላክ ይችላሉ፣ ምንም እንኳን እንደዚህ አይነት ፓኬት ማመንጨት ትንሽ ተጨማሪ ቲንክኪንግ ይጠይቃል። በippou ውስጥ ማረጋገጫ ያላቸው ፓኬቶች የሚፈጠሩት በዚህ መንገድ ነው።
Ipipou ከግንኙነቱ የመጀመሪያዎቹን እሽጎች ብቻ ስለሚያከናውን (እና ግንኙነቱ ከመፈጠሩ በፊት ወደ ወረፋው ለመግባት የቻሉት) አፈፃፀም አይጎዳም።
የአይፒፖው አገልጋይ የተረጋገጠ ፓኬት እንደተቀበለ ዋሻ ይፈጠራል እና በግንኙነቱ ውስጥ ያሉት ሁሉም ተከታይ ፓኬቶች በ kernel bypassing nfqueue ይዘጋጃሉ። ግንኙነቱ ካልተሳካ የሚቀጥለው የመጀመሪያው ፓኬት ወደ nfqueue ወረፋ ይላካል እንደ ቅንጅቶቹ ላይ በመመስረት ፣ እሱ ማረጋገጫ ያለው ፓኬት ካልሆነ ፣ ግን ከመጨረሻው ከታወሰው የአይፒ እና የደንበኛ ወደብ ፣ ወይም ሊያልፍ ይችላል። ላይ ወይም የተጣለ. የተረጋገጠ ፓኬት ከአዲስ አይፒ እና ወደብ ከመጣ፣ ዋሻው እነሱን ለመጠቀም እንደገና ተዋቅሯል።
ከ NAT ጋር ሲሰራ የተለመደው IPIP-over-FOU አንድ ተጨማሪ ችግር አለበት - በ UDP ውስጥ ከተመሳሳይ አይፒ ጋር የተከለሉ ሁለት የአይፒአይፒ ዋሻዎችን መፍጠር አይቻልም ፣ ምክንያቱም የ FOU እና IPIP ሞጁሎች አንዳቸው ከሌላው በጣም የተገለሉ ናቸው። እነዚያ። ከተመሳሳዩ ይፋዊ አይፒ ጀርባ ያሉ ጥንድ ደንበኞች በዚህ መንገድ ከአንድ አገልጋይ ጋር በአንድ ጊዜ መገናኘት አይችሉም። ወደፊት,
ምክንያቱም በግንኙነቱ ውስጥ ያሉት ሁሉም እሽጎች የተፈረሙ አይደሉም ፣ ከዚያ ይህ ቀላል ጥበቃ ለ MITM የተጋለጠ ነው ፣ ስለሆነም በደንበኛው እና በአገልጋዩ መካከል ባለው መንገድ ላይ አድብቶ የትራፊክ ፍሰትን የሚያዳምጥ እና የሚጠቀም ተንኮለኛ ካለ ፣ የተረጋገጡ ፓኬቶችን ወደ ሌላ አቅጣጫ ማዞር ይችላል ። ሌላ አድራሻ እና ከማይታመን አስተናጋጅ ዋሻ ይፍጠሩ .
ትልቁን የትራፊክ መጨናነቅ በሚተውበት ጊዜ ይህንን እንዴት ማስተካከል እንዳለበት ማንም ሀሳብ ካለው፣ ለመናገር አያመንቱ።
በነገራችን ላይ, በ UDP ውስጥ ማሸግ እራሱን በደንብ አረጋግጧል. በአይፒ ላይ ከማሸግ ጋር ሲነፃፀር የ UDP ራስጌ ተጨማሪ ራስጌ ቢሆንም በጣም የተረጋጋ እና ብዙ ጊዜ ፈጣን ነው። ይህ የሆነበት ምክንያት በበይነመረብ ላይ ያሉ አብዛኛዎቹ አስተናጋጆች በጥሩ ሁኔታ የሚሰሩት በሶስት ታዋቂ ፕሮቶኮሎች ብቻ ነው-TCP ፣ UDP ፣ ICMP። የሚዳሰሰው ክፍል ሌላውን ነገር ሙሉ በሙሉ ሊጥለው ወይም በዝግታ ሊሰራው ይችላል ምክንያቱም ለእነዚህ ሶስት ብቻ የተመቻቸ ነው።
ለምሳሌ፣ ኤችቲቲፒ/3 የተመሰረተው ፈጣን በ UDP ላይ እንጂ በአይፒ አናት ላይ የተፈጠረው ለዚህ ነው።
ደህና, በቂ ቃላት, በ "እውነተኛው ዓለም" ውስጥ እንዴት እንደሚሰራ ለማየት ጊዜው አሁን ነው.
ጦርነት
የገሃዱ አለምን ለመምሰል ያገለግል ነበር። iperf3
. ከእውነታው ጋር ካለው ቅርበት ደረጃ አንጻር ሲታይ ይህ በ Minecraft ውስጥ ያለውን እውነተኛውን ዓለም ከመኮረጅ ጋር ተመሳሳይ ነው, አሁን ግን ያደርገዋል.
የውድድሩ ተሳታፊዎች፡-
- የማጣቀሻ ዋና ቻናል
- የዚህ ጽሑፍ ጀግና ipipou ነው
- ከማረጋገጫ ጋር ክፈት ግን ምስጠራ የለም።
- ሁሉንም ባካተተ ሁነታ ክፈት
- WireGuard ያለ PresharedKey፣ በMTU=1440 (ከIPv4-ብቻ ጀምሮ)
ለጂኪዎች ቴክኒካዊ መረጃዎች
መለኪያዎች የሚወሰዱት በሚከተሉት ትዕዛዞች ነው።
በደንበኛው ላይ:
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 መዘግየት
ping -c 10 SERVER_IP | tail -1
በአገልጋዩ ላይ (ከደንበኛው ጋር በአንድ ጊዜ ይሰራል)
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"
መሿለኪያ ውቅር
አይፒፖው
አገልጋይ
/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
ደንበኛ
/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 (ምስጠራ የለም፣ ከማረጋገጫ ጋር)
አገልጋይ
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
ደንበኛ
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 (ከምስጠራ፣ ከማረጋገጫ፣ በUDP በኩል፣ ሁሉም ነገር እንደተጠበቀው)
በመጠቀም የተዋቀረ
ሽቦ
አገልጋይ
/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
ደንበኛ
/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
ውጤቶች
እርጥብ አስቀያሚ ምልክት
የአገልጋይ ሲፒዩ ጭነት በጣም አመላካች አይደለም፣ ምክንያቱም... ሌሎች ብዙ አገልግሎቶች እዚያ እየሰሩ ናቸው፣ አንዳንድ ጊዜ ሃብት ይበላሉ፡-
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
20Mbps ቻናል
ቻናል በ1 ብሩህ Gbps
በሁሉም ሁኔታዎች ippou ከመሠረታዊ ቻናል ጋር በአፈፃፀም በጣም ቅርብ ነው ፣ ይህም በጣም ጥሩ ነው!
ያልተመሰጠረው openvpn tonel በሁለቱም ሁኔታዎች እንግዳ የሆነ ባህሪ አሳይቷል።
ማንም ሊፈትነው ከሆነ, አስተያየት መስማት አስደሳች ይሆናል.
IPv6 እና NetPrickle ከእኛ ጋር ይሁኑ!
ምንጭ: hab.com