ipipou: ื™ื•ืชืจ ืžืกืชื ืžื ื”ืจื” ืœื ืžื•ืฆืคื ืช

ืžื” ืื ื—ื ื• ืื•ืžืจื™ื ืœืืœื•ื”ื™ ื”-IPv6?

ipipou: ื™ื•ืชืจ ืžืกืชื ืžื ื”ืจื” ืœื ืžื•ืฆืคื ืช
ื–ื” ื ื›ื•ืŸ, ืื ื—ื ื• ื ื’ื™ื“ ืืช ืื•ืชื• ื”ื“ื‘ืจ ืœืืœื•ื”ื™ ื”ื”ืฆืคื ื” ื”ื™ื•ื.

ื›ืืŸ ื ื“ื‘ืจ ืขืœ ืžื ื”ืจืช IPv4 ืœื ืžื•ืฆืคื ืช, ืื‘ืœ ืœื ืขืœ "ืžื ื•ืจื” ื—ืžื”", ืืœื ืขืœ "LED" ืžื•ื“ืจื ื™ืช. ื•ื™ืฉ ื›ืืŸ ื’ื ืฉืงืขื™ื ื’ื•ืœืžื™ื™ื ืžื”ื‘ื”ื‘ื™ื, ื•ืžืชื ื”ืœืช ืขื‘ื•ื“ื” ืขื ืžื ื•ืช ื‘ื—ืœืœ ื”ืžืฉืชืžืฉ.

ื™ืฉื ื N ืคืจื•ื˜ื•ืงื•ืœื™ ืžื ื”ื•ืจ ืœื›ืœ ื˜ืขื ื•ืฆื‘ืข:

  • ืžืกื•ื’ื ืŸ, ืื•ืคื ืชื™, ืฆืขื™ืจ WireGuard
  • ืจื‘ ืชื›ืœื™ืชื™, ื›ืžื• ืกื›ื™ื ื™ื ืฉื•ื•ื™ืฆืจื™ื•ืช, OpenVPN ื•-SSH
  • ื™ืฉืŸ ื•ืœื ืžืจื•ืฉืข GRE
  • ื”-IPIP ื”ืคืฉื•ื˜, ื”ืžื”ื™ืจ ื•ื”ืœื ืžื•ืฆืคืŸ ืœื—ืœื•ื˜ื™ืŸ
  • ืžืชืคืชื— ื‘ืื•ืคืŸ ืคืขื™ืœ ื–'ื ื‘ื”
  • ืจื‘ื™ื ืื—ืจื™ื.

ืื‘ืœ ืื ื™ ืžืชื›ื ืช, ืื– ืื ื™ ืื’ื“ื™ืœ ืืช N ืจืง ื‘ืฉื‘ืจื™ืจ, ื•ืืฉืื™ืจ ืืช ื”ืคื™ืชื•ื— ืฉืœ ืคืจื•ื˜ื•ืงื•ืœื™ื ืืžื™ืชื™ื™ื ืœืžืคืชื—ื™ ืงื•ืžืจืกื ื˜.

ื‘ืื—ื“ ืฉื˜ืจื ื ื•ืœื“ ืืช ื”ืคืจื•ื™ืงื˜ืžื” ืฉืื ื™ ืขื•ืฉื” ืขื›ืฉื™ื• ื–ื” ืœื”ื’ื™ืข ืœืžืืจื—ื™ื ืžืื—ื•ืจื™ NAT โ€‹โ€‹ืžื‘ื—ื•ืฅ. ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœื™ื ืขื ื”ืฆืคื ื” ืœืžื‘ื•ื’ืจื™ื ื‘ืฉื‘ื™ืœ ื–ื”, ืœื ื™ื›ื•ืœืชื™ ืœื”ืฉืชื—ืจืจ ืžื”ืชื—ื•ืฉื” ืฉื–ื” ื›ืžื• ืœื™ืจื•ืช ื“ืจื•ืจื™ื ืžืชื•ืš ืชื•ืชื—. ื›ื™ ื”ืžื ื”ืจื” ืžืฉืžืฉืช ืœืจื•ื‘ ืจืง ื›ื“ื™ ืœื ืขื•ืฅ ื—ื•ืจื™ื ื‘-NAT-e, ืชืขื‘ื•ืจื” ืคื ื™ืžื™ืช ื‘ื“ืจืš ื›ืœืœ ื’ื ืžื•ืฆืคื ืช, ืื‘ืœ ื”ื ืขื“ื™ื™ืŸ ื˜ื•ื‘ืขื™ื ื‘-HTTPS.

ืชื•ืš ื›ื“ื™ ืžื—ืงืจ ืฉืœ ืคืจื•ื˜ื•ืงื•ืœื™ ืžื ื”ื•ืจ ืฉื•ื ื™ื, ืชืฉื•ืžืช ื”ืœื‘ ืฉืœ ื”ืคืจืคืงืฆื™ื•ื ื™ืกื˜ ื”ืคื ื™ืžื™ ืฉืœื™ ื”ื•ืคื ืชื” ืœ-IPIP ืฉื•ื‘ ื•ืฉื•ื‘ ื‘ื’ืœืœ ื”ืชืงื•ืจื” ื”ืžื™ื ื™ืžืœื™ืช ืฉืœื•. ืื‘ืœ ื™ืฉ ืœื• ื—ืกืจื•ื ื•ืช ืžืฉืžืขื•ืชื™ื™ื ืื—ื“ ื•ื—ืฆื™ ืœืžืฉื™ืžื•ืช ืฉืœื™:

  • ื–ื” ื“ื•ืจืฉ ื›ืชื•ื‘ื•ืช IP ืฆื™ื‘ื•ืจื™ื•ืช ืžืฉื ื™ ื”ืฆื“ื“ื™ื,
  • ื•ืœืœื ืื™ืžื•ืช ืขื‘ื•ืจืš.

ืœื›ืŸ, ื”ืคืจืคืงืฆื™ื•ื ื™ืกื˜ ื ื“ื—ืฃ ื‘ื—ื–ืจื” ืœืคื™ื ื” ื”ืืคืœื” ืฉืœ ื”ื’ื•ืœื’ื•ืœืช, ืื• ืœืืŸ ืฉื”ื•ื ื™ื•ืฉื‘ ืฉื.

ื•ืื– ื™ื•ื ืื—ื“, ืชื•ืš ื›ื“ื™ ืงืจื™ืืช ืžืืžืจื™ื ื‘ื ื•ืฉื ืžื ื”ืจื•ืช ื”ื ืชืžื›ื•ืช ื‘ืื•ืคืŸ ืžืงื•ืจื™ ื‘ืœื™ื ื•ืงืก ื ืชืงืœืชื™ ื‘-FOU (Foo-over-UDP), ื›ืœื•ืžืจ. ืžื” ืฉืœื ื™ื”ื™ื”, ืขื˜ื•ืฃ ื‘-UDP. ืขื“ ื›ื”, ืจืง IPIP ื•-GUE (Encapsulation Generic UDP) ื ืชืžื›ื™ื.

"ื”ื ื” ื›ื“ื•ืจ ื”ื›ืกืฃ! ืžืกืคื™ืง ืœื™ IPIP ืคืฉื•ื˜". - ื—ืฉื‘ืชื™.

ืœืžืขืฉื”, ื”ืชื‘ืจืจ ืฉื”ื›ื“ื•ืจ ืื™ื ื• ื›ืกื•ืฃ ืœื—ืœื•ื˜ื™ืŸ. ืื ืงืคืกื•ืœืฆื™ื” ื‘-UDP ืคื•ืชืจืช ืืช ื”ื‘ืขื™ื” ื”ืจืืฉื•ื ื” - ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ืœืœืงื•ื—ื•ืช ืžืื—ื•ืจื™ NAT โ€‹โ€‹ืžื‘ื—ื•ืฅ ื‘ืืžืฆืขื•ืช ื—ื™ื‘ื•ืจ ืฉื ืงื‘ืข ืžืจืืฉ, ืื‘ืœ ื›ืืŸ ื—ืฆื™ ืžื”ื—ื™ืกืจื•ืŸ ื”ื‘ื ืฉืœ IPIP ืคื•ืจื— ื‘ืื•ืจ ื—ื“ืฉ - ื›ืœ ืื—ื“ ืžืจืฉืช ืคืจื˜ื™ืช ื™ื›ื•ืœ ืœื”ืกืชืชืจ ืžืื—ื•ืจื™ ื”ื’ืœื•ื™ IP ืฆื™ื‘ื•ืจื™ ื•ื™ืฆื™ืืช ืœืงื•ื— (ื‘-IPIP ื˜ื”ื•ืจ ื‘ืขื™ื” ื–ื• ืœื ืงื™ื™ืžืช).

ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื•ื—ืฆื™ ื–ื•, ื ื•ืœื“ ื›ืœื™ ื”ืฉื™ืจื•ืช ipipou. ื”ื•ื ืžื™ื™ืฉื ืžื ื’ื ื•ืŸ ืชื•ืฆืจืช ื‘ื™ืช ืœืื™ืžื•ืช ืžืืจื— ืžืจื•ื—ืง, ืžื‘ืœื™ ืœืฉื‘ืฉ ืืช ืคืขื•ืœืช ื”-FOU ืฉืœ ื”ืœื™ื‘ื”, ืฉื™ืขื‘ื“ ื‘ืžื”ื™ืจื•ืช ื•ื‘ื™ืขื™ืœื•ืช ืžื ื•ืช ื‘ื—ืœืœ ื”ืœื™ื‘ื”.

ืื ื—ื ื• ืœื ืฆืจื™ื›ื™ื ืืช ื”ืชืกืจื™ื˜ ืฉืœืš!

ืื•ืงื™ื™, ืื ืืชื” ื™ื•ื“ืข ืืช ื”ื™ืฆื™ืื” ื”ืฆื™ื‘ื•ืจื™ืช ื•ื”-IP ืฉืœ ื”ืœืงื•ื— (ืœื“ื•ื’ืžื”, ื›ื•ืœื ืžืื—ื•ืจื™ ื–ื” ืœื ื”ื•ืœื›ื™ื ืœืฉื•ื ืžืงื•ื, 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 - ืฉืจืช IP ืฆื™ื‘ื•ืจื™
  • 198.51.100.2 - IP ืฆื™ื‘ื•ืจื™ ืฉืœ ื”ืœืงื•ื—
  • 192.168.0.2 - IP ืœืงื•ื— ืฉื”ื•ืงืฆื” ืœืžืžืฉืง eth0
  • 10001 - ื™ืฆื™ืืช ืœืงื•ื— ืžืงื•ืžื™ ืขื‘ื•ืจ FOU
  • 20001 - ื ืžืœ ืœืงื•ื— ืฆื™ื‘ื•ืจื™ ืขื‘ื•ืจ FOU
  • 10000 - ื™ืฆื™ืืช ืฉืจืช ืฆื™ื‘ื•ืจื™ืช ืขื‘ื•ืจ FOU
  • encap-csum - ืืคืฉืจื•ืช ืœื”ื•ืกื™ืฃ ืกื›ื•ื ื‘ื™ืงื•ืจืช UDP ืœืžื ื•ืช UDP ืžื•ื‘ืœืขื•ืช; ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ ืขืœ ื™ื“ื™ noencap-csumืฉืœื ืœื“ื‘ืจ, ื”ืฉืœืžื•ืช ื›ื‘ืจ ื ืฉืœื˜ืช ืขืœ ื™ื“ื™ ืฉื›ื‘ืช ื”ืžืขื˜ืคืช ื”ื—ื™ืฆื•ื ื™ืช (ื‘ื–ืžืŸ ืฉื”ื—ื‘ื™ืœื” ื ืžืฆืืช ื‘ืชื•ืš ื”ืžื ื”ืจื”)
  • eth0 - ืžืžืฉืง ืžืงื•ืžื™ ืฉืืœื™ื• ืชื”ื™ื” ืงืฉื•ืจื” ืžื ื”ืจืช ipip
  • 172.28.0.1 - IP ืฉืœ ืžืžืฉืง ืžื ื”ืจืช ื”ืœืงื•ื— (ืคืจื˜ื™)
  • 172.28.0.0 - ืžืžืฉืง ืฉืจืช ืžื ื”ืจืช IP (ืคืจื˜ื™)

ื›ืœ ืขื•ื“ ื—ื™ื‘ื•ืจ ื”-UDP ื—ื™, ื”ืžื ื”ืจื” ืชื”ื™ื” ืชืงื™ื ื”, ืื‘ืœ ืื ื”ื™ื ืชื™ืฉื‘ืจ, ื™ื”ื™ื” ืœืš ืžื–ืœ - ืื ื”-IP: port ืฉืœ ื”ืœืงื•ื— ื™ื™ืฉืืจ ื–ื”ื” - ื”ื™ื ืชืคืขืœ, ืื ื™ืฉืชื ื• - ื”ื™ื ืชื™ืฉื‘ืจ.

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื”ื—ื–ื™ืจ ื”ื›ืœ ืœืื—ื•ืจ ื”ื™ื ืœืคืจื•ืง ืืช ืžื•ื“ื•ืœื™ ื”ืœื™ื‘ื”: modprobe -r fou ipip

ื’ื ืื ืœื ื ื“ืจืฉ ืื™ืžื•ืช, ื”-IP ื•ื”ื™ืฆื™ืื” ื”ืฆื™ื‘ื•ืจื™ื™ื ืฉืœ ื”ืœืงื•ื— ืœื ืชืžื™ื“ ื™ื“ื•ืขื™ื ื•ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื”ื ื‘ืœืชื™ ืฆืคื•ื™ื™ื ืื• ืžืฉืชื ื™ื (ื‘ื”ืชืื ืœืกื•ื’ ื”-NAT). ืื ืชืฉืžื™ื˜ encap-dport ื‘ืฆื“ ื”ืฉืจืช, ื”ืžื ื”ืจื” ืœื ืชืขื‘ื•ื“, ื”ื™ื ืœื ื—ื›ืžื” ืžืกืคื™ืง ืœืงื—ืช ืืช ื™ืฆื™ืืช ื”ื—ื™ื‘ื•ืจ ื”ืžืจื•ื—ืง. ื‘ืžืงืจื” ื–ื”, ipipou ื™ื›ื•ืœ ื’ื ืœืขื–ื•ืจ, ืื• WireGuard ื•ืื—ืจื™ื ื“ื•ืžื™ื ืœื• ื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ืœืš.

ืื™ืš ื–ื” ืขื•ื‘ื“?

ื”ืœืงื•ื— (ืฉื ืžืฆื ื‘ื“ืจืš ื›ืœืœ ืžืื—ื•ืจื™ NAT) ืคื•ืชื— ืžื ื”ืจื” (ื›ืžื• ื‘ื“ื•ื’ืžื” ืœืžืขืœื”), ื•ืฉื•ืœื— ื—ื‘ื™ืœืช ืื™ืžื•ืช ืœืฉืจืช ื›ืš ืฉื”ื•ื ื™ื’ื“ื™ืจ ืืช ื”ืžื ื”ืจื” ื‘ืฆื“ ืฉืœื”. ื‘ื”ืชืื ืœื”ื’ื“ืจื•ืช, ื–ื• ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื—ื‘ื™ืœื” ืจื™ืงื” (ืจืง ื›ื“ื™ ืฉื”ืฉืจืช ื™ื•ื›ืœ ืœืจืื•ืช ืืช ื”-IP ื”ืฆื™ื‘ื•ืจื™: ื™ืฆื™ืืช ื”ื—ื™ื‘ื•ืจ), ืื• ืขื ื ืชื•ื ื™ื ืฉื‘ืืžืฆืขื•ืชื ื”ืฉืจืช ื™ื›ื•ืœ ืœื–ื”ื•ืช ืืช ื”ืœืงื•ื—. ื”ื ืชื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื‘ื™ื˜ื•ื™ ืกื™ืกืžื” ืคืฉื•ื˜ ื‘ื˜ืงืกื˜ ื‘ืจื•ืจ (ื”ืื ืœื•ื’ื™ื” ืขื HTTP Basic Auth ืขื•ืœื” ื‘ืจืืฉ) ืื• ื ืชื•ื ื™ื ืฉืขื•ืฆื‘ื• ื‘ืžื™ื•ื—ื“ ื—ืชื•ืžื™ื ืขื ืžืคืชื— ืคืจื˜ื™ (ื‘ื“ื•ืžื” ืœ-HTTP Digest Auth ืจืง ื—ื–ืง ื™ื•ืชืจ, ืจืื” ืคื•ื ืงืฆื™ื” client_auth ื‘ืงื•ื“).

ื‘ืฉืจืช (ื”ืฆื“ ืขื ื”-IP ื”ืฆื™ื‘ื•ืจื™), ื›ืืฉืจ ipipou ืžืชื—ื™ืœ, ื”ื•ื ื™ื•ืฆืจ ืžื˜ืคืœ ื‘ืชื•ืจ nfqueue ื•ืžื’ื“ื™ืจ netfilter ื›ืš ืฉื”ืžื ื•ืช ื”ื“ืจื•ืฉื•ืช ื™ื™ืฉืœื—ื• ืœืืŸ ืฉื”ืŸ ืฆืจื™ื›ื•ืช ืœื”ื™ื•ืช: ืžื ื•ืช ืžืืชื—ืœื•ืช ืืช ื”ื—ื™ื‘ื•ืจ ืœืชื•ืจ nfqueue, ื•-[ื›ืžืขื˜] ื›ืœ ื”ืฉืืจ ื”ื•ืœื›ื™ื ื™ืฉืจ ืœ-FOU ื”ืžืื–ื™ืŸ.

ืœืžื™ ืฉืœื ืžื›ื™ืจ, nfqueue (ืื• NetfilterQueue) ื”ื•ื ื“ื‘ืจ ืžื™ื•ื—ื“ ืœื—ื•ื‘ื‘ื™ื ืฉืื™ื ื ื™ื•ื“ืขื™ื ืœืคืชื— ืžื•ื“ื•ืœื™ ืœื™ื‘ื”, ืืฉืจ ื‘ืืžืฆืขื•ืช netfilter (nftables/iptables) ืžืืคืฉืจื™ื ืœื”ืคื ื•ืช ืžื ื•ืช ืจืฉืช ืœืžืจื—ื‘ ื”ืžืฉืชืžืฉ ื•ืœืขื‘ื“ ืื•ืชืŸ ืฉื ื‘ืืžืฆืขื•ืช ืืžืฆืขื™ ืคืจื™ืžื™ื˜ื™ื‘ื™ ื‘ื”ื™ืฉื’ ื™ื“: ืœืฉื ื•ืช (ืื•ืคืฆื™ื•ื ืœื™) ื•ืœื”ื—ื–ื™ืจ ืื•ืชื• ืœื’ืจืขื™ืŸ, ืื• ืœื”ืฉืœื™ืš ืื•ืชื•.

ืขื‘ื•ืจ ื›ืžื” ืฉืคื•ืช ืชื›ื ื•ืช ื™ืฉ bindings ืœืขื‘ื•ื“ื” ืขื nfqueue, ืขื‘ื•ืจ bash ืœื ื”ื™ื” ื›ื–ื” (ื”ื”, ืœื ืžืคืชื™ืข), ื”ื™ื™ืชื™ ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘-python: ipipou ืžืฉืชืžืฉ Netfilter Queue.

ืื ื”ื‘ื™ืฆื•ืขื™ื ืื™ื ื ืงืจื™ื˜ื™ื™ื, ื‘ืืžืฆืขื•ืช ื”ื“ื‘ืจ ื”ื–ื” ืืชื” ื™ื›ื•ืœ ืœืจืงื•ื— ื‘ืžื”ื™ืจื•ืช ื•ื‘ืงืœื•ืช ื™ื—ืกื™ืช ืืช ื”ื”ื™ื’ื™ื•ืŸ ืฉืœืš ืœืขื‘ื•ื“ื” ืขื ืžื ื•ืช ื‘ืจืžื” ื ืžื•ื›ื” ืœืžื“ื™, ืœืžืฉืœ, ืœื™ืฆื•ืจ ืคืจื•ื˜ื•ืงื•ืœื™ื ื ื™ืกื™ื•ื ื™ื™ื ืœื”ืขื‘ืจืช ื ืชื•ื ื™ื, ืื• ืœื ื˜ืจืœ ืฉื™ืจื•ืชื™ื ืžืงื•ืžื™ื™ื ื•ืžืจื•ื—ืงื™ื ืขื ื”ืชื ื”ื’ื•ืช ืœื ืกื˜ื ื“ืจื˜ื™ืช.

ืฉืงืขื™ Raw ืขื•ื‘ื“ื™ื ื™ื“ ื‘ื™ื“ ืขื nfqueue, ืœืžืฉืœ, ื›ืืฉืจ ื”ืžื ื”ืจื” ื›ื‘ืจ ืžื•ื’ื“ืจืช ื•-FOU ืžืื–ื™ืŸ ื‘ื™ืฆื™ืื” ื”ืจืฆื•ื™ื”, ืœื ืชื•ื›ืœ ืœืฉืœื•ื— ื—ื‘ื™ืœื” ืžืื•ืชื” ื™ืฆื™ืื” ื‘ื“ืจืš ื”ืจื’ื™ืœื” - ื”ื™ื ืชืคื•ืกื”, ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœืงื—ืช ื•ืœืฉืœื•ื— ื—ื‘ื™ืœื” ืฉื ื•ืฆืจื” ื‘ืื•ืคืŸ ืืงืจืื™ ื™ืฉื™ืจื•ืช ืœืžืžืฉืง ื”ืจืฉืช ื‘ืืžืฆืขื•ืช ืฉืงืข ื’ื•ืœืžื™, ืื ื›ื™ ื™ืฆื™ืจืช ื—ื‘ื™ืœื” ื›ื–ื• ืชื“ืจื•ืฉ ืงืฆืช ื™ื•ืชืจ ื”ืชืขืกืงื•ืช. ื›ืš ื ื•ืฆืจื•ืช ืžื ื•ืช ืขื ืื™ืžื•ืช ื‘-ipipou.

ืžื›ื™ื•ื•ืŸ ืฉ-ipipou ืžืขื‘ื“ ืจืง ืืช ื”ื—ื‘ื™ืœื•ืช ื”ืจืืฉื•ื ื•ืช ืžื”ื—ื™ื‘ื•ืจ (ื•ืืœื• ืฉื”ืฆืœื™ื—ื• ืœื“ืœื•ืฃ ืœืชื•ืจ ืœืคื ื™ ื™ืฆื™ืจืช ื”ื—ื™ื‘ื•ืจ), ื”ื‘ื™ืฆื•ืขื™ื ื›ืžืขื˜ ื•ืœื ืกื•ื‘ืœื™ื.

ื‘ืจื’ืข ืฉืฉืจืช ipipou ืžืงื‘ืœ ื—ื‘ื™ืœื” ืžืื•ืžืชืช, ื ื•ืฆืจืช ืžื ื”ืจื” ื•ื›ืœ ื”ื—ื‘ื™ืœื•ืช ื”ื‘ืื•ืช ื‘ื—ื™ื‘ื•ืจ ื›ื‘ืจ ืžืขื•ื‘ื“ื•ืช ืขืœ ื™ื“ื™ ื”ืœื™ื‘ื” ื”ืขื•ืงืคืช ืืช nfqueue. ืื ื”ื—ื™ื‘ื•ืจ ื ื›ืฉืœ, ื”ื—ื‘ื™ืœื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ื‘ืื” ืชื™ืฉืœื— ืœืชื•ืจ nfqueue, ื‘ื”ืชืื ืœื”ื’ื“ืจื•ืช, ืื ื–ื• ืœื ื—ื‘ื™ืœื” ืขื ืื™ืžื•ืช, ืืœื ืžื”-IP ื”ืื—ืจื•ืŸ ืฉื ื–ื›ืจื• ื•ื™ืฆื™ืืช ื”ืœืงื•ื—, ืืคืฉืจ ืœื”ืขื‘ื™ืจ ืื•ืชื”. ืžื•ืคืขืœ ืื• ื ื–ืจืง. ืื ื—ื‘ื™ืœื” ืžืื•ืžืชืช ืžื’ื™ืขื” ืž-IP ื•ื™ืฆื™ืื” ื—ื“ืฉื™ื, ื”ืžื ื”ืจื” ืžื•ื’ื“ืจืช ืžื—ื“ืฉ ืœืฉื™ืžื•ืฉ ื‘ื”ื.

ืœ-IPIP-over-FOU ื”ืจื’ื™ืœ ื™ืฉ ื‘ืขื™ื” ื ื•ืกืคืช ื‘ืขื‘ื•ื“ื” ืขื NAT - ืื™ ืืคืฉืจ ืœื™ืฆื•ืจ ืฉืชื™ ืžื ื”ืจื•ืช IPIP ืžื•ื‘ืœืขื•ืช ื‘-UDP ืขื ืื•ืชื• IP, ืžื›ื™ื•ื•ืŸ ืฉื”ืžื•ื“ื•ืœื™ื ืฉืœ ื”-FOU ื•ื”-IPIP ื“ื™ ืžื‘ื•ื“ื“ื™ื ืื—ื“ ืžื”ืฉื ื™. ื”ึธื”ึตืŸ. ื–ื•ื’ ืœืงื•ื—ื•ืช ืžืื—ื•ืจื™ ืื•ืชื• IP ืฆื™ื‘ื•ืจื™ ืœื ื™ื•ื›ืœื• ืœื”ืชื—ื‘ืจ ื‘ื• ื–ืžื ื™ืช ืœืื•ืชื• ืฉืจืช ื‘ื“ืจืš ื–ื•. ื‘ืขืชื™ื“, ืื•ืœื™, ื–ื” ื™ื™ืคืชืจ ื‘ืจืžืช ื”ืงืจื ืœ, ืื‘ืœ ื–ื” ืœื ื‘ื˜ื•ื—. ื‘ื™ื ืชื™ื™ื ื ื™ืชืŸ ืœืคืชื•ืจ ื‘ืขื™ื•ืช NAT ืขืœ ื™ื“ื™ NAT โ€‹โ€‹- ืื ืงื•ืจื” ืฉื–ื•ื’ ื›ืชื•ื‘ื•ืช IP ื›ื‘ืจ ืชืคื•ืกื•ืช ืขืœ ื™ื“ื™ ืžื ื”ืจื” ืื—ืจืช, ipipou ืชืขืฉื” NAT ืžืฆื™ื‘ื•ืจ ืœ-IP ืคืจื˜ื™ ื—ืœื•ืคื™, ื•ื•ืืœื”! - ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžื ื”ืจื•ืช ืขื“ ืฉื™ื™ื’ืžืจื• ื”ื™ืฆื™ืื•ืช.

ื›ื™ ืœื ื›ืœ ื”ื—ื‘ื™ืœื•ืช ื‘ื—ื™ื‘ื•ืจ ื—ืชื•ืžื•ืช, ืื– ื”ื”ื’ื ื” ื”ืคืฉื•ื˜ื” ื”ื–ื• ืคื’ื™ืขื” ืœ-MITM, ื›ืš ืฉืื ื™ืฉ ื ื‘ืœ ืฉืื•ืจื‘ ืขืœ ื”ื ืชื™ื‘ ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช ืฉื™ื›ื•ืœ ืœื”ืื–ื™ืŸ ืœืชืขื‘ื•ืจื” ื•ืœืชืคืขืœ ืื•ืชื”, ื”ื•ื ื™ื›ื•ืœ ืœื”ืคื ื•ืช ืžื ื•ืช ืžืื•ืžืชื•ืช ื“ืจืš ื›ืชื•ื‘ืช ืื—ืจืช ื•ืฆื•ืจ ืžื ื”ืจื” ืžืžืืจื— โ€‹โ€‹ืœื ืžื”ื™ืžืŸ.

ืื ืœืžื™ืฉื”ื• ื™ืฉ ืจืขื™ื•ื ื•ืช ื›ื™ืฆื“ ืœืชืงืŸ ื–ืืช ืชื•ืš ื”ืฉืืจืช ืขื™ืงืจ ื”ืชื ื•ืขื” ื‘ืœื™ื‘ื”, ืืœ ืชื”ืกืกื• ืœื“ื‘ืจ.

ืื’ื‘, ืื ืงืคืกื•ืœืฆื™ื” ื‘-UDP ื”ื•ื›ื™ื—ื” ืืช ืขืฆืžื” ื”ื™ื˜ื‘. ื‘ื”ืฉื•ื•ืื” ืœ-encapsulation over IP, ื”ื•ื ื”ืจื‘ื” ื™ื•ืชืจ ื™ืฆื™ื‘ ื•ืœืขื™ืชื™ื ืžื”ื™ืจ ื™ื•ืชืจ ืœืžืจื•ืช ื”ืชืงื•ืจื” ื”ื ื•ืกืคืช ืฉืœ ื›ื•ืชืจืช UDP. ื–ืืช ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉืจื•ื‘ ื”ืžืืจื—ื™ื ื‘ืื™ื ื˜ืจื ื˜ ืขื•ื‘ื“ื™ื ื”ื™ื˜ื‘ ืจืง ืขื ืฉืœื•ืฉืช ื”ืคืจื•ื˜ื•ืงื•ืœื™ื ื”ืคื•ืคื•ืœืจื™ื™ื ื‘ื™ื•ืชืจ: TCP, UDP, ICMP. ื”ื—ืœืง ื”ืžื•ื—ืฉื™ ื™ื›ื•ืœ ืœื”ืฉืœื™ืš ืœื—ืœื•ื˜ื™ืŸ ืืช ื›ืœ ื”ืฉืืจ, ืื• ืœืขื‘ื“ ืื•ืชื• ืœืื˜ ื™ื•ืชืจ, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžื•ืชืื ืจืง ืœืฉืœื•ืฉื” ืืœื”.

ืœื“ื•ื’ืžื”, ื–ื• ื”ืกื™ื‘ื” ืฉ-QUICK, ืฉืขืœื™ื• ืžื‘ื•ืกืก HTTP/3, ื ื•ืฆืจ ืขืœ ื’ื‘ื™ UDP, ื•ืœื ืขืœ ื’ื‘ื™ IP.

ื•ื‘ื›ืŸ, ืžืกืคื™ืง ืžื™ืœื™ื, ื”ื’ื™ืข ื”ื–ืžืŸ ืœืจืื•ืช ืื™ืš ื–ื” ืขื•ื‘ื“ ื‘"ืขื•ืœื ื”ืืžื™ืชื™".

ืงืจื‘

ืžืฉืžืฉ ื›ื“ื™ ืœื—ืงื•ืช ืืช ื”ืขื•ืœื ื”ืืžื™ืชื™ iperf3. ืžื‘ื—ื™ื ืช ืžื™ื“ืช ื”ืงืจื‘ื” ืœืžืฆื™ืื•ืช, ื–ื” ื‘ืขืจืš ื›ืžื• ื—ื™ืงื•ื™ ื”ืขื•ืœื ื”ืืžื™ืชื™ ื‘ืžื™ื™ื ืงืจืืคื˜, ืื‘ืœ ื‘ื™ื ืชื™ื™ื ื–ื” ื™ืฆืœื™ื—.

ื”ืžืฉืชืชืคื™ื ื‘ืชื—ืจื•ืช:

  • ื”ืชื™ื™ื—ืก ืœืขืจื•ืฅ ื”ืจืืฉื™
  • ื”ื’ื™ื‘ื•ืจ ืฉืœ ื”ืžืืžืจ ื”ื–ื” ื”ื•ื ipipou
  • OpenVPN ืขื ืื™ืžื•ืช ืืš ืœืœื ื”ืฆืคื ื”
  • OpenVPN ื‘ืžืฆื‘ ื”ื›ืœ ื›ืœื•ืœ
  • 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"

ืชืฆื•ืจืช ื”ืžื ื”ืจื”

ipipou
ืฉืจืช
/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, ื”ื›ืœ ื›ืฆืคื•ื™)
ืžื•ื’ื“ืจ ื‘ืืžืฆืขื•ืช openvpn-manage

ืžื’ืŸ
ืฉืจืช
/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

ืขืจื•ืฅ 20 Mbps

ipipou: ื™ื•ืชืจ ืžืกืชื ืžื ื”ืจื” ืœื ืžื•ืฆืคื ืช

ipipou: ื™ื•ืชืจ ืžืกืชื ืžื ื”ืจื” ืœื ืžื•ืฆืคื ืช

ืขืจื•ืฅ ืœื›ืœ 1 Gbps ืื•ืคื˜ื™ืžื™

ipipou: ื™ื•ืชืจ ืžืกืชื ืžื ื”ืจื” ืœื ืžื•ืฆืคื ืช

ipipou: ื™ื•ืชืจ ืžืกืชื ืžื ื”ืจื” ืœื ืžื•ืฆืคื ืช

ื‘ื›ืœ ื”ืžืงืจื™ื, ipipou ื“ื™ ืงืจื•ื‘ ื‘ื‘ื™ืฆื•ืขื™ื ืœืขืจื•ืฅ ื”ื‘ืกื™ืก, ื•ื–ื” ื ื”ื“ืจ!

ืžื ื”ืจืช openvpn ื”ืœื ืžื•ืฆืคื ืช ื”ืชื ื”ื’ื” ื“ื™ ืžื•ื–ืจ ื‘ืฉื ื™ ื”ืžืงืจื™ื.

ืื ืžื™ืฉื”ื• ื”ื•ืœืš ืœื‘ื“ื•ืง ืืช ื–ื”, ื™ื”ื™ื” ืžืขื ื™ื™ืŸ ืœืฉืžื•ืข ืžืฉื•ื‘.

ืžื™ ื™ืชืŸ ื•-IPv6 ื•-NetPrickle ื™ื”ื™ื• ืื™ืชื ื•!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”