VPN ááẠáá¯ááºááááºááœá±ážá áá Ạá á®áá¶ááá·áºááœá²áá°áá»á¬ážá áá°ážááŒá¬ážáááºážááŒá¬ážáá±á¬ áááááá¬áá áºáᯠááá¯ááºáá±á¬á·ááá·áº á¡áá»áááºáá±á¬ááºáá¬ááŒá®á á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááœáẠááá°áá®áá±á¬ áá¯ááºáá±á¬ááºá áá¬áá»á¬áž ááŸááá±á¬áºáááºáž á¡ááŸááºááŸá¬ áá°ááá¯ááºáž VPN ááá¯á¡ááºáá«áááºá
áááºááŸá VPN ááŒá±ááŸááºážáá»ááºáá»á¬ážááŸáá·áº ááŒá¿áá¬ááŸá¬ áááºážááá¯á·ááẠááŸááºáááºá áœá¬ á á®á ááºáááºááŸááºááẠáááºáá²ááŒááºážá ááááºážááááºážááẠá á»á±ážááŒá®ážááŒá®áž áá±ážááœááºážáá¯ááºá áᬠá¡áááºá¡ááœá±ážááŸááá±á¬ á¡ááœá±á¡ááŸá áºáá¯ááºáá»á¬áž ááŒáá·áºááŸááºáá±ááŒááºáž ááŒá áºáááºá
ááœááºáá²á·ááá·áº ááŸá
áºáá»á¬ážá
áœá¬á ááá±áá« ááááºážá¡áá»ááºá¡ááẠáá¯á¶ááŒá¯á¶áá±áž á¡áá°ážáá»áœááºážáá»ááºáá° Jason A. Donenfeld ááẠáááºážá¡ááœáẠáá¯á¶áá±á¬ááºáááºáᯠáá¯á¶ážááŒááºáá²á·ááŒá®áž á
áááºáá¯ááºáá±á¬ááºáá²á·áááºá
á¡ááŒá¬áž VPN ááŒá±ááŸááºážáá»ááºáá»á¬ážááẠWireGuard á á¡á¬ážáá¬áá»ááºáá»á¬áž
- á¡áá¯á¶ážááŒá¯áááœááºáá°áááºá
- áá±ááºáá® áá»áŸáá¯á·ááŸááºá á¬ááŸááºááᯠá¡áá¯á¶ážááŒá¯áááº- áá°áá¶áá¶áááá¯ááá¯áá±á¬áá±á¬ááºá Curve25519á ChaCha20á Poly1305á BLAKE2á SipHash24á HKDF á áááºááŒáá·áºá
- áá»á áºáá»á áºáá±á¬á áááºááá¯ááºáá±á¬ áá¯ááºá á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠááŸá¬ááœá±ááẠááá¯ááá¯ááœááºáá°áááºá
- ááŒáá·áºáá¬ážáá±á¬á áœááºážáá±á¬ááºáááºá
- ááŸááºážáááºážááŒá®áž á¡áá±ážá
áááºáá«á
áááºááŸááºáá»áẠ.
ááœá±áá±á¬ááºáá»ááºáááºáá
áºáááºááᯠááŸá¬ááœá±á·ááŒá®áá¬ážá OpenVPN ááŸáá·áº IPSec ááᯠáááºá¹ááŒáá¯ááºááẠá¡áá»áááºááŸááá«ááá¬ážá áá«ááᯠááŒá±ááŸááºážááá¯á· áá¯á¶ážááŒááºááá¯ááºááŒá®áž áá
áºáá»áááºáááºážááŸá¬áá² áá»áœááºáá±á¬áº áá¯ááºáá²á·áááºá
áááºááá¯á¡áá¯ááºáá¯ááºáááº
áááºáááºááŸá¯á¡ááŒá±áá¶áá°áá»á¬ážááᯠá€áá²á·ááá¯á·áá±á¬áºááŒááá¯ááºáááºá
- WireGuard á¡ááºáá¬áá±á·á áºááᯠáááºáá®ážáá¬ážááŒá®áž áá®ážááá·áºáá±á¬á·ááŸáá·áº IP ááááºá á¬ááᯠáááºážááœáẠáááºááŸááºáá¬ážáááºá á¡ááŒá¬ážááœááºáá°áá»ááºážáá»á¬ážá áááºáááºáá»á¬ážááᯠáááºáá¬ážáááº- áááºážááá¯á·á á¡áá»á¬ážáá°ááŸá¬áá±á¬á·áá»á¬ážá IP ááááºá á¬áá»á¬áž á áááºááá¯á·ááŒá áºáááºá
- WireGuard á¡ááºáá¬áá±á·á
áºááá¯á·áá±á¬ááºááŸááá¬áá±á¬ IP packet á¡á¬ážáá¯á¶ážááᯠUDP ááŸáá·áº áá¯á¶ážá¡á¯ááºáá¬ážáááºá
áá±ážáááºážá áœá¬ ááá¯á·áá±á¬ááºáá±ážáá²á·áá«áááºá á¡ááŒá¬ážááœááºáá°áá»á¬ážá - áá±á¬ááºáááºáá»á¬ážááẠáááºáááºáá»á¬ážááœáẠáá¬áá¬á á¡áá»á¬ážáá°ááŸá¬ IP ááááºá á¬ááᯠáááºááŸááºáá±ážáááºá ááŸááºáááºá áœá¬ á á áºááŸááºááŒá±á¬ááºážáááºáá±ááŒáá¬ážáá±á¬ áá±áá¬ááᯠáááºážááá¯á·áá¶á០áááºáá¶áááŸááá±á¬á¡áá«ááœáẠáá¯á¶ážá áœá²áá°áá»á¬ážá ááŒááºáááááºá á¬áá»á¬ážááᯠáá¬áá¬á០á¡ááá¯á¡áá»á±á¬áẠá¡ááá¡ááŸááºááŒá¯áá«áááºá
- áá¬áá¬ááẠáááºážááá¯ááºáááºážááᯠáááŸá±á¬áá·áºááŸááºáá² á¡áá»á¬ážáá°ááŸá¬ IP ááááºá á¬ááᯠááŒá±á¬ááºážáá²ááá¯ááºáááºá áá áºáá»áááºáááºážááŸá¬áááºá áááºážááẠáá»áááºáááºáá¬ážáá±á¬ áá±á¬ááºáááºáá»á¬ážáᶠááááá±ážáá»ááºáá áºáᯠáá±ážááá¯á·áááºááŒá áºááŒá®áž áááºážááá¯á·ááẠáááºážááá¯á·á ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠá¡áá»ááºá¡ááŒáẠá¡ááºááááºáá¯ááºáááºááŒá áºáááºá
- Routing ááá±á¬ááá¬ážááᯠá¡áá¯á¶ážááŒá¯áááºá
Cryptokey Routing . WireGuard ááẠáááºáá°ááœááºáá°á á¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠá¡ááŒá±áá¶á áááºáááºáá»á¬ážááᯠáááºáá¶ááŒá®áž áá±ážááá¯á·áááºá áá¬áá¬ááẠááŸááºáááºá áœá¬ á á áºááŸááºááŒá±á¬ááºážáááºáá±ááŒáá¬ážáá±á¬ áááºáááºááᯠáá¯ááºááŸááºáá±á¬á¡áá«á áááºážá src á¡ááœááºááᯠá¡ááŸááºááŒá áºáá«áááºá áááºážáááºááœá²á·á ááºážáá¯á¶ááŸáá·áºááá¯ááºáá®áá«áallowed-ips
á á áºááŸááºáá±á¬áááºáá°ááœááºáá°á áááºáááºááᯠWireGuard á¡ááºáá¬áá±á·á áºááŸáááºáá¶áááŸááááºá á¡ááœááºáááºáááºááᯠáá±ážááá¯á·ááá·áºá¡áá«á áááºááá¯ááºááá·áºáá¯ááºáááºážá ááºááẠááŒá áºáá±á«áºáá¬áááº- áááºáááºá dst á¡ááœááºááᯠááááºážáá°ááŒá®ážá áááºážá¡áá±á«áº á¡ááŒá±áá¶á áááºááá¯ááºáá¬áá»áá¯ážáá°áá»á¬ážááᯠááœá±ážáá»ááºáá¬ážáᬠáááºáááºááᯠáááºážááá±á¬á·ááŒáá·áº áááºááŸááºááá¯ážáá¬á ááœááºáá°ááá±á¬á·ááŒáá·áº áá¯ááºááŸááºáá¬ážáᬠá¡áá±ážááááºážááŸááºááá¯ááºááá¯á· ááá¯á·ááá¯ááºááẠ.
WireGuard á áááºááá¯áá¹áááá±áá¡á¬ážáá¯á¶ážááẠáá¯ááºááá¯ááºážáá±á«ááºáž 4ááá á¡á±á¬ááºáᬠááŸáááŒá®áž OpenVPN ááŸáá·áº IPSec ááœáẠááá¯ááºážáá±á«ááºáž áá¬ááŸáá·áºáá»á®ááŸááááºá áá±ááºáá® cryptographic algorithms áá»á¬ážááᯠáá¶á·ááá¯ážáááºá Linux kernel ááœáẠcryptographic API á¡áá
áºáá
áºáᯠááá·áºááœááºážááẠá¡ááá¯ááŒá¯áá¬ážáááºá
ááœááºááá¯ááºáá±áž
WireGuard ááᯠááá¯áá±áá¬ááœáẠkernel module áá áºáá¯á¡ááŒá Ạá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ážáá±á¬ááŒá±á¬áá·áº á¡ááŒáá·áºáá¯á¶ážá áœááºážáá±á¬ááºáááºá¡á¬ážáá¬áá»áẠ(OpenVPN ááŸáá·áº IPSec ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á) Linux á áá áºáá»á¬ážááœáẠáááá¬áááºááŸá¬ážáá«áááá·áºáááºá ááá¯á·á¡ááŒááºá macOSá Androidá iOSá FreeBSD ááŸáá·áº OpenBSD ááá¯á·ááᯠáá¶á·ááá¯ážáá¬ážáá±á¬áºáááºáž áááºážááá¯á·ááœáẠWireGuard ááẠáá±á¬ááºáááºááœá²á¡áá»áá¯ážáááºáá»á¬ážááŸáá·áºá¡áá° á¡áá¯á¶ážááŒá¯áá°áá±áá¬á á¡áá¯ááºáá¯ááºáá«áááºá ááá±ážáá±á¬á·áá±á¬á¡áá¬áááºááœáẠWindows á¡áá±á¬ááºá¡áá¶á·ááá¯ááá·áºááœááºážáááºáá»áŸá±á¬áºááá·áºááááºá
Benchmark ááááºáá»á¬ážááŸáá·áºá¡áá°
áá»áœááºá¯ááºáá¡áá¯á¶ážááŒá¯ááŸá¯á¡ááœá±á·á¡ááŒá¯á¶
áá»áœááºá¯ááºááẠVPN áá»áœááºážáá»ááºáá°ááá¯ááºáá«á áá áºáá«á OpenVPN ááᯠááá¯ááºááá¯ááºáááºááŸááºááŒá®áž á¡áááºážáá»ááºážáááºá IPSec ááá¯áá±á¬áẠáá ááºážáá°ážáá°ážá áá¯á¶ážááŒááºáá»ááºááœá± á¡áááºážáá»á¬ážáá±áááºá ââááá¯áá·áºááá¯ááá¯áẠááŒá±áá±á¬ááºáá²á· áá áºááá¯á· á¡áááºážááœááºáááºá ááá¯á·ááŒá±á¬áá·áºá áá¬áá¬ááᯠconfigure áá¯ááºááẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ scripts áá»á¬ážááᯠá¡ááŒá²áá¯á¶ážáá«áááºá
ááá¯á·ááŒá±á¬áá·áº WireGuard áááºáá»áœááºá¯ááºáá¡ááŒááºááœááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœááºá á¶ááŒááŒá áºáááºá á¡ááá·áºáááá·áºáá¯á¶ážááŒááºáá»ááºá¡á¬ážáá¯á¶ážááᯠáááºááŸááºáá»ááºááœáẠááŒá¯áá¯ááºáá¬ážáá±á¬ááŒá±á¬áá·áº áá¯á¶ááŸáẠVPN á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠááŒááºáááºááŒááºážáá¯ááºáááºážá ááºááẠáááá áºá¡áááºážáááºáᬠááŒá¬áá«áááºá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááœáẠááŸáá·áºá á¬ážááẠáááŒá áºááá¯ááºááá±á¬ááºááŒá áºáááºá
installation áá¯ááºáááºážá
ááºááá¯
áá¯ááºááŸááºááŒááºážáá±á¬á·áá»á¬ážááᯠutility ááŸáá¯ááºáá±ážáá«áááºá wg
:
SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )
ááá¯á·áá±á¬ááºá áááºááẠserver config ááá¯áááºáá®ážáááºááá¯á¡ááºáááºá /etc/wireguard/wg0.conf
á¡á±á¬ááºáá«á¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áºá¡áá°
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVKEY
[Peer]
PublicKey = $CLIENT_PUBKEY
AllowedIPs = 10.9.0.2/32
áá¬ááºááœáŸááºážááŒáá·áº ááá¯ááºáá±á«ááºážááᯠááŒáŸáá·áºáááºáá«á wg-quick
:
sudo wg-quick up /etc/wireguard/wg0.conf
á
áá
áºááŒáá·áº á
áá
áºáá»á¬ážááœáẠáááºážá¡á
á¬áž áááºážááᯠáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá sudo systemctl start [email protected]
.
client á
ááºááœáẠconfig áá
áºáá¯áááºáá®ážáá«á /etc/wireguard/wg0.conf
:
[Interface]
PrivateKey = $CLIENT_PRIVKEY
Address = 10.9.0.2/24
[Peer]
PublicKey = $SERVER_PUBKEY
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:51820 # ÐМеÑМОй IP ÑеÑвеÑа
PersistentKeepalive = 25
ááá¯áááºážá¡ááá¯ááºáž á¥áááºááá¯ááºáá±á«ááºážááᯠááŒáŸáá·áºáá«á
sudo wg-quick up /etc/wireguard/wg0.conf
áá»ááºááŸááá±áááºááŸá¬ client áá»á¬ážá¡ááºáá¬áááºááá¯áááºáá±á¬ááºááá¯ááºá á±ááẠNAT ááá¯áá¬áá¬ááœáẠconfigure áá¯ááºáááºááŒá áºááŒá®ážá áááºááŒá®ážáá«ááŒá®á
áá±á¬á·ááŒáá·áºáá±ááŸá¯áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááᯠáááºááŸá¬ážááŒááºážááŒáá·áº áá¯ááºá¡ááŒá±áá¶á á¡áá¯á¶ážááŒá¯áááœááºáá°ááŸá¯ááŸáá·áº áá»á áºáá áºááááºáááºážááŸá¯ááᯠáááŸááá²á·áááºá ááŸá¯ááºááœá±ážáá±á¬ áááºááŸááºá áá áºááŸáá·áº á€áá±á¬áºááá¯áááẠááááºááá·áºá áá¬áá»á¬áž áááŸááá«á ááá¯áá±á¬ááºážáá±á¬ áá¯ááºááŸááºááŒááºážáá±á¬á·áá»á¬ážááᯠSSH áá±á¬á·áá»á¬ážáá²á·ááá¯á· ááŒáá·áºáá±áá«áááºá ááá¯á·áá±á¬áº áááºážááẠááŒá¿áá¬áá áºáá¯ááŒá áºáááº- WireGuard ááẠá¡áá»áá¯á·áá±á¬ áááºááŸáááœááºáááºáá»á¬ážááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááœááºáá°áááºááá¯ááºáá«á
á¡á¬ážáááºážáá»ááºáá»á¬ážááŒá¬ážááœááºá UDP áááá¯ááá¯áá±á¬ááᯠáááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááŒá áºáá¬áááŸáááá¯ááºáá±á¬ááŒá±á¬áá·áº WireGuard ááẠHTTP proxy ááŸáááá·áºá¡áá¯ááºáá¯ááºáááºááá¯ááºááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá áá±ážááœááºážáá±á«áºáá¬áááº- áááºážááẠáááá¯ááá¯áá±á¬ááᯠááŸá¯ááºááŸááºáááºááẠááŒá áºááá¯ááºáá«áááºáá¬ážá áá¯ááºáá«áááºá áááºážááẠVPN áááá¯ááºááá¯ááºá¡áá¯ááºááá¯ááºáá±á¬áºáááºážá á¥ááá¬á¡á¬ážááŒáá·áºá OpenVPN á¡ááœááºá á¡á¬áá¬ááŸááºááá¯ááºáá¶áá»á¬ážááœááºáá±ááá¯ááºáá°áá»á¬ážá¡á¬ážá¡ááºáá¬áááºááá¯á¡ááŒáá·áºá¡áá¡áá¯á¶ážááŒá¯áááºáá°áá®áá±ážáá±á¬ HTTPS á¡ááŒá áºáá°á·ááá¯ááºáá°áá¯á¶áá»ááºáááºáááºážáááºážáá»á¬ážááŸááááºá
ááœá±á·ááŸááá»ááºáá»á¬áž
á¡ááŸá áºáá»á¯ááºááá»áŸáẠá€áááºááŸá¬ á¡ááœááºá áááºáááºá á¬ážá áá¬áá±á¬ááºážááŒá®áž á¡áá¬ážá¡áá¬ááŸááá±á¬ ááá±á¬áá»ááºááŒá áºááŒá®ážá áááºááẠáááºážááᯠááá¯ááºááá¯ááºáá¬áá¬áá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áá±ááŒá®ááŒá áºáááºá á¡ááŒááºááá¬áá²á Linux á áá áºáá»á¬ážááœáẠá áœááºážáá±á¬ááºáááºááŒáá·áºáá¬ážááŒááºážá á áá áºááá·áºááœááºážááŒááºážááŸáá·áº áá¶á·ááá¯ážááŸá¯ááœááºáá°ááŒááºážá áá»á áºáá»á áºááŒá®áž áááºááá¯ááºáá±á¬ áá¯ááºá¡ááŒá±áá¶á ááá¯á·áá±á¬áºá ááŸá¯ááºááœá±ážáá±á¬á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá áºáá¯ááᯠWireGuard ááá¯á·ááœáŸá²ááŒá±á¬ááºážáááºá¡áá»ááºá ááá¯áááºá á±á¬ááœááºážáááºá áááºážááẠLinux kernel ááœááºáááºážááá«áááºááŸá¯ááá¯á á±á¬áá·áºááá¯ááºážááá»áá¯ážáááºáááºá
áá»áœááºá¯ááºá (ááŸáá·áº áááºá) á¡áá»áááºááᯠáááºáá¬á
á±ááẠáá»áœááºá¯áẠáá®ááœááºáá²á·áááºá
source: www.habr.com