Наступило время, когда VPN уже не является каким-то экзотическим инструментом бородатых сисадминов. Задачи у пользователей разные, но факт в том, что VPN стал нужен вообще всем.
Проблема текущих VPN решений в том, что их тяжело правильно настроить, дорого обслуживать, а так же в них полно legacy кода сомнительного качества.
Несколько лет назад канадский специалист по информационной безопасности 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 поле пакета и на основании его выбирается соответсвующий пир, пакет подписывается своим ключом, шифруется ключом пира и отправляется на remote endpoint.
Вся основная логика WireGuard занимает менее 4 тысяч строк кода, тогда как OpenVPN и IPSec имеют сотни тысяч строк. Для поддержки современных криптоалгоритмов предлагается включить в состав ядра Linux новый криптографический API Zinc. В данный момент идет обсуждение, насколько это удачная идея.
Производительность
Максимальное преимущество в производительности (по сравнению с OpenVPN и IPSec) будет заметно на Linux системах, так как там WireGuard реализован в виде модуля ядра. Кроме этого поддерживаются macOS, Android, iOS, FreeBSD и OpenBSD, но в них WireGuard выполняется в userspace со всеми вытекающими последствиями для производительности. Поддержку Windows обещают добавить в ближайшем будущем.
Результаты бенчмарков с официального сайта:
Мой опыт использования
Я не эксперт по настройке 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 proxy, поскольку в качестве транспорта есть только протокол UDP. Возникает вопрос, возможно ли будет обфусцировать протокол? Конечно, это не прямая задача VPN, но для OpenVPN, например, существуют способы маскировки под HTTPS, что помогает жителям тоталитарных стран полноценно пользоваться Интернетом.
Выводы
Подводя итог, это очень интересный и перспективный проект, можно уже сейчас использовать его на личных серверах. Какой профит? Высокая производительность на Linux системах, простота настройки и поддержки, компактная и читабельная кодовая база. Однако, бросаться переводить комплексную инфраструктуру на WireGuard еще рано, стоит подождать включение в состав ядра Linux.
Для экономии своего (и вашего) времени я разработал автоматический установщик WireGuard. С его помощью можно поднять личный VPN для себя и своих знакомых даже ничего в этом не понимая.
Комментарии (55)
inkvizitor68sl
10.12.2018 18:42-3Ситуация сейчас такова, что пора уже сделать VPN, который целиком и полностью работает через https. Не мимикрирует под него, а действительно делает GET/POST по https в качестве транспорта при включении определенных настроек.
Да, медленно. Но пора.stavinsky
10.12.2018 19:56типа такого?
github.com/unbit/vpn-wsinkvizitor68sl
10.12.2018 20:00Выглядит замороченно для конечного потребителя, но примерно такое я и имел в виду, да.
scruff
11.12.2018 17:44Зато ставится чуть ли не в 2 с пполвиной клика. Такой, в идеале, и должна быть установка типичных базововых сервисов, вроде почты, VPN, проксей. Основной трабл — CRL, как уже говорилось.
scruff
11.12.2018 11:21Агаа, Ну-Ну… Использовал этот гит-репозторий, весьма годная штука… была… пока через месяц после установки не протух CRL, а продакшн-клиентов уже было за сотню! Притом автор сего решения даже не соизволил об этом упомянуть, никак от слова вообще!!! Не говоря уже о решении этой траблы. Имхую, что цель такого сервака ни разу не продакшн, а сервак-однодневка — проработать месяц на одном VPS-хостинге, затем протухнуть/выпилиться и подняться «с нуля» на другом. Продлить CRL у меня получилось только на следующие 30 дней. Последующее продление так и не заработало. Скрипт CRL-обновления ругался на какие-то кривые атрибуты в СА. Проблема еще в том, что конкретно по CRL-проблеме на openVPN-е гугл знает не много. Пришлось заколхозить всё это дело скриптом в cron-е, по «откату» системного времени каждую ночь. До такой стыдобы я еще не скатывался. Надеюсь этот костыль выпилить в ближайшее время. Вторая трабла — все VPN-клиенты за-NAT-ченные, что тоже крайне неудобно для eterprise-структур, т.е. из LAN-ки клиента никак не достать. И поменять NAT на routing вообще никак и судя по всему, OpenVPN тупо не умеет раутить клиентов. Хотя тот же самый MS ISA умел это дело переключать одной галочкой. Третий трабл — около-нулевая секьюрность — *.ovpn-ключ-настройка на клиентах OpenVPN храниться в явном виде в папочке профиля фраерка и спикрасть его, имея доступ к ПК — как два байта отослать. Единственный плюс решения — работает даже через параноидально-защищенные фаерволлы, где хоть как-то разрешен TCP:443.
inkvizitor68sl
11.12.2018 17:13> OpenVPN тупо не умеет раутить клиентов
Вообще-то умеет.scruff
11.12.2018 17:35поделитесь маном, пожалуйста. Желательно реально рабочим, а не кусочным.
inkvizitor68sl
11.12.2018 18:07Маном к чему? К openvpn? Родной неплохо написан.
Для роутинга в openvpn (в разных направлениях) есть как минимум 3 параметра:
1) push-route (который на клиенте заворачивает маршруты в vpn)
2) iroute (для роутинга клиентов внутри vpn-сети)
3) client-to-client, который позволит клиентам общаться между собой (через vpn-сервер, но всё же).
Выбирайте любой подходящий для вашего случая.
А писать готовые рецепты на все возможные случаи для монстра, подобного openvpn — неблагодарная работа.
site6893
11.12.2018 23:46> *.ovpn-ключ-настройка на клиентах OpenVPN
> храниться в явном виде в папочке профиля фраерка
єє, так зашифруй сертификаты для VPN доступа, никто не заставляєт их хранить в открытом виде рядом с конфигами OpenVPN.scruff
12.12.2018 06:12Мэээ, так подскажи, как шифровать. Понятно, что шифровать файловую систему нет особого смысла нет — сел за «залогиненную» учетку пользователя и слил *.ovpn. В идеале была бы технология как в винде — свое хранилище сертификатов и клей к ним, где можно ставить либо пароль на ключ либо метку «неэкспортируемый.»
YourChief
12.12.2018 18:08Так на ключ в текстовом формате как раз и можно ставить пароль (на деле он шифруется ключом, выведенным из пароля).
scruff
12.12.2018 20:02Где можно наглядно посмотреть?
YourChief
12.12.2018 20:14Если Вы генерируете сертификаты и ключи с помощью easy-rsa 2 из комплекта OpenVPN, то скрипт
./build-key-pass
как раз такой и генерирует. А вообще средствами openssl это генерится например так:
openssl genrsa -aes256 2048 > mykey.pem
scruff
13.12.2018 06:00Скрипт генерации *.ovpn файла такой:
#! /bin/bash
# Script to automate creating new OpenVPN clients
#
# H Cooper — 05/02/11
# Y Frolov — 08/06/16 — bundle config added (unified format)
# Usage: newclient.sh <common-name>
echo «Script to generate unified config for Windows App»
echo «sage: newclient.sh <common-name>»
# Set vars
OPENVPN_DIR=/etc/openvpn
OPENVPN_RSA_DIR=/etc/openvpn/easy-rsa
OPENVPN_KEYS=$OPENVPN_RSA_DIR/keys
BUNDLE_DIR=/etc/openvpn/bundles
# Either read the CN from! or prompt for it
if [ -z "!" ]
then echo -n «Enter new client common name (CN): „
read -e CN
else
CN=$1
fi
# Ensure CN isn't blank
if [ -z “$CN» ]
then echo «You must provide a CN.»
exit
fi
# Check the CN doesn't already exist
if [ -f $OPENVPN_KEYS/$CN.crt ]
then echo «Error: certificate with the CN $CN alread exists!»
echo " $OPENVPN_KEYS/$CN.crt"
exit
fi
# Establish the default variables
export EASY_RSA="/etc/openvpn/easy-rsa"
export OPENSSL=«openssl»
export PKCS11TOOL=«pkcs11-tool»
export GREP=«grep»
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
export PKCS11_MODULE_PATH=«dummy»
export PKCS11_PIN=«dummy»
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=1825
export KEY_COUNTRY=«US»
export KEY_PROVINCE=«CA»
export KEY_CITY=«xxxxxxxx»
export KEY_ORG=«xxxxxxxxxx»
export KEY_EMAIL=«xxxxxxx»
export KEY_OU=«RG»
export KEY_NAME=«EasyRSA»
# Copied from build-key script (to ensure it works!)
export EASY_RSA="${EASY_RSA:-.}"
"$EASY_RSA/pkitool" --batch $CN
# Add all certs to unified client config file
# Default config for client
cp $OPENVPN_DIR/client.ovpn $BUNDLE_DIR/$CN.ovpn
# CA
echo "" >> $BUNDLE_DIR/$CN.ovpn
cat $OPENVPN_KEYS/ca.crt >> $BUNDLE_DIR/$CN.ovpn
echo "" >> $BUNDLE_DIR/$CN.ovpn
# Client cert
echo "" >> $BUNDLE_DIR/$CN.ovpn
cat $OPENVPN_KEYS/$CN.crt >> $BUNDLE_DIR/$CN.ovpn
echo "" >> $BUNDLE_DIR/$CN.ovpn
# Client key
echo "" >> $BUNDLE_DIR/$CN.ovpn
cat $OPENVPN_KEYS/$CN.key >> $BUNDLE_DIR/$CN.ovpn
echo "" >> $BUNDLE_DIR/$CN.ovpn
if openvpn --version | grep 2.3; then
# ta tls auth OpenVPN 2.3.x
echo «key-direction 1» >> $BUNDLE_DIR/$CN.ovpn
echo "<tls-auth>" >> $BUNDLE_DIR/$CN.ovpn
cat $OPENVPN_KEYS/ta.key >> $BUNDLE_DIR/$CN.ovpn
echo "</tls-auth>" >> $BUNDLE_DIR/$CN.ovpn
else
# ta tls crypt OpenVPN 2.4.x
echo "<tls-crypt>" >> $BUNDLE_DIR/$CN.ovpn
cat $OPENVPN_KEYS/ta.key >> $BUNDLE_DIR/$CN.ovpn
echo "</tls-crypt>" >> $BUNDLE_DIR/$CN.ovpn
fi
# DH key
echo "" >> $BUNDLE_DIR/$CN.ovpn
cat $OPENVPN_KEYS/dh.pem >> $BUNDLE_DIR/$CN.ovpn
echo "" >> $BUNDLE_DIR/$CN.ovpn
#echo ""
echo «COMPLETE! Copy the new unified config from here: /etc/openvpn/bundles/$CN.ovpn»
Где здесь можно еще пароль прикрутить?
site6893
13.12.2018 03:50ну как-то так видимо:
openssl pkcs12 -export -in temp.pem -out encrypted_key.p12
а в конфиге опенвпна прописывается как обычно
pkcs12 encrypted_key.p12
Ничего сложного ;-)
site6893
13.12.2018 03:59надеюсь вы понимаете что вот эта метка «неэкспортируемый.», это чисто софтверная примочка, а сами ключи всеравно хранятся на жестком диске, а не в каком-то специальном хранилище которое они никогда не покидают.
scruff
13.12.2018 05:48Всё лучше, чем хранить ключ в открытом виде. Буду рад если скинете пруф, что эта галочка бесполезная. На может и ЖД хранятся, но явно не в открытом виде.
ValdikSS
10.12.2018 21:29Cisco Anyconnect, если не ошибаюсь, может так работать. Для Shadowsocks есть обфусцирующие плагины, которые могут эмулировать POST-запрос. Obfsproxy тоже так может работать.
YourChief
11.12.2018 00:43Зря заминусовали. Сейчас в странах Среднего Востока с цензурой уже почти весь нераспознанный трафик просто обрезают и всё. Поэтому где-то как-то можно пропустить шифрованный трафик только внутри валидного HTTPS-соединения.
vinew
10.12.2018 18:49-1Как с поддержкой радиуса, назначения ip клиентам, работа на 443 порту по tcp, доступ с мобильных, разные сети для разных учетных записей?
dartraiden
10.12.2018 19:38+1Кроме этого поддерживаются… Android… но в них WireGuard выполняется в userspace со всеми вытекающими последствиями для производительности.
Если вендор наложил патчи на ядро (или есть возможность установки кастомного ядра), то будет выполняться на уровне ядра.
surefire
10.12.2018 20:03+1В системах с systemd вместо этого можно использовать sudo systemctl start wg-quick@wg0.service.
В системах с относительно свежим
systemd ?237
можно использовать встроенную вsystemd?networkd
поддержкуwireguard
. С использованием юнитов.netdev
и.network
DeniSix
10.12.2018 20:18Для Windows доступен «альтернативный» клиент TunSafe.
Им занимается автор ?Torrent, OpenTTD и ScummVM: Ludvig Strigeus
saipr
10.12.2018 22:18-1Однажды настраивал OpenVPN ручками и это было очень муторно
Есть и GUI.
Использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF и т.д.
Можно надеяться, что под "и т.д." скрывается российская криптография.
VJean
11.12.2018 06:57Вам не надоело в каждой статье, где хоть как-то обсуждается VPN, рекламировать свой сайт?
EndUser
10.12.2018 22:20WireGuard, с моей точки зрения, вообще идеален для пользователя
Генерируются ключи шифрования утилитой wg
создать серверный конфиг /etc/wireguard/wg0.conf
поднять туннель скриптом wg-quick
Но самое интересное
sudo wg-quick up /etc/wireguard/wg0.conf
Я сравниваю два подчёркнутых слова и чего-то не понимаю 8-)
Whuthering
11.12.2018 09:23+1Самой главной задачей любого туннеля или vpn, претендующих на "будущее", должна являться полная неотличимосиь со стороны DPI от повсеместно используемых "безобидных" протоколов типа HTTPS. Иначе нет смысла: каким бы стойким не было шифрования е и быстрыми алгоритмы, вы не сможете этим воспользоваться, когда государство тупо заблокирует ваш трафик как подозрительный
stavinsky
11.12.2018 09:40Боюсь скоро государство захочет поставить централизованный вайлдкард сертификат и будет пытаться чекать весь https трафик и не спасет нас мимикрирование под известные протоколы…
Vilgelm
11.12.2018 17:18Туннель внутри туннеля? В теории ведь VPN можно сделать из картинок с котиками. Да, это будет крайне медленно, неудобно и требовательно к ресурсам, но DPI и принудительный корневой сертификат не помогут.
Areso
11.12.2018 10:23Или не государство. Некоторые провайдеры и операторы тоже этим балуются, исключительно в силу того, что «могут».
OnYourLips
11.12.2018 13:09Если вы подсовываете левый сертификат, то браузер просто не будет отображать сайт.
Areso
11.12.2018 13:12+2Они не будут менять сертификат. Они порежут трафик с VPN/WireGuard/etc и успокоятся. К примеру, Yota местами так и делает.
rub_ak
11.12.2018 12:26Хватит уже путать «VPN», с шпионскими или анонимными сетями и прочими прокси для обхода блокировок.
Whuthering
11.12.2018 13:32VPN-технологии, такие как OpenVPN, SoftEther, Cisco AnyVPN и т.д. используются в том числе и для этого, поэтому никакой путаницы тут нет.
А вот регулирующие органы, кстати, наоборот могут перепутать, и занести ваш добропорядочный VPN для доступа в какую-нибудь корп. сеть тоже в блок-лист, если вы добровольно не впишетесь в белые списки и не дадите кому надо реквизиты доступа или не поставите роскомнадзоровские фильтры/ревизоры. Поэтому там маскировка под какой-нибудь HTTPS лишней тоже не будет.
whyme
11.12.2018 15:50+1Здесь нет сложной системы сертификатов и всего этого корпоративного ужаса, короткие ключи шифрования распространяются примерно как SSH ключи.
Сертификаты защищают от MITM атак и не относяться только к корпоративному сегменту. Без них у вас не будет другого выхода, кроме как передавать ключи по другим каналам связи, что неудобно для обычных пользователей. А если хотите передать безопасно и не в открытом виде, то это будет или передача при личной встрече или что-то с шифрованием и с теми же сертифкитами. Для vpn это, по моему, минус.
Да и «ужас» бывает не всегда, использую сертификаты letsencrypt для ipsec, вся настройка — это указать путь к сертификату на сервере, на клиенты сертификат ставить не надо.YourChief
11.12.2018 15:57А у Вас есть клиенты на Windows? Там вроде как особые требования к сертификатам и к значению маршрутов: wiki.strongswan.org/projects/strongswan/wiki/Win7CertReq
Prototik
11.12.2018 16:16+2Прошу заметить, что помимо описанного в статье wg-quick, wireguard интерфейсы умеет создавать systemd-networkd (с какой-то там версии, уточните в документации):
# cat /etc/systemd/network/15-vpn.netdev [NetDev] Name=vpn Kind=wireguard [WireGuard] PrivateKey = SOME_PRIVATE_KEY ListenPort = 51820 [WireGuardPeer] PublicKey = SOME_PUBLIC_KEY PresharedKey = SOME_PSK_KEY AllowedIPs = 172.16.0.0/12 Endpoint = 1.2.3.4:1234
Если у вас сервер на systemd — не используйте wg-quick, это очень… Странная штука.
rogoz
11.12.2018 16:29Такую простоту использования и компактность кодовой базы удалось достичь за счет отказа от функционала дистрибьюции ключей. Здесь нет сложной системы сертификатов и всего этого корпоративного ужаса, короткие ключи шифрования распространяются примерно как SSH ключи. Но в связи с этим возникает проблема: WireGuard будет не так просто внедрять в некоторых уже существующих сетях.
openvpn.net/community-resources/static-key-mini-howto
selenite
12.12.2018 18:36А как правильно прописывать маршруты через интерфейс wg на андроиде, если есть рут, и есть необходимость задавать их вручную? (Android использует iproute2 и несколько таблиц маршрутизации)
Zettabyte
13.12.2018 06:07Вы упомянули высокую производительность и даже результаты бенчмарков, а могли бы вы добавить что-нибудь насчёт системных требований?
Полагаю, что наиболее важным параметром будет объём оперативной памяти.
Т.е. VPS'а с какими параметрами будет достаточно для УайрГарда?
А то у них на сайт только kernel requirements есть.
DeriArt
13.12.2018 11:35Подскажите, вот установил wireguard на сервер (все норм), подключаюсь с винды через tunsafe и все вроде хорошо конектится, вот только инет на компе остается прежним (с айпишником моего провайдера, а не сервера) :) Если знаете как это решить напишите пожалуйста, буду вам очень-очень благодарен!
evitaly
Главная проблема каждого «еще одного VPN» — отсутствие поддержки в большинстве ОС без стороннего софта, а не пропускная способность. У того же IPSec с этим намного лучше.
almuerto
У ipsec гораздо хуже с простотой настройки, все эти фаза 1, фаза 2, потом еще поверх может быть l2tp, ike, сертификаты, psk. У openvpn начинаются проблемы при большой нагрузки по трафику, la сильно растет, т.к. userspace. Дополнительное удобство wireguard, что единожды поднятый интерфейс не пропадает из системы, даже если потеряна связь со всеми пирами.
YourChief
Главная проблема WireGuard в качестве VPN в том, что это не VPN. Это просто шифрованный тунель. Ближайшим аналогом того, что предоставляет wireguard, является вручную созданная Security Association средствами ядра Linux (например так).
Фаза 1, фаза 2 — это состояния протокола IKE, которые конечного пользователя не затрагивают. PSK — один из режимов аутентификации IKE, как и сертификаты. L2TP — просто один из видов полезной нагрузки, которая может быть инкапсулирована в IPsec, сейчас нет смысла настраивать VPN в таком режиме. Однако, это большой плюс самого IPsec — он, помимо тунельного, может работать и в транспортном режиме, в отличие от wireguard.
По поводу простоты конфигурации — сервер конфигурируется один раз и есть масса готовых рецептов и скриптов развёртывания VPN-серверов. Что же касается клиента:
Кроме этого, IPsec поддерживает массу протоколов шифрования и обмена ключами, и клиент может выбрать оптимальный для себя при согласовании соединения. В случае с Wireguard доступен только один набор криптопримитивов, и возможностей для его расширения не имеется. Кстати говоря, при желании, для IPsec доступны и постквантовые алгоритмы. Для Wireguard — нет.
IPsec на линуксе вообще не поднимает интерфейса, если работает нативно. Если нужно, чтобы какой-то адрес висел постоянно, чтобы на него можно было заранее жестко забиндить какой-то демон, то можно поднять его на lo или dummy-интерфейсе.
Noise protocol как раз для этого и используется в Wireguard. Однако, как верно заметили в комментах, сейчас уже в пору маскироваться под валидный HTTPS-трафик.
В итоге, несмотря на все восторги в адрес Wireguard, пока это даже близко не то же самое, что IKEv2.
TheDarkKRONOS
Wireguard уже есть на Android + под Windows есть Tunsafe (там тоже открытый исходный код).
YourChief
Он там работает нативно? То есть я получу обещанную скорость, выше чем у IPsec?
nezorflame
На Android — да, при условии наличия модуля в ядре.
На XDA уже масса ядер с модулем внутри.
rub_ak
А можно поподробней? В чем трафик измеряется хотя бы?
turbotankist
настраивал впн между дроплетами в диджиталоушен потом тестировал пропускную способность с iperf
нативно ~ 1,9Гб/c
openvpn ~ 100Mб/c
wireguard ~500-600Mб/c