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 приема и изпраща пакети на основание на публичния ключ на пира. Когато сървърът дешифрира правилно удостоверен пакет, се проверява полето src. Ако то съответства на конфигурацията за allowed-ips на удостоверения пир, пакетът се приема от интерфейса на WireGuard. При изпращане на изходящ пакет следва съответната процедура: взема се полето dst на пакета и на основание на него се избира съответстващият пир, пакетът се подписва с неговия ключ, шифрува се с ключа на пира и се изпраща на отдалечения край.

Цялата основна логика на WireGuard заема по-малко от 4 хиляди реда код, докато OpenVPN и IPSec имат стотици хиляди реда. За поддръжка на съвременни криптоалгоритми се предлага да бъде включен нов криптографски API в ядрото на Linux. 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