Как стать автором
Обновить

Комментарии 50

Давно хотел попробовать WireGuard, да вот на типовом VPS (centos7 например) обычно вот этим все заканчивается

systemd[1]: Starting WireGuard via wg-quick(8) for wg0/server...
wg-quick[4030]: [#] ip link add wg0-server type wireguard
wg-quick[4030]: RTNETLINK answers: Operation not supported
wg-quick[4030]: Unable to access interface: Protocol not supported
wg-quick[4030]: [#] ip link delete dev wg0-server
wg-quick[4030]: Cannot find device "wg0-server"
systemd[1]: wg-quick@wg0-server.service: main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0/server.
systemd[1]: Unit wg-quick@wg0-server.service entered failed state.
systemd[1]: wg-quick@wg0-server.service failed.

А openVPN там же становится сразу и без танцев.

Disclaimer: это точка зрения с позиции продвинутого юзера.

У вас нет пакета wireguard-dkms. В старых версиях wireguard был out-of-tree module и его надо было компилировать (этим dkms занимается). А wg-quick — это userspace утилита, она не может принудить ядро к поддержки того, чего в ядре нет.

Угу, я уже нагуглил в свое время тоже самое. То есть проблема то известная, но скрипт для быстрой установки wg до сих пор никак не помогает ее решить.

Опять же, в том тесте что делал сегодня:
[root@ ~]# yum install wireguard-dkms
Loaded plugins: fastestmirror
Repository copr:copr.fedorainfracloud.org:jdoss:wireguard is listed more than once in the configuration
Loading mirror speeds from cached hostfile
* base: ftp.rz.uni-frankfurt.de
* epel: mirror.23media.com
* extras: mirror.23media.com
* updates: ftp.rz.uni-frankfurt.de
Package 1:wireguard-dkms-0.0.20200215-2.el7.noarch already installed and latest version
Nothing to do

Репозиторий указывать другой? Вот это все никак не способствует еще более широкому распространению WG имхо. А жаль.

Тоже самое, nothing to do

Спасибо.

У меня была эта же проблема на CentOS 7.7

запустил вот эти команды и теперь всё работает:

yum install kernel-headers-"$(uname -r)" kernel-devel-"$(uname -r)" -y
sudo dkms build wireguard/0.0.20200215
sudo dkms install wireguard/0.0.20200215
sudo modprobe wireguard


Вместо «0.0.20200215» вам нужно будет использовать вашу версию wireguard, которую можно найти вот так:
dkms status

Ну вам уже ответили. Могу только добавить, что с Linux 5.6 вообще ставить ничего не будет.

Нашел такое:
Обязательный момент, если Вы делаете настройку WG в Ubuntu и у Вас не стартует сервис:

Feb 07 08:59:32 my-wg-vscale systemd[1]: Starting WireGuard via wg-quick(8) for wghub…
Feb 07 08:59:32 my-wg-vscale wg-quick[30137]: [#] ip link add wghub type wireguard
Feb 07 08:59:32 my-wg-vscale wg-quick[30137]: RTNETLINK answers: Operation not supported
Feb 07 08:59:32 my-wg-vscale wg-quick[30137]: Unable to access interface: Protocol not supported
Feb 07 08:59:32 my-wg-vscale wg-quick[30137]: [#] ip link delete dev wghub
Feb 07 08:59:32 my-wg-vscale wg-quick[30137]: Cannot find device «wghub»
Feb 07 08:59:32 my-wg-vscale systemd[1]: wg-quick@wghub.service: Main process exited, code=exited, status=1/FAILURE
Feb 07 08:59:32 my-wg-vscale systemd[1]: wg-quick@wghub.service: Failed with result 'exit-code'.
Feb 07 08:59:32 my-wg-vscale systemd[1]: Failed to start WireGuard via wg-quick(8) for wghub.

Не забываем проверять загрузку модуля ядра modprobe wireguard:

root@my-wg-vscale:~#modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.15.0-50-generic

Устанавливаем:

root@my-wg-vscale:~#apt-get install linux-headers-$(uname -r)
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following additional packages will be installed:
linux-headers-4.15.0-50

Профит, сервис запускается.

К wireguard'у есть одна претензия. Они назвали этот параметр AllowedIPs, и теперь миллионы человек не могут настроить wireguard, потому что не понимают, что туда писать.


(если кто-то нашёл этот коммент и не знает что туда писать — это список адресов или CIDR'ов, которые "перехватывает" wireguard для заворачивания в туннель. Фактически, это список адресов, с которыми вы хотите общаться через VPN).

Там другая проблема всплывает: с динамической маршрутизацией или если нужны пересекающиеся адреса (несколько равноправных выходных узлов)

Это не проблема VPN-сервера никаким образом. Вы включаете маршрутизацию на "сервере" wg (если у вас звезда или звёзды) и спокойно разруливаете их любым удобным для вас протоколом.


Если у вас же mesh, то тут есть соотв. софт (да хоть bgp с "protocol direct"). Это точно не задача vpn-сервера и любая попытка вытащить сложную маршрутизацию туда ухудшит возможности "конструктора".

Такую маршрутизацию можно настроить только между серверами. BGP/OSPF на клиенте поднять сложно, если это, например, андроид. К тому же, если на сервере не указать адрес получателя, то не будет ходить мультикаст (ospf), а если указать, то он будет ходить только на указанный адрес, то есть остальные клиенты мимо кассы.
А еще стандартный wg-quick не позволяет задать peer адрес, приходится добавлять
PostUp = ip address add dev %i <local-ip> peer <remote-ip>

Клиенту не нужно держать полноценную сессию для маршрутизации.


(У меня в планах попробовать поиграться с wg и ipv6/ra — там можно анонсировать сети от роутера). Будут ли ra ходить через wg?

Предполагать могу разное, но не пробовал.

По поводу маршрутизации скажу так. Если удаленный сервер дает доступ только к определенным сетям (например, рабочий vpn), то адреса придется прописывать на каждом клиенте. И на каждом же обновлять по мере необходимости.

Если RA, то, может быть, будет само.
Проверил, будет.


net.ipv6.conf.wg0.accept_ra = 1
net.ipv6.conf.wg0.accept_ra_defrtr = 1
net.ipv6.conf.wg0.accept_ra_rtr_pref = 1

Было бы очень интересно почитать статью про настройку.
У меня на VPS хостер жмотится и выдает по одному ip, сеткой не делится, но на будущее пригодилось бы

Ща, я с ipv4 поверх wg наиграюсь, попробую сделать ipv6 без wg-quick'а.

дело скорее в динамических AllowedIPs, тогда и маршрутизацию можно будет нарулить.
Мой случай: это либо две точки входа в удаленную сеть, чтобы попасть внутрь, либо две равноправные точки выхода, которые надо динамически переключать между собой.

С точки зрения того же ospf стоит рассматривать сеть wg как point to multipoint non broadcast, прописать neighbour для доступных через vpn маршрутизаторов и проблемы с прописываем одинаковых мультикастовых allowed ip для разных пиров снимутся сами собой.

Можно пример конфигурации? Попробовал, но соседей не видит

Ещё они сильно не хотят делать DisallowedIPs или поддержку ! в AllowedIPs. В итоге для исключения одной несчастной подсети приходиться писать абсолютно все остальные, которые не перекроют. Например официальное приложение на Android делает вот это, при включении опции Exclude local networks:


AllowedIPs = 0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 8.8.8.8/32

Такие штуки можно с most specific в локальной маршрутизации разрулить.

Логика в этом названии всё-таки есть. Это как раз список тех адресов, к которым WireGuard в принципе разрешит обращаться через тоннель. Что вполне соответствует названию параметра. И по умолчанию создаст соответствующий маршрут, да, но маршрутизацию можно сделать и другую.
Скажем, у меня из домашней сети wg-тоннель к зарубежному серверу, куда маршрутизируются все нелюбимые РКНом адреса. AllowedIPs там 0.0.0.0/0, а маршруты уже строятся динамически.

С точки зрения настраивающего не понятно — это адреса в туннеле, или это адреса, с которых разрешено подключаться к wg? (так сказать, обратная сторона Endpoint). Вот я довольно серьёзно тупил при чтении мана над этим вопросом. Особенно, с учётом man'а к wg-quick, который говорит "ну, тут все параметры как у wg, плюс несколько своих".

К ваергарду как инструменту обхода цензуры есть немного другая претензия — он детектится даже ваершарком, не говоря уже про DPI

Но да, производительность у ваергарда топовая, если живешь в свободной стране, это достаточно хороший выбор
это список адресов или CIDR'ов, которые "перехватывает" wireguard

wg ничего не перехватывает. Что маршрутизацией на интерфейс завернули, то и передаёт. Так что allowedips это именно список разрешенных к проброске к данному пира через vpn адресов

wg-quick перехватывает, настраивая маршруты ip-set'ом.

ну это все-таки побочное действие именно wg-quick


если настраивать интерфейсы через systemd-networkd, то такой побочки нет и о маршрутах нужно заботиться самостоятельно. А вот сам wireguard пакеты с ip не в списке allowed от пира принимать не будет. И это основное предназначение параметра.

О как, т.е. это ещё и подобие файрвола на трафик из туннеля?

в первую очередь
wg это не point-to-point, а point-to-multipoint, т.е. один wg интерфейс может общаться с несколькими пирами. Традиционным фаерволом трафик разрулить будет весьма проблематично.

только он еще использует этот параметр для определения кому из пиров отправлять пакет. и очень неясно что происходит при определении пересекающихся/одинаковых подсетях в AllowwedIPs.
По сравнению с OpenVPN на телефоне меньше жрет батарею, быстрее скорость, моментальное переподключение при смене сетей.
На десктопе-сервере тоже есть плюсы, но, имхо, менее выражены

А что на телефоне с клиентами и Persistent VPN? Смогу ли я указать DNS внутри моей сети, через которую я выхожу в общий интернет?
У меня просто в домашней локалке сейчас l2tp/IPsec и я всё в pi-hole заворачиваю

Штатная настройка в конфиге — ip dns внутри сети. Проверял — dns трафик уходит в тоннель
Спасибо
Хм. А для чего вам l2tp, можно же завернуть в чистый ipsec с ikev2? Его сейчас, вроде, все поддерживают уже.
Так исторически сложилось) Mikrotik'и и одна нода в Чехии. Настроил когда-то и забил. Есть принципиальный плюс в переходе на ikev2?
Чуть меньше проблем с разными провайдерами, работает шустрее, проще с авторизацией по сертификату. В современном железе микротиков есть аппаратное ускорение.
Бонусом — на тот же сервер можно ходить не только микротиками, но и любым другим компьютером|телефоном без проблем. Ну и мне гораздо больше нравится жизнь без pre-shared key, но это уже личное.
Микротики, ноут, телефон и нода в Google Cloud :)
Кинь в меня куском конфига Микротика, если не трудно) Именно эту секцию.
Попробовал Wireguard с помощью Streisand, но есть проблемы: в zoom меня не слышат, а на мобиле в сети Мегафона он вообще не подключается. А так, да, работает раза в 2-3 быстрее чем OpenVPN.

Случайно не по 53 порту подключались? Не смог на МФ подключиться с андройда по 53 порту, на других портах работает отлично

Оп. А Мегафон режет его?

Только что проверил на всякий случай. Да мегафон режет или фильтрует днс трафик по 53 порту, соответствено и wireguard не поднимается. На мтс все работает отлично.

Скорее всего, будут проблемы с любыми провайдерами, кто заворачивает DNS к себе. Должны быть такие же проблемы у Дом.ru и прочих.
Я правильно понимаю, что никаких вызовов скриптов в моменты подключения\отключения клиентов не предусмотрено?
И маршруты на адреса пиров есть в таблице маршрутов всегда, даже если пир оффлайн?
Это by design фича, или всё таки как то будет дописываться?

Они получили автоматизированное криптографическое доказательство математических методов, лежащих в основе WireGuard, хотя в самом коже всё ещё могут быть проблемы безопасности.


Опечатку исправьте, коже->коде

Зарегистрируйтесь на Хабре, чтобы оставить комментарий