Дали WireGuard е страхотният VPN на бъдещето?

Дали WireGuard е страхотният VPN на бъдещето?

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

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

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

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

продуктивност

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

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

Дали WireGuard е страхотният VPN на бъдещето?

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

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

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

Процес на инсталиране описан подробно на официалния уебсайт, бих искал отделно да отбележа отличното Поддръжка на 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 [email protected].

На клиентската машина създайте конфигурация /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 за себе си и приятелите си, без дори да разбирате нищо за него.

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

Добавяне на нов коментар