WireGuard — прекрасен VPN на бъдещето?

WireGuard — прекрасен VPN на бъдещето?

Времето, когато VPN вече не е екзотичен инструмент за мъже с бради, е настъпило. Потребителите имат различни задачи, но фактът е, че VPN е необходим на всички.

Проблемата с текущите VPN решения е, че те са трудни за правилна настройка, скъпи за поддръжка и съдържат много остарял код с съмнително качество.

Преди няколко години канадският специалист по информационна сигурност Jason A. Donenfeld реши, че е време да се сложи край на това и започна работа по WireGuard. Сега WireGuard е на път да бъде включен в ядрото на Linux и дори е получил похвали от Линус Торвалдс и в американския сенат.

Заявените предимства на WireGuard спрямо другите VPN решения:

  • Лесен за използване.
  • Използва съвременна криптография: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.н.
  • Компактен четим код, по-лесен за проучване на уязвимости.
  • Висока производителност.
  • Ясна и добре обмислена спецификация.

Може ли да е намерена сребърна куршума? Време ли е да погребем OpenVPN и IPSec? Реших да разбера и заедно направих скрипт за автоматична инсталация на личен VPN сървър.

Принципи на работа

Принципите на работа могат да бъдат описани така:

  • Създава се WireGuard интерфейс, на който се присвояват частен ключ и IP адрес. Зареждат се настройките на другите пирове: техните публични ключове, IP адреси и т.н.
  • Всички IP пакети, постъпващи на интерфейса на WireGuard, се инкапсулират в UDP и безопасно се доставят до другите пирове.
  • Клиентите задават публичния IP адрес на сървъра в настройките. Сървърът автоматично разбира външните адреси на клиентите, когато получи коректно удостоверени данни.
  • Сървърът може да променя публичния IP адрес, без да прекъсва работата. При това той уведомява свързаните клиенти и те актуализират конфигурацията си в режим на реално време.
  • Използва се концепцията за маршрутизиране Cryptokey Routing. WireGuard приема и изпраща пакети на базата на публичния ключ на пира. Когато сървърът разшифрова коректно удостоверения пакет, проверява se поле src. Ако то съответства на конфигурацията на allowed-ips удостоверения пи, пакетът се приема от интерфейса на WireGuard. При изпращане на изходящ пакет се извършва съответна процедура: взима се поле dst на пакета и на базата на него се избира съответния пир, пакетът се подписва с неговия ключ, шифрова се с ключа на пира и се изпраща на remote endpoint.

Цялата основна логика на WireGuard заема по-малко от 4000 реда код, докато OpenVPN и IPSec имат стотици хиляди реда. За поддръжка на съвременни криптографски алгоритми се предлага в ядрото на Linux да бъде включен нов криптографски API. ZincВ момента се обсъжда колко добра е тази идея.

Производителност

Максималното предимство в производителността (в сравнение с OpenVPN и IPSec) ще бъде забележимо на Linux системи, тъй като там WireGuard е реализиран като модул на ядрото. Освен това се поддържат macOS, Android, iOS, FreeBSD и OpenBSD, но при тях WireGuard работи в userspace с всички произтичащи последици за производителността. Обещават да добавят поддръжка за Windows в близко бъдеще.

Резултати от бенчмарковете с официалния сайт:

WireGuard — прекрасен VPN на бъдещето?

Моят опит с използването на

Не съм експерт по настройка на VPN. Веднъж настройвах OpenVPN ръчно и беше много уморително, а за IPSec дори не съм опитвал. Има твърде много решения, които трябва да вземете и е много лесно да си направите услуга. Затова винаги съм използвал готови скриптове за настройка на сървъра.

Така че, WireGuard, от моя гледна точка, е идеален за потребителя. Всички нискоуровневи решения са приняты в спецификацията, така че процесът на подготовка на типичната VPN инфраструктура отнема само няколко минути. Почти е невъзможно да се обърка конфигурацията.

Процесът на инсталация е подробно описан на официалния сайт, и особено искам да подчертая отличната подкрепа за OpenWRT.

Ключовете за шифриране се генерират с утилита wg:

SERVER_PRIVKEY=$( wg genkey )
SERVER_PUBKEY=$( echo $SERVER_PRIVKEY | wg pubkey )
CLIENT_PRIVKEY=$( wg genkey )
CLIENT_PUBKEY=$( echo $CLIENT_PRIVKEY | wg pubkey )

След това трябва да създадете сървърен конфиг /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

В системи с systemd вместо това можете да използвате sudo systemctl start wg-quick@wg0.service.

На клиентската машина, създайте конфиг /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

Остава само да настроите NAT на сървъра, за да могат клиентите да излизат в Интернет, и всичко е готово!

Тази простота на използване и компактност на кодовата база е постигната благодарение на отказа от функционалността за разпространение на ключове. Тук няма сложна система от сертификати и всичкото това корпоративно напрежение, кратките ключове за шифриране се разпространяват по подобие на SSH ключовете. Но във връзка с това възниква проблем: WireGuard няма да е толкова лесно да се внедри в някои съществуващи мрежи.

Сред недостатъците следва да се спомене, че WireGuard не може да работи през HTTP прокси, тъй като като транспортен протокол поддържа само UDP. Въпросът е дали ще може да се обфускира протоколът? Разбира се, това не е пряка задача за VPN, но за OpenVPN, например, съществуват начини да се маскира като HTTPS, което помага на жителите на тоталитарни държави да ползват Интернет пълноценно.

Изводи

В заключение, това е много интересен и перспективен проект, който може да се използва и на лични сървъри още сега. Каква е ползата? Висока производителност на Linux системи, лесна настройка и поддръжка, компактна и четима кодова база. Въпреки това, все още е рано да се премине към WireGuard за комплексна инфраструктура, следва да се изчака вграждането му в ядро на Linux.

За да спестя своето (и вашето) време, разработих автоматичен инсталатор на WireGuard. С него можете да настроите личен VPN за себе си и свои познати, дори без да разбирате нищо от това.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster