áá±ážáá
áºáá®áᬠ(David S. Miller) Linux kernel á networking subsystem ááᯠáá¬áááºáá°áááºá áááºáá¶áááºá net-next branch ááá¯á· áá¬áá±ážááŒááºáž ááá±á¬áá»ááºá០VPN interface ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áº WireGuard. áá¬ááá·áºááŸá
áºá¡á
á±á¬ááá¯ááºážááœááºá net-next áá¬áááœá²ááœáẠá
á¯áá±á¬ááºážáá¬ážáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááẠLinux kernel 5.6 ááœááºááŸáááŸá¯á¡ááœáẠá¡ááŒá±áá¶ááŒá
áºáá¬áááºááŒá
áºáááºá
WireGuard áá¯ááºááᯠáááºá kernel á¡ááœááºážááá¯á· ááœááºážááá¯á·ááẠááŒáá¯ážáááºážááŸá¯áá»á¬áž ááœááºáá²á·ááá·áº ááŸá
áºá¡áááºážáááºá¡ááœááºáž ááŒá¯áá¯ááºáá²á·áá±á¬áºáááºáž á
áœááºážáá±á¬ááºááẠááŒáŸáá·áºáááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº áá¯ááºááŸááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá áá°ááá¯ááºá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááŸáá·áº áá»áááºáááºáá¬ážááŒááºážááŒá±á¬áá·áº áá¡á±á¬ááºááŒááºáá²á·áá±á á¡á
ááá±á¬á· áá®áá¯ááºáá±á¬ááºáá»ááºááœá± ááŸááá²á·áá«áááºá á¡ááá¯ááŒá¯áááºá kernel á¡ááœáẠáá±á¬ááºáá¯á¶ážááœáẠá
ᶠCrypto API ááᯠá¡á
á¬ážááá¯ážááá¯ááºááá·áº áá±á¬ááºáááºá¡ááá·áºáááá·áº Zinc API áá
áºáá¯ááŒá
áºáááºá
á
ááºáááºáá¬áááœáẠWireGuard áááºáá®ážáá°áá»á¬áž Kernel Recipes ááœááºáááá·áºááœáẠááœá±ážááœá±ážááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·áááºá á¡áá±ážá¡áá° áá¯á¶ážááŒááºáá»ááºáá
áºáᯠááŒá¯áá¯ááºáá²á·áááºá WireGuard áá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážááẠá
áœááºážáá±á¬ááºáááºááŸáá·áº á¡ááœá±ááœá±áá¯á¶ááŒá¯á¶áá±ážáááºáááºááœáẠááá¯ááºááŒá¬ážááŸá¯áá»á¬ážááŸáááá·áº Crypto API ááᯠá¡áá¯á¶ážááŒá¯ááẠáááºá áá¬áá±ážááŸá¯áá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážáá«á Zinc API ááᯠáááºáááºáááºáá®ážááẠáá¯á¶ážááŒááºáá²á·áá±á¬áºáááºáž áá®ážááŒá¬ážááá±á¬áá»ááºáá
áºáá¯á¡ááŒá
Ạáá¯ááºáá±á¬ááºáá²á·áááºá
ááá¯áááºáá¬áááœáẠkernel developer áá»á¬áž ááœá¬ážáááºá á¡áá±ážá¡áá°áá
áºáá¯á¡ááœáẠáá¯á¶á·ááŒááºááá·áºá¡áá±ááŸáá·áº Zinc á០áááºá kernel ááá¯á· áá¯ááºá¡á
áááºá¡ááá¯ááºážáá
áºáá¯ááᯠááœáŸá²ááŒá±á¬ááºážááẠááá±á¬áá°áá²á·áááºá á¡ááŒá±áá¶á¡á¬ážááŒáá·áºá á¡áá»áá¯á·áá±á¬ Zinc á¡á
áááºá¡ááá¯ááºážáá»á¬ážááᯠcore ááá¯á· ááœáŸá±á·áááºááŒá
áºááŒá®ážá áá®ážááŒá¬áž API á¡ááŒá
áºááá¯ááºáá² Crypto API subsystem á áá
áºá
áááºáá
áºááá¯ááºážá¡áá±ááŒáá·áº ááŒá
áºáááºá á¥ááá¬á Crypto API ááŸáááŒá®ážáá¬áž áá«áááºáá«áááºá WireGuard ááœáẠááŒááºáááºáá¬ážáá±á¬ ChaCha20 ááŸáá·áº Poly1305 algorithms áá»á¬ážááᯠá¡ááŒááºá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
ááá±á¬áá»ááºááᯠáááºáá±á¬ááºáá°ááẠáááºáá¡á°ááá¯ááºááœáẠWireGuard ááᯠáá¬ááá·áº áá±ážááá¯á·ááŒááºážááŸáá·áº áááºá
ááºááŸá¯ ááŒá±ááŒá¬áá²á·ááẠrepository ááá¯ááŒááºáááºááœá²á·á
ááºážááŒááºážá¡ááŒá±á¬ááºážá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááá¯ážááŸááºážá
á±áááºá áá®ážááŒá¬ážáááºááŸáááẠáá®ááá¯ááºážáá¯ááºáá¬ážááá·áº monolithic âWireGuard.gitâ ááá¯ááŸá±á¬ááºááŸá¯á¡á¬áž áá®ážááŒá¬ážááá¯ááŸá±á¬ááºááŸá¯áá¯á¶ážáá¯ááŒáá·áº á¡á
á¬ážááá¯ážáááºááŒá
áºááŒá®ážá áááºá kernel ááŸá áá¯ááºáá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááẠááá¯ááá¯ááá·áºáá»á±á¬áºáááº-
- wireguard-linux.git - Wireguard ááá±á¬áá»ááºá០ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá áá¬áá±ážááŸá¯áá»á¬ážááᯠkernel ááœáẠááá·áºááœááºážáááºá¡ááœáẠááŒááºáááºáá¯á¶ážáááºááŒá®áž ááá¯ááºááœááº/ net- áá±á¬ááºá¡ááá¯ááºážá¡áááºáá»á¬ážááá¯á· áá¯á¶ááŸááºááœáŸá²ááŒá±á¬ááºážáá±ážááá·áº ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ kernel áá
áºáááºá
- ááŒáá¯ážáá²á· - tools.git - wg ááŸáá·áº wg-quick áá²á·ááá¯á·áá±á¬ á¡áá¯á¶ážááŒá¯áá°áá±áá¬ááœááºááœáẠá¡áá¯ááºáá¯ááºáá±á¬ á¡áá¯á¶ážá¡áá±á¬ááºáá»á¬ážááŸáá·áº scripts áá»á¬ážá¡ááœáẠááá¯ááŸá±á¬ááºááŸá¯á ááŒáá·áºááŒá°ážááŸá¯áá»á¬ážá¡ááœáẠáááºáá±á·áá»áºáá»á¬ážáááºáá®ážááẠááá¯ááŸá±á¬ááºáá¬ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
- wireguard-linux-compat.git ááŒá
áºááẠ- kernel ááŸáá®ážááŒá¬ážá
á®ááŸáá·áº compat.h á¡ááœáŸá¬á¡áá«á¡ááẠmodule ááá°ááœá²áá
áºáá¯áá«ááŸááá±á¬ repository ááẠkernel á¡áá±á¬ááºážáá»á¬ážááŸáá·áºááá¯ááºáááºááŸá¯ááŸáá
á±áááºá áááºáááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠwireguard-linux.git repository ááœáẠáá¯ááºáá±á¬ááºááœá¬ážáááºááŒá
áºááŒá®áž áá¯á¶ážá
áœá²áá°áá»á¬ážááŒá¬ážááœáẠá¡ááœáá·áºá¡áááºážááŸáá·áº ááá¯á¡ááºáááœá±á·á áá®ážááŒá¬áž áá¬áá±ážááá·áºáá¬ážááŸááºážááá¯áááºáž á¡áá¯ááºáá¯á¶á
á¶ááŒáá·áº áá¶á·ááá¯ážáá±ážáááºááŒá
áºáááºá
VPN WireGuard ááẠáá±ááºáá® áá¯ááºááŸááºáááºážáá»á¬ážááᯠá¡ááŒá±áá¶á á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá á¡ááœááºááŒáá·áºáá¬ážáá±á¬ á
áœááºážáá±á¬ááºáááºááᯠáá±ážáááºá á¡áá¯á¶ážááŒá¯áááœááºáá°áááºá ááŸá¯ááºááœá±ážááŸá¯áá»á¬áž áááºážá
ááºáᬠá¡ááœá¬ážá¡áᬠá¡áá»á¬ážá¡ááŒá¬ážááᯠáá¯ááºáá±á¬ááºááá·áº ááŒá®ážáá¬ážáá±á¬ ááŒáá·áºáá»ááºááŸá¯áá»á¬ážá
áœá¬ááœáẠáá°á·ááá¯ááºáá° áááºáá±ááŒááá¯ááºáá«áá
á±á á¡ááá¯áá«á
á®áá¶ááááºážááᯠ2015 áá¯ááŸá
áºááááºážáááœá¶á·ááŒáá¯ážáá²ááŒá
áºááŒá®áž, á
á¬áááºážá
á
áºááŒá®áž ááá¬ážáááºá¡áááºááŒá¯áá»áẠáá¯ááºááŸááºááŒááºážáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá²á·áááºá WireGuard áá¶á·ááá¯ážááŸá¯á¡á¬áž NetworkManager ááŸáá·áº systemd ááœáẠáá±á«ááºážá
ááºážáá¬ážááŒá®ážááŒá
áºááŒá®ážá kernel áá¬áá±ážááŸá¯áá»á¬ážááᯠá¡ááŒá±áá¶ááŒáá·áºáá±ááŸá¯áá»á¬ážááœáẠááá·áºááœááºážáá¬ážáá«áááºá Debian ááááºáááŒáááºá Mageiaá Alpineá Archá Gentooá OpenWrtá NixOSá áá¯ááºáá¯á¶ О ALT.
WireGuard ááẠááœááºáááºá¡ááºáá¬áá±á·á
áºáá
áºáá¯á
á®ááœáẠáá®ážááá·áºáá±á¬á·áá
áºáá¯ááᯠáá»áááºááœá²áᬠá¡áá»á¬ážáá°ááŸá¬áá±á¬á·áá»á¬ážááᯠáá»áááºááẠáááºážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážáá«áááºáá±á¬ áá¯ááºááŸááºááŒááºážáá±á¬á·áááºážááŒá±á¬ááºážáááºááŒááºážá ááá±á¬ááá¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá SSH ááŸáá·áº á¡áá¬ážáá°áá±á¬ áá»áááºáááºááŸá¯áá
áºáá¯ááᯠáááºáá±á¬ááºáááºá¡ááœáẠá¡áá»á¬ážáá°ááŸá¬áá±á¬á·áá»á¬ážááᯠáá²ááŸááºáááºá áá±á¬á·áá»á¬ážááŸáá·áº áá»áááºáááºáááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá°áá±áá¬ááœááºááœáẠáá®ážááŒá¬áž daemon ááá¯ááºáá±á¬ááºáá² áá»áááºáááºááẠNoise_IK ááá¹ááá¬ážá០Noise Protocol FrameworkSSH ááœáẠauthorized_key áá»á¬ážááᯠááááºážááááºážááŒááºážááŸáá·áº áááºáá°áááºá áá±áá¬áá±ážááá¯á·ááŒááºážááᯠUDP packets ááœáẠencapsulation ááŒáá·áºáá¯ááºáá±á¬ááºáááºá áááºážááẠáá»áááºáááºááŸá¯ááᯠááŒááºáá±á¬ááºááŒá®áž client ááᯠá¡ááá¯á¡áá»á±á¬áẠááŒááºáááºáááºááŸááºááŒááºážáááŸááá² VPN áá¬áá¬á IP ááááºá
á¬ááᯠááŒá±á¬ááºážáá²ááŒááºáž (Roaming) ááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
áá¯ááºááŸááºááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯ááẠcipher á
á®ážááŒá±á¬ááºáž ChaCha20 ááŸáá·áº áááºáá±á·áá»áº á
á
áºááŸááºááŒá±á¬ááºážá¡áá±á¬ááºá¡áá¬ážááŒááŒááºážááá¯ááºáᬠá¡ááºáááá¯áá®ááẠ(MAC) Poly1305Daniel Bernstein á áá®ááá¯ááºážááœá²ááŒá®ážáDaniel J. Bernstein), Tanya Lange
(Tanja Lange) ááŸáá·áº Peter Schwabe ááá¯á· ááŒá
áºáááºá ChaCha20 ááŸáá·áº Poly1305 ááá¯á·ááẠAES-256-CTR ááŸáá·áº HMAC á ááá¯ááá¯ááŒááºáááºááŒá®áž áá±ážáááºážáá±á¬ analogues áá»á¬ážá¡ááŒá
Ạáá±áá¬áá°áá¬ážááŒá®ážá á¡áá°ážáá¬á·ááºáá²áá¶á·ááá¯ážááŸá¯áááá¯á¡ááºáá² áá¯á¶áá±áá¯ááºáá±á¬ááºááŸá¯á¡áá»áááºááᯠáááŸáááá¯ááºá
á±ááá·áº áá±á¬á·ááºáá²á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŒá
áºáááºá áá»áŸáá±áá¬ážáá±á¬ áá»áŸáá¯á·ááŸááºáá±á¬á·ááᯠáá¯ááºáá¯ááºáááºá elliptic curve Diffie-Hellman protocol ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááœáẠá¡áá¯á¶ážááŒá¯ááẠCurve25519Daniel Bernstein ááŸá¡ááá¯ááŒá¯áááºá hashing á¡ááœááºáá¯á¶ážáá±á¬ algorithm ááẠBLAKE2s (RFC7693).
ááœáẠá
ááºážáááºááŒááºáž á
áœááºážáá±á¬ááºááẠWireGuard ááẠOpenVPN (HMAC-SHA3.9-3.8 áá«áá±á¬ 256-bit AES ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á 2 á ááá¯ááá¯ááŒáá·áºáá¬ážáá±á¬ áá¯á¶á·ááŒááºááá¯ááºá
áœááºážááᯠááá¯ááºááŒáá²á·áááºá IPsec (256-bit ChaCha256+Poly20 ááŸáá·áº AES-1305-GCM-256) ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á WireGuard ááẠá
áœááºážáá±á¬ááºááẠá¡áááºážááẠááá¯ážáááºááŸá¯ (128-13%) ááŸáá·áº latency áááºážáá«ážáá±á¬ (18-21%) ááᯠááŒááááºá á
ááºážáááºááŸá¯áá»á¬ážááᯠááá±á¬áá»ááºá០áá®ááœááºáá¬ážááá·áº áá¯ááºááŸááºááŒááºážááá¯ááºáᬠá¡ááºáááá¯áá®áááºáá»á¬ážááᯠáá»ááºááŒááºá
áœá¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á
ááºážáááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·ááẠ- kernel á á
ᶠCrypto API ááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒááºážááẠááá¯ááá¯ááá¯ážááœá¬ážáá±á¬ á
áœááºážáá±á¬ááºáááºááᯠáŠážáááºááœá¬ážá
á±ááá¯ááºáááºá
source: opennet.ru