У меня есть сервер vpn wireguard который прекрасно работает. Я подключаюсь к нему из ubuntu 20.04 и со своего телефона на android. И там и там нет никаких проблем. Но есть проблема на windows 11. Там при подключении к впн просто пропадает интернет. Я пробовал скармливать те же самые конфиги что и ubuntu клиенту и андроид клиенту. Но оно не работает. Вообще никак. Так же я пробовал создавать нового юзера на сервере и скармливать его конфиг windows клиенту. Тоже не работает. Делаю ctrl+c ctrl+v Этого конфига на линукс и всё запускается с первой попытки. Из этого я сделал два вывода:
- Никаких проблем с сервером нет (иначе почему линукс и андроид клиенту отлично работают?)
- Никаких проблем с конфигом клиента так же нет. Потому что когда я скармливаю тот же самый конфиг линукс и андроид клиента то всё прекрасно работает.
Значит проблема исключительно с моим любимым майкрософтом и его виндой, у которого постоянно какие-то танцы с бубном. Конфиг который я вставляю в клиент:
[Interface]
PrivateKey = <private_key>
Address = 10.0.0.5/32
DNS = 8.8.8.8
[Peer]
PublicKey = <public_key>
AllowedIPs = 0.0.0.0/0
Endpoint = <server_ip>:51830
PersistentKeepalive = 20
Я пробовал отключать брандмауэр винды это никакого профита не принесло. Всё тоже самое. Антивирус только встроенный в винду. Его я тоже пробовал отключать тоже 0 профита. Так же эта проблема не связана с моим роутером. Т.к. линукс установлен на этом же компе и на этом же ssd диске, работает он так же через этот роутер и не имеет никаких проблем. Логи wireguard выглядят так:
2022-06-29 23:46:27.267: [TUN] [myvpn] Sending handshake initiation to peer 1 (<server_ip>:51830)
2022-06-29 23:46:32.428: [TUN] [myvpn] Handshake for peer 1 (<server_ip>:51830) did not complete after 5 seconds, retrying (try 2)
2022-06-29 23:46:32.428: [TUN] [myvpn] Sending handshake initiation to peer 1 (<server_ip>:51830)
2022-06-29 23:46:37.437: [TUN] [myvpn] Sending handshake initiation to peer 1 (<server_ip>:51830)
2022-06-29 23:46:42.515: [TUN] [myvpn] Handshake for peer 1 (<server_ip>:51830) did not complete after 5 seconds, retrying (try 2)
2022-06-29 23:46:42.515: [TUN] [myvpn] Sending handshake initiation to peer 1 (<server_ip>:51830)
При этом сам клиент пишет что всё ок и соединение активно. То что что-то не так становится понятно только по логам и по тому что нет интернета. В логах он жалуется что не получает ответа от сервера. Но я на 99% уверен что запросы клиента даже не доходят до сервера благодаря винде и где-то теряются во всяких брандмауэрах (хотя я его отключил, непонятно что ещё может быть). Так же заметил интересную особенность. После активации тоннеля адаптер создаётся, но там почему-то написано, что у него нет доступа к интернету.
Не знаю должно ли так быть в винде. Но это странно, ведь весь трафик после активации через этот адаптер отправляется. А как он отправится если у него нет доступа к инету?
route print
выводит это (при включенном тоннеле):
C:\Windows\system32>route print
===========================================================================
Список интерфейсов
18...........................WireGuard Tunnel
10...40 b0 76 0d a7 4d ......Realtek PCIe GbE Family Controller
1...........................Software Loopback Interface 1
===========================================================================
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.69 35
0.0.0.0 128.0.0.0 On-link 10.0.0.5 5
10.0.0.5 255.255.255.255 On-link 10.0.0.5 261
127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
127.255.255.255 255.255.255.255 On-link 10.0.0.5 261
128.0.0.0 128.0.0.0 On-link 10.0.0.5 5
192.168.0.0 255.255.255.0 On-link 192.168.0.69 291
192.168.0.69 255.255.255.255 On-link 192.168.0.69 291
192.168.0.255 255.255.255.255 On-link 192.168.0.69 291
224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
224.0.0.0 240.0.0.0 On-link 192.168.0.69 291
255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
255.255.255.255 255.255.255.255 On-link 192.168.0.69 291
===========================================================================
Постоянные маршруты:
Отсутствует
Для многих обычных пользователей слово VPN сразу ассоциируется со средством доступа в сеть интернет. Действительно, это один из самых популярных сценариев использования данной технологии. Но если для большинства это всего лишь способ обхода ограничений, то специалисты чаще рассматривают VPN как защищенный канал в сетях с низким уровнем доверия: публичный Wi-Fi, сети баров, гостиниц, аэропортов. А если вы работаете с чувствительной информацией, то для таких целей лучше использовать собственный сервер, например, создав его на базе WireGuard.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
WireGuard в последнее время стремительно набирает популярность благодаря своей простоте и скорости работы. Конечно, есть и обратная сторона медали, но в данном сценарии раскрываются в основном только плюсы.
Напомним, WireGuard — это туннель без сохранения состояния, а следовательно применять к нему термины «клиент» и «сервер» некорректно, каждый узел WireGuard может как подключаться к другим узлам, так и принимать соединения. Но если мы говорим об организации выхода в интернет посредством VPN, то здесь данные термины уместны. В данном случае VPN-сервер — это узел предоставляющий возможность выхода в интернет, а VPN-клиенты — узлы, которые данную возможность используют, при этом технология реализации самого VPN-канала роли не играет.
Настройка VPN-сервера
Для обеспечения доступа в интернет VPN-сервер должен находиться на узле, обладающем достаточной пропускной способностью и точкой выхода в определенном географическом положении, которое зависит от того, к каким именно ресурсам вам нужно получать доступ. В большинстве случаев отлично подойдет VPS (виртуальный выделенный сервер) с минимальным тарифом в нужном расположении и ОС семейства Linux. Если говорить о семействе Debian / Ubuntu, то WireGuard поддерживается начиная с Debian 10 и Ubuntu 18.04 LTS. Все описанные ниже действия следует выполнять с правами суперпользователя root или через sudo.
Если вы используете Debian 10, то вам потребуется подключить backports-репозиторий:
echo deb http://deb.debian.org/debian buster-backports main > /etc/apt/sources.list.d/buster-backports.list
Обновим источники пакетов и установим WireGuard:
apt update
apt install wireguard
Следующим шагом выполним генерацию ключей, для этого перейдем в директорию /etc/wireguard:
cd /etc/wireguard
Временно изменим маску для обеспечения нужного набора прав на создаваемые файлы:
umask 077
Выполним генерацию ключевой пары:
wg genkey > privatekey
wg pubkey < privatekey > publickey
И вернем маску к стандартным значениям:
umask 022
Получим содержимое закрытого ключа, для этого воспользуемся командой:
cat /etc/wireguard/privatekey
Скопируем его содержимое, оно понадобится нам на следующем шаге, помним, что приватный ключ является секретным!
Создадим и откроем на редактирование конфигурационный файл WireGuard:
nano /etc/wireguard/wg0.conf
В данном случае мы используем nano, если вам больше по душе редактор mс, то просто замените nanо на mcedit.
Прежде всего настроим сетевой интерфейс WireGuard, для этого добавим в файл следующую секцию:
[Interface]
Address = 10.20.0.1/24
ListenPort = 34567
Privatekey = kNYGiCR3/ikepyURjFnEu5ueoCBsP2pjvGdcj2pggG8=
Настроек немного, указываем адрес интерфейса в VPN-сети, порт и секретный ключ. Зарезервированного порта для службы WireGuard нет, поэтому можем использовать любой.
Сохраним конфигурацию и добавим службу в автозагрузку, одновременно запустив ее:
systemctl enable --now wg-quick@wg0
В качестве имени службы используется wg-quick@<имя_конфигурационного_файла>.
Посмотреть статус WireGuard можно командой:
wg
Если все сделано правильно, то вы увидите информацию о созданном интерфейсе, в частности порт и публичный ключ.
Публичный ключ не является секретным, его также следует скопировать, он понадобиться нам для настройки клиентов.
Настройка NAT и брандмауэра
Для выхода клиентов в интернет нам потребуется рабочая служба NAT, а также требуется обеспечить достаточный уровень безопасности как самого сервера, так и работающих через него клиентов.
Прежде всего включим маршрутизацию, чтобы иметь возможность пересылать пакеты между интерфейсами, для этого откроем файл /etc/sysctl.conf, найдем и раскомментируем в нем следующую опцию:
net.ipv4.ip_forward = 1
Затем перечитаем настройки:
sysctl -p
Остальными настройками будет управлять iptables и этот вопрос может вызвать ряд затруднений. Настройки iptables не сохраняются при перезагрузке и существуют различные способы сделать это, наиболее простые и понятные — это скрипты, более современные — это специальные утилиты.
Более подробно о всех этих способах вы можете прочитать в нашей статье: Основы iptables для начинающих. Как сохранить правила и восстановить их при загрузке
Если вы не обладаете большим опытом работы с iptables, то, на наш взгляд, лучше начать со скрипта, а уже потом переходить к использованию утилит.
Создадим файл скрипта и разместим его в /etc:
nano /etc/nat-rules
И добавим в него следующее содержимое:
#!/bin/sh
# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X# Разрешаем уже установленные соединения. Первое правило в цепочке!!!
iptables -A INPUT -i ens33 -m state --state ESTABLISHED,RELATED -j ACCEPT# Разрешаем подключения по SSH
iptables -A INPUT -i ens33 -p tcp --dport 22 -j ACCEPT# Разрешаем подключения к WireGuard
iptables -A INPUT -i ens33 -p udp --dport 34567 -j ACCEPT#Запрещаем входящие извне. Последнее правило в цепочке!!!
iptables -A INPUT -i ens33 -j DROP# Разрешаем уже установленные транзитные соединения
iptables -A FORWARD -i ens33 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT# Запрещаем транзитный трафик извне
iptables -A FORWARD -i ens33 -o wg0 -j DROP# Включаем маскарадинг для WireGuard клиентов
iptables -t nat -A POSTROUTING -o ens33 -s 10.20.0.0/24 -j MASQUERADE
Это минимальная конфигурация брандмауэра, разрешающего только SSH и WireGuard подключения к серверу, по мере необходимости следует добавить в нее собственные правила. Все они должны располагаться между правилами, разрешающими уже установленные соединения и запрещающего входящие соединения извне. В качестве внешнего интерфейса сервера используется ens33.
Сделаем данный файл исполняемым:
chmod + x /etc/nat-rules
Для его запуска можно добавить в секцию [Interface] конфигурационного файла WireGuard опцию:
PostUp = /etc/nat-rules
В большинстве случаев этого достаточно, но, если вдруг у нас не запустится WireGuard мы останемся без брандмауэра. Поэтому мы предлагаем пойти другим путем.
Прежде всего убедимся, что все правила работают как следует, для этого достаточно просто запустить скрипт.
/etc/nat-rules
Посмотреть состояние брандмауэра можно командой:
iptables -L -vn
Если все работает нормально, то установим утилиту iptables-persistent:
apt install iptables-persistent
Во время установки вам будет предложено сохранить текущие правила, с чем следует согласиться. После чего ваши правила будут автоматически сохранены в /etc/iptables/rules.v4, откуда будут восстанавливаться при загрузке. Скрипт нам больше не нужен, можем его убрать.
Можно ли обойтись без скрипта? Можно. Но не все обладают достаточными навыками работы с iptables, поэтому предложенный нами способ, хоть и является более длинным и избыточным, позволяет выполнить настройку брандмауэра наиболее просто для начинающих.
Настройка WireGuard клиента в Windows
Скачайте и установите WireGuard для Windows c официального сайта. В приложении выберите Добавить туннель — Добавить пустой туннель.
При этом автоматически будет создана ключевая пара и откроется окно редактирования конфигурационного файла, который уже будет содержать секцию [Interface] и закрытый ключ, все что нам останется, это добавить туда опцию с адресом интерфейса, его следует выбирать из того же диапазона, который вы указали на сервере.
Address = 10.20.0.101/24
Ниже добавим секцию [Peer] для подключения к серверу:
[Peer]
PublicKey = kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA=
AllowedIPs = 10.20.0.0/24, 0.0.0.0/0
Endpoint = 203.0.113.2:34567
PersistentKeepalive = 25
Которая содержит публичный ключ сервера, его адрес и порт, разрешенные сети. Так как нам требуется обеспечить выход в интернет через WireGuard подключение, то в список сетей мы добавили 0.0.0.0/0, что обеспечит направление в туннель всего исходящего трафика. Опция PersistentKeepalive предполагает обмен служебным трафиком с указанным пиром раз в 25 секунд, что требуется для поддержания нормальной работы клиента в том случае, если он находится за NAT.
После сохранения настроек туннельный интерфейс будет поднят и статус соединения будет Подключен, хотя мы еще не делали никаких настроек для данного клиента со стороны сервера. Кого-то может удивить или ввести в заблуждение такое положение дел и именно поэтому мы каждый раз акцентируем тот факт, что WireGuard — это туннель без сохранения состояния. Он ничего не знает о реальном состоянии канала и пира, к которому производится подключение, единственный способ это выяснить — послать пакет на другую сторону туннеля.
Так что же означает Подключен? Только то, что в конфигурации нет ошибок и туннельный интерфейс успешно поднят. Поэтому скопируем публичный ключ клиента и снова вернемся на сервер. Откроем конфигурационный файл и добавим в него следующую секцию:
[Peer]
PublicKey =i p9UjCFHiLnhQTcVgS/Y7j0s8caNj9hhn5RS2UqMXRo=
AllowedIPs = 10.20.0.101/32
Где мы укажем публичный ключ клиента и его внутренний IP-адрес, с которого следует принимать пакеты.
Перезапустим службу WireGuard на сервере:
systemctl restart wg-quick@wg0
Теперь можем проверить связь, для начала пропингуем внутренний адрес сервера 10.20.0.1 — если он отвечает, то туннель работает нормально.
Как мы уже говорили, при тех настройках, которые мы указали в туннель будет заворачиваться весь исходящий трафик клиента, в т.ч. и DNS-запросы. Поэтому если у вас в системе указаны локальные адреса DNS, скажем 192.168.1.1 роутера или адреса провайдера, недоступные из внешнего интернета, то разрешение имен работать не будет. Внешне это будет проявляться в том, что интернет работать не будет с указанием на ошибку DNS.
WireGuard прост, и обратная сторона этой простоты заключается в том, что мы не можем передавать нужные опции с сервера на клиента, как в OpenVPN, поэтому спасение утопающих — дело рук самих утопающих. К счастью, WireGuard позволяет задать опции для конфигурирования локального сетевого интерфейса, поэтому откройте приложение Wireguard, найдите свой туннель и выберите Редактировать, в открывшемся окне в секцию [Interface] добавьте опцию:
DNS = 8.8.8.8, 1.1.1.1
Теперь при поднятии туннельного интерфейса система будет использовать указанные адреса, в их качестве можно использовать любые публичные сервера доступные через ваш VPS.
Настройка WireGuard клиента в Linux
Несмотря на то, что WireGuard уже давно поддерживается на уровне ядра Linux с графическими инструментами для его настройки дело обстоит не совсем хорошо, многое зависит от конкретного дистрибутива, но управлять WireGuard из командной строки тоже очень просто.
С правами root или через sudo выполним установку и генерацию ключей точно также, как мы это делали на сервере, затем также создадим конфигурационный файл:
nano /etc/wireguard/wg0.conf
И внесем в него следующее содержимое:
[Interface]
Address = 10.20.0.102/24
Privatekey = 4Hfj7lZuaQZWkW2OGHPlkhr3Jxheg/lpcJkwiosvG0w=
DNS = 8.8.8.8, 1.1.1.1[Peer]
PublicKey = kKxQ4wF+kUrpsTGwjMvlSwX45WV4nixG76/+sKlzEQA=
AllowedIPs = 10.20.0.0/24, 0.0.0.0/0
Endpoint = 203.0.113.2:34567
PersistentKeepalive = 25
Секция [Interface] описывает сетевой интерфейс, в ней мы указываем секретный ключ клиента, желаемый адрес в VPN-сети и DNS-сервера. Секция [Peer] отвечает за подключение к серверу, у всех клиентов она общая, содержит публичный ключ сервера, его адрес и порт, а также параметры подключения и роутинга.
Для управление туннелем в ручном режиме можно использовать утилиту wg-quick, для подключения выполните:
wg-quick up wg0
где wg0 — имя вашего конфигурационного файла, с этим же именем будет создан сетевой интерфейс. Если запустить команду от имени обычного пользователя будет автоматически запрошено повышение прав.
Для отключения используйте:
wg-quick down wg0
При этом не забудьте добавить секцию [Peer] для этого узла на сервере и перезапустить службу, для этого понадобится указать публичный ключ клиента и его адрес, точно также как мы это делали для Windows-клиента.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Информационная безопасность, Системное администрирование, Сетевые технологии, Криптография, Блог компании Дата-центр «Миран»
Рекомендация: подборка платных и бесплатных курсов Python — https://katalog-kursov.ru/
В последнее время WireGuard привлекает к себе большое внимание, фактически — это новая «звезда» среди VPN. Но так ли он хорош, как кажется? Я хотел бы обсудить некоторые наблюдения и рассмотреть реализацию WireGuard, чтобы рассказать, почему он не является решением, которое заменит IPsec или OpenVPN.
В этой статье я хотел бы развенчать некоторые мифы [вокруг WireGuard]. Да, читать придется долго, так что если вы еще не заварили себе чашечку чая или кофе, то самое время это сделать. Еще я бы хотел сказать спасибо Питеру за корректуру моих хаотичных мыслей.
Я не ставлю себе цель дискредитировать разработчиков WireGuard, обесценить их усилия или идеи. Их продукт — рабочий, но лично я считаю, что он представлен совершенно не тем, чем является на самом деле — представлен как замена IPsec и OpenVPN, которой на самом деле сейчас просто не существует.
В качестве примечания хочется добавить, что ответственность за такое позиционирование WireGuard несут СМИ, которые о нем рассказывали, а не сам проект или его создатели.
В последнее время на тему ядра Linux было не слишком много хороших новостей. Так, нам рассказали о чудовищных уязвимостях процессора, которые были нивелированы программным способом, а Линус Торвальдс рассказывал об этом слишком грубо и скучно, утилитарным языком разработчика. Планировщик или сетевой стек нулевого уровня — тоже не слишком понятные темы для глянцевых журналов. И тут появляется WireGuard.
На бумаге все звучит здорово: захватывающая воображение новая технология.
Но давайте посмотрим на нее чуть внимательнее.
Эта статья основана на официальной документации WireGuard, которую написал Джейсон Доненфельд. Там он объясняет концепцию, цель и техническую реализацию [WireGuard] в ядре Linux.
Первое предложение гласит:
WireGuard […] стремится заменить как IPsec в большинстве кейсов его использования, так другие популярные решения на основе пользовательского пространства и/или TLS, такие как OpenVPN, при этом являясь более безопасным, производительным и простым в использовании [инструментом].
Конечно, главное достоинство всех новых технологий — это их простота [в сравнении с предшественниками]. Но VPN также должен быть эффективным и безопасным.
И что дальше?
Если вы скажете, что вам [от VPN] нужно не это, то на этом чтение можно заканчивать. Однако я замечу, что такие задачи ставятся перед любой другой технологией туннелирования.
Самое интересное из приведенной выше цитаты кроется в словах «в большинстве случаев», которые, само собой, прессой были проигнорированы. И вот, мы там, где оказались из-за созданного этой небрежностью хаоса — в этой статье.
Станет ли WireGuard заменой моей [IPsec] VPN-связи между сайтами?
Нет. Здесь просто нет шансов, что крупные вендоры, такие как Cisco, Juniper и другие приобретут для своих продуктов WireGuard. Они не «запрыгивают в мимо проходящие поезда» на ходу, если на это нет какой-то большой необходимости. Позже я расскажу о некоторых причинах, по которым они, вероятно, не смогут установить на борт своих продуктов WireGuard, даже если бы захотели.
Перенесет ли WireGuard мой RoadWarrior с ноутбука в дата-центр?
Нет. Прямо сейчас в WireGuard не реализовано огромное количество важных функций, чтобы он смог сделать что-то подобное. Например, он не может использовать динамические IP-адрес на стороне сервера туннеля, и уже только это ломает весь сценарий подобного использования продукта.
IPFire часто используется для дешевых интернет-каналов, например, для DSL или кабельного соединения. Это имеет смысл для малого или среднего бизнеса, которому не нужно быстрое оптоволокно. [Примечание от переводчика: не стоит забывать, что в плане связи Россия и некоторые страны СНГ находятся далеко впереди Европы и США, потому что мы начали строить свои сети намного позже и с приходом Ethernet и оптоволоконных сетей в качестве стандарта, нам было проще перестроиться. В тех же странах ЕС или США, xDSL широкополосный доступ на скорости 3-5 Мбит/с — до сих пор всеобщая норма, а оптоволоконное подключение стоит каких-то нереальных по нашим меркам денег. Поэтому автор статьи и говорит о DSL или кабельном подключении, как о норме, а не дремучей старине.] Однако DSL, кабельные, LTE (и другие беспроводные методы доступа) имеют динамические IP-адреса. Конечно, временами они меняются не часто, но все же меняются.
Существует подпроект под названием «wg-dynamic», который добавляет демон пользовательского пространства для преодоления этого недостатка. Огромная проблема пользовательского сценария, описанного выше — это усугубление ситуации динамической IPv6-адресацией.
С точки зрения дистрибьютора все это тоже выглядит не очень. Одна из целей разработки было сохранить простоту и чистоту протокола.
К сожалению, все это на самом деле стало слишком простым и примитивным, так что нам приходится использовать дополнительное ПО, чтобы вся эта конструкция была жизнеспособной в условиях реальной эксплуатации.
WireGuard так просто пользоваться?
Пока нет. Я не говорю, что WireGuard никогда не будет хорошей альтернативой для проброса туннеля между двумя точками, но пока он — всего лишь альфа-версия продукта, которым должен стать.
Но что тогда на самом деле он делает? Действительно ли IPsec настолько сложнее в эксплуатации?
Очевидно, что нет. Поставщик IPsec продумал этот момент и поставляет свой продукт вместе с интерфейсом, например, с IPFire.
Для настройки VPN-туннеля через IPsec вам потребуется пять наборов данных, которые нужно будет внести в конфигурацию: ваш собственный публичный IP-адрес, публичный IP-адрес принимающей стороны, подсети, которые вы хотите сделать общедоступными через это VPN-соединение и pre-shared ключ. Таким образом, VPN настраивается в течение нескольких минут и он совместим с любым вендором.
К сожалению, в этой истории есть несколько исключений. Каждый, кто пытался пробросить VPN-туннель через IPsec к машине на OpenBSD, понимает, о чем я говорю. Есть еще пара болезненных примеров, но на самом деле положительной практики использования IPsec намного и намного больше.
О сложности протокола
Конечный потребитель не должен беспокоиться о сложности протокола.
Если бы мы жили в мире, где это было реальной заботой юзера, то мы уже давно избавились бы от SIP, H.323, FTP и других, созданных более десяти лет назад протоколов, которые плохо работают с NAT.
Есть причины, по которым IPsec сложнее, чем WireGuard: он делает намного больше вещей. Например, аутентификация пользователя с использованием логина/пароля или SIM-карты с EAP. У него расширенная возможность добавления новых криптографических примитивов.
А у WireGuard этого нет.
И это означает, что WireGuard в какой-то момент сломается, потому что один из криптографических примитивов ослабнет или будет полностью скомпрометирован. Автор техдокументации говорит об этом так:
Стоит отметить, что WireGuard криптографически самоуверен. Ему намеренно не хватает гибкости шифров и протоколов. Если в низлежащих примитивах будут обнаружены серьезные дыры, все конечные точки потребуется обновить. Как видно из продолжающегося потока уязвимостей SLL/TLS, гибкость шифрования сейчас колоссально увеличилась.
Последнее предложение абсолютно верно.
Достижение консенсуса на тему того, какое шифрование использовать, делает протоколы типа IKE и TLS более сложными. Слишком сложными? Да, в TLS/SSL уязвимости встречаются достаточно часто, и альтернативы им нет.
Об игнорировании реальных проблем
Представьте, что у вас есть VPN-сервер с 200 боевыми клиентами, где-то по всему миру. Это вполне стандартный сценарий использования. Если вам придется менять шифрование, вам нужно доставить обновление на все копии WireGuard на этих ноутбуках, смартфонах и так далее. Одновременно доставить. Это буквально невозможно. Администраторам, которые попытаются это сделать, потребуются месяцы для развертывания необходимых конфигураций, а средним компаниям буквально понадобятся годы на проведение подобного мероприятия.
IPsec и OpenVPN предлагают функцию согласования шифров. Поэтому некоторое время, после которого вы включите новое шифрование, будет работать и старое. Благодаря этому текущие клиенты смогут обновиться до новой версии. После того, как обновление будет раскатано, вы просто выключите уязвимое шифрование. И все! Готово! вы восхитительны! А клиенты этого даже не заметят.
На самом деле это очень распространенный кейс для больших развертываний, и даже OpenVPN испытывает в этом некоторые трудности. Обратная совместимость важна, и хотя вы используете более слабое шифрование, для многих это не становится причиной закрытия бизнеса. Потому что это приведет к параличу работы сотен клиентов из-за неспособности выполнять свою работу.
Команда WireGuard сделала свой протокол проще, но совершенно непригодным для людей, которые не имеют постоянного контроля над обоими пирами своего туннеля. По моему опыту именно такой сценарий — наиболее распространенный.
Криптография!
Но что это за интересное новое шифрование, которое использует WireGuard?
WireGuard использует Curve25519 для обмена ключами, ChaCha20 для шифрования и Poly1305 для аутентификации данных. Также он работает с SipHash для хеш-ключей и BLAKE2 для хеширования.
ChaCha20-Poly1305 стандартизирован для IPsec и OpenVPN (через TLS).
Очевидно, что разработка Даниэля Бернштейна используется очень часто. BLAKE2 является преемником BLAKE, финалиста SHA-3, который не выиграл из-за своего сходства с SHA-2. Если бы SHA-2 был взломан, была большая вероятность, что и BLAKE окажется скомпрометирован.
IPsec и OpenVPN не нуждаются в SipHash из-за их дизайна. Таким образом, единственное, что в настоящее время не может использоваться с ними, это BLAKE2, и то, только пока он не будет стандартизирован. Это не есть большой недостаток, потому что VPN используют HMAC для создания целостности, которая считается сильным решением даже в связке с MD5.
Так я пришел к выводу, что во всех VPN используется практически один и тот же набор криптографических инструментов. Поэтому WireGuard не более и не менее безопасен, чем любые другие актуальные продукты, когда дело доходит до шифрования или целостности передаваемых данных.
Но даже не это самое главное, на что стоит обратить внимание согласно официальной документации проекта. Ведь главное — это скорость.
WireGuard быстрее других решений VPN?
Если кратко: нет, не быстрее.
ChaCha20 — это потоковый шифр, который легче внедрить в программное обеспечение. Он шифрует один бит за раз. Блочные протоколы, такие как AES, шифруют блок по 128 бит за раз. Для реализации аппаратной поддержки потребуется гораздо больше транзисторов, поэтому более крупные процессоры поставляются с AES-NI — расширением набора команд, которое выполняет некоторые задачи процесса шифрования для его ускорения.
Ожидалось, что AES-NI никогда не попадет в смартфоны [а оно попало, — прим. пер.]. Для этого был разработан ChaCha20 — в качестве легкой и экономичной альтернативы, щадящей заряд батареи. Поэтому для вас может стать новостью, что каждый смартфон, который вы можете сегодня приобрести, имеет то или иное ускорение для AES и работает с этим шифрованием быстрее и с меньшим энергопотреблением, чем с ChaCha20.
Очевидно, что практически каждый процессор для настольных ПК / серверов, купленный за последние пару лет, имеет AES-NI.
Следовательно, я ожидаю, что AES превзойдет ChaCha20 в каждом отдельно взятом сценарии. В официальной документации WireGuard упоминается, что благодаря AVX512 ChaCha20-Poly1305 будет превосходить AES-NI, но это расширение набора команд будет доступно только на больших процессорах, что опять-таки не поможет с меньшим и мобильным оборудованием, которое всегда будет быстрее работать с AES-NI.
Я не уверен, можно ли было предвидеть это при разработке WireGuard, но сегодня факт того, что он гвоздями прибит к одному шифрованию — уже является недостатком, который может не очень хорошо повлиять на его работу.
IPsec позволяет свободно выбирать, какое шифрование лучше всего подходит для вашего случая. И само собой, это необходимо, если вы, например, хотите передать 10 и более гигабайт данных через VPN-соединение.
Проблемы интеграции в Linux
Хотя WireGuard выбрал современный протокол шифрования, это уже вызывает массу проблем. И вот, вместо того, чтобы использовать то, что поддерживается ядром из коробки, интеграция WireGuard откладывалась годами из-за отсутствия этих примитивов в Linux.
Я не до конца в курсе, какова ситуация в других операционных системах, но вероятно, она не сильно отличается от ситуации с Linux.
Как выглядит реальность?
К сожалению, каждый раз, когда клиент просит меня настроить ему VPN-соединение, я сталкиваюсь с тему, что они используют устаревшие учетные данные и шифрование. 3DES в связке с MD5 — все еще распространенная практика, также как AES-256 и SHA1. И хотя последний чуть лучше — это не то, чем стоит пользоваться в 2020 году.
Для обмена ключами всегда используется RSA — медленный, но достаточно безопасный инструмент.
Мои клиенты связаны с таможенными органами и другими госорганизациями и учреждениями, а также с крупными корпорациями, названия которых знают по всему миру. Все они используют форму запроса, которая была создана десятилетия назад, а возможность использования SHA-512 просто никогда не добавлялась. Я не могу сказать, что это как-то явно влияет на технологический прогресс, но очевидно, это замедляет корпоративные процесс.
Мне больно это видеть, потому что IPsec поддерживает эллиптические кривые на вскидку так с года 2005. Curve25519 также новее и доступен для использования. Еще есть альтернативы AES, такие как Camellia и ChaCha20, но, очевидно, не все из них поддерживаются крупными поставщиками, такими как Cisco и прочими.
И люди этим пользуются. Есть много комплектов Cisco, есть множество комплектов, созданных для работы с Cisco. Они являются лидерами рынка в этом сегменте и не очень заинтересованы в каких-либо инновациях.
Да, ситуация [в корпоративном сегменте] ужасна, но мы не увидим каких-либо изменений из-за WireGuard. Производители, вероятно, никогда не выявят каких-либо проблем с производительностью уже используемого инструментария и шифрования, не увидят проблем при использовании IKEv2 — и поэтому они не ищут альтернатив.
Вообще, вы задумывались когда-нибудь об отказе от Cisco?
Бенчмарки
А теперь перейдем к бенчмаркам из документации WireGuard. Хотя это [документация] не научная статья, я все же ожидал от разработчиков более научного подхода, либо использования научного подхода в качестве эталона. Любые бенчмарки бесполезны, если их нельзя воспроизвести, и еще более они бесполезны, когда получены в лабораторных условиях.
В сборке WireGuard для Linux он получает преимущество, используя GSO — Generic Segmentation Offloading. Благодаря ему, клиент создает огромный пакет размером 64 килобайта и шифрует/расшифровывает его за один подход. Таким образом, затраты на вызов и реализацию криптографических операций снижаются. Если вы хотите максимизировать пропускную способность вашего VPN-соединения — это хорошая идея.
Но, как это водится, в реальности не все так просто. Отправка такого большого пакета на сетевой адаптер требует, чтобы он бы был нарезан на множество меньших пакетов. Обычный размер отправления составляет 1500 байт. То есть наш гигант в 64 килобайта будет разделен на 45 пакетов (1240 байт информации и 20 байт IP-заголовка). Затем, на некоторое время они полностью заблокируют работу сетевого адаптера, потому что они должны быть отправлены вместе и сразу. В итоге это приведет к скачку приоритета, а такие пакеты, как, например, VoIP, будут поставлены в очередь ожидания.
Таким образом, высокая пропускная способность, о которой так смело заявляет WireGuard, достигается за счет замедления сетевой работы других приложений. И команда WireGuard уже подтвердила этот мой вывод.
Но давайте двигаться дальше.
Согласно бенчмаркам в техдокументации, соединение показывает пропускную способность в 1011 Мбит/с.
Впечатляет.
Особенно это впечатляет из-за того, что максимальная теоретическая пропускная способность одного гигабитного Ethernet-подключения составляет 966 Мбит/с при размере пакета в 1500 байт минус 20 байт на IP-заголовок, 8 байт на UDP-заголовок и 16 байт на заголовок самого WireGuard. Есть еще один заголовок IP в инкапсулированном пакете и другой — в TCP на 20 байт. Так откуда появилась эта дополнительная пропускная способность?
С огромными фреймами и преимуществами GSO, о которых мы говорили выше, теоретический максимум при размере фрейма в 9000 байт будет равен 1014 Мбит/с. Обычно такая пропускная способность в реальности недостижима, потому что связана с большими трудностями. Таким образом, я могу только предположить, что тест был выполнен с использованием еще более жирных фреймов с превышением размера в 64 килобайта с теоретическим максимумом в 1023 Мбит/с, что поддерживается только некоторыми сетевыми адаптерами. Но это абсолютно неприменимо в реальных условиях, либо может использоваться только между двумя напрямую соединенными между собой станциями, исключительно в рамках тестового стенда.
Но так как VPN-туннель пробрасывается между двумя хостами с помощью интернет-соединения, которое вообще не поддерживает большие фреймы, достигнутый на стенде результат не может быть принят за эталон. Это просто нереальное лабораторное достижение, которое невозможно и неприменимо в реальных боевых условиях.
Даже сидя в дата-центре я не смог бы перебрасывать фреймы размером более 9000 байт.
Критерий применимости в реальной жизни абсолютно нарушен и, как я думаю, автор проведенного «измерения» серьезно дискредитировал сам себя по понятным причинам.
Последний проблеск надежды
На сайте WireGuard много говорится о контейнерах и становится понятно, для чего он на самом деле предназначен.
Простой и быстрый VPN, который не требует настройки и может быть развернут и настроен массивными инструментами оркестровки, как, например, у Amazon в их облаке. Конкретно Amazon использует новейшие аппаратные функции, о которых я упоминал ранее, например — AVX512. Делается это для того, чтобы ускорить работу и не привязываться к x86 или любой другой архитектуре.
Они оптимизируют пропускную способность и пакеты, размер которых превышает 9000 байт — это получатся огромные инкапсулированные фреймы для общения контейнеров между собой, или для операций резервного копирования, создания снапшотов или развертывая этих самых контейнеров. Даже динамические IP-адреса никак не повлияют на работу WireGuard в случае описанного мною сценария.
Неплохо сыграно. Блестящая реализация и очень тонкий, почти эталонный протокол.
Но он просто не подходит для мира за пределами полностью контролируемого вами дата-центра. Если же вы рискнете и начнете использовать WireGuard, вам придется идти на постоянные компромиссы при разработке и реализации протокола шифрования.
Вывод
Мне несложно сделать вывод о том, что WireGuard пока не готов.
Он задумывался как облегченное и быстрое решение ряда проблем у уже существующих решений. К сожалению, ради этих решений он пожертвовал многими функциями, которые будут актуальны для большинства пользователей. Именно поэтому он не может заменить IPsec или OpenVPN.
Для того, чтобы WireGuard стал конкурентным, ему нужно добавить хотя бы настройку IP-адреса и конфигурацию маршрутизации и DNS. Очевидно, что именно для этого нужны зашифрованные каналы.
Безопасность — мой главный приоритет, и сейчас у меня нет оснований полагать, что IKE или TLS как-то скомпрометированы или поломаны. Современное шифрование поддерживается в них обоих, и они были проверены десятилетиями эксплуатации. Если что-то новее не значит, что это что-то — лучше.
Функциональная совместимость крайне важна, когда вы связываетесь с третьими лицами, станции которых вы не контролируете. IPsec де-факто является стандартом и поддерживается практически повсеместно. И он работает. И как бы это не выглядело, в теории, WireGuard в будущем может быть несовместим даже с разными версиями самого себя.
Любая криптографическая защита рано или поздно взламывается и, соответственно, должна быть заменена или обновлена.
Отрицание всех этих фактов и слепое желание использовать WireGuard для подключения вашего iPhone к домашней рабочей станции — это просто мастер-класс по засовыванию головы в песок.
Стремясь предоставить потребителям простой способ использования виртуальной частной сети (VPN), WireGuard незаметно стал одним из самых популярных приложений VPN с момента его выпуска в середине 2019 года. А поскольку конфиденциальность с каждым днем становится все более серьезной проблемой, WireGuard предлагает всем, а не только технически подкованным, способ защитить себя.
Итак, давайте посмотрим, как вы можете настроить клиент WireGuard для Windows и установить VPN-соединение с виртуальным частным сервером WireGuard (VPS). Вам понадобится ваш компьютер на одном конце VPN и VPS на другом, чтобы правильно настроить WireGuard для Windows.
Прежде всего, вам нужно понять, что такое VPN . VPN – это безопасный туннель между двумя точками, который шифрует информацию при ее передаче в сети. Это уровень безопасности, который нужен каждому.
Установить WireGuard для Windows довольно просто. Мы шаг за шагом проведем вас через весь процесс.
Шаг 1. Загрузка и установка WireGuard
Вам просто нужно перейти на сайт WireGuard , нажать кнопку « Установка» в верхнем левом углу страницы и загрузить установщик клиента WireGuard для Windows.
Затем вам нужно будет открыть файл .exe и предоставить ему права администратора. Это выберет самую последнюю версию для вашего оборудования, загрузит и установит ее.
Если это не работает по какой-либо причине или вы просто предпочитаете загрузить файл .msi самостоятельно, вы можете нажать кнопку « Обзор MSI» прямо под кнопкой « Загрузить установщик Windows» и выбрать тот, который подходит для вашего оборудования. Запустив этот файл, вы установите WireGuard на свой компьютер.
Шаг 2: настройка Windows WireGuard
Теперь вам нужно настроить VPN-туннель. Вам нужно будет предоставить конечные точки (внутренний IP-адрес вашего ПК и внешний IP-адрес вашего VPS) для туннеля и обмена открытыми ключами.
Откройте клиент WireGuard и нажмите Добавить туннель > Добавить пустой туннель .
Клиент WireGuard для Windows автоматически создает открытый и закрытый ключи, отображая их на экране.
Назовите туннель, а затем напишите следующую конфигурацию, изменив IP-адреса и ключи соответственно:
[Interface]
PrivateKey = 6MfKZxmFlVcmwtTDH0djHSEy672449WZaXjwm/vzW08=
Address = 194.128.2.2/32
DNS = 192.168.2.1
[Peer]
PublicKey = dZek49BWgVCLJRMsG6k6QK5mzHFrfy4uhOLjPyTe5WE=
AllowedIPs = 0.0.0.0/0
Endpoint = 32.185.112.15:12345
- PrivateKey: закрытый ключ, предоставляемый вам клиентом WireGuard Windows.
- Адрес: Ваш внутренний IP-адрес.
- DNS: IP-адрес DNS-сервера.
- PublicKey: открытый ключ VPS.
- AllowedIPs: здесь вы указываете, какие IP-адреса будут маршрутизироваться через VPN. Конфигурация «0.0.0.0./0» улавливает весь трафик, направляя его через VPN.
- Конечная точка : внешний IP-адрес и порт прослушивания VPS. Порт должен соответствовать конфигурации сервера ListenPort.
Шаг 3: Настройка сервера WireGuard
На другом конце туннеля, который вы собираетесь создать, вам нужно добавить раздел [Peer] в файл конфигурации WireGuard:
[Peer]
PublicKey = DcYwu3H/pKdNbOMXZcpxHM4RApc/sEgXF1nY1tSmKyU=
AllowedIPs = 194.128.2.2/32
- PublicKey: открытый ключ, предоставляемый клиентом Windows WireGuard VPN.
- Разрешенные IP-адреса: указывает, какие IP-адреса могут проходить через этот туннель. Здесь вы вводите свой внутренний IP-адрес.
Шаг 4. Заблокируйте нетуннелированный трафик
Вы также можете поставить галочку напротив опции « Блокировать весь нетуннелированный трафик» . Включив эту опцию, клиент WireGuard Windows добавляет правила брандмауэра и блокирует весь трафик, который не проходит через туннель.
Однако вы можете включить эту опцию, только если в вашей конфигурации есть только один раздел [Peer] и для AllowedIPs установлено значение «0.0.0.0./0».
Шаг 5: активируйте WireGuard
К настоящему времени вы должны быть в состоянии активировать VPN. Просто нажмите кнопку « Активировать» , и через несколько секунд статус туннеля должен измениться на « Активный» .
Однако если что-то пойдет не так, и вы не можете активировать туннель, проверьте вкладку « Журнал » и убедитесь, что клиент WireGuard Windows и конфигурация сервера совпадают.
Шаг 6. Убедитесь, что VPN работает
Чтобы проверить, правильно ли работает ваш VPN, просто введите «какой у меня IP» в Google. IP-адрес вашего VPS должен отображаться в первом результате поиска как ваш общедоступный IP-адрес.
WireGuard: VPN, которым может пользоваться каждый
Настроить Windows-клиент WireGuard VPN очень просто. Это причина того, что WireGuard стал настолько популярным за последние несколько лет: он позволяет каждому самому установить VPN-соединение.
Если вы хотите добавить дополнительный уровень конфиденциальности к своему интернет-соединению, скачайте WireGuard для Windows. И не забудьте поставить галочку напротив опции « Блокировать весь нетуннелированный трафик» !
#1 2023-02-05 20:10:37
- Del.Mar
- Member
- Registered: 2023-01-01
- Posts: 5
[SOLVED] wg0 state UNKNOWN
Hi mates!
After activate wg0 interface the network doesn’t work.
# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip link set mtu 1420 up dev wg0
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
[root@beast me]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 04:92:26:59:24:34 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.29/24 brd 192.168.0.255 scope global dynamic noprefixroute enp4s0
valid_lft 23998sec preferred_lft 23998sec
inet6 fe80::e854:1b76:e142:e6f1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
Systemctl status show that service is active
# systemctl status wg-quick@wg0
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; preset: disabled)
Active: active (exited) since Sun 2023-02-05 23:04:43 MSK; 1s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 3575 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 3575 (code=exited, status=0/SUCCESS)
CPU: 29ms
Feb 05 23:04:43 beast systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Feb 05 23:04:43 beast wg-quick[3575]: [#] ip link add wg0 type wireguard
Feb 05 23:04:43 beast wg-quick[3575]: [#] wg setconf wg0 /dev/fd/63
Feb 05 23:04:43 beast wg-quick[3575]: [#] ip link set mtu 1420 up dev wg0
Feb 05 23:04:43 beast wg-quick[3575]: [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
Feb 05 23:04:43 beast wg-quick[3575]: [#] ip -4 rule add not fwmark 51820 table 51820
Feb 05 23:04:43 beast wg-quick[3575]: [#] ip -4 rule add table main suppress_prefixlength 0
Feb 05 23:04:43 beast wg-quick[3575]: [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
Feb 05 23:04:43 beast wg-quick[3610]: [#] iptables-restore -n
Feb 05 23:04:43 beast systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 04:92:26:59:24:34 brd ff:ff:ff:ff:ff:ff
7: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/none
Last edited by Del.Mar (2023-02-06 07:55:06)
#2 2023-02-05 20:49:04
- -thc
- Member
- Registered: 2017-03-15
- Posts: 389
Re: [SOLVED] wg0 state UNKNOWN
Executing «wg-quick» normally sets the address via
ip -4 address add 10.1.2.3/24 dev wg0
which in your case is missing.
Please post your obfuscated «wg0.conf» from «/etc/wireguard».
#3 2023-02-05 21:19:12
- Del.Mar
- Member
- Registered: 2023-01-01
- Posts: 5
Re: [SOLVED] wg0 state UNKNOWN
-thc wrote:
Please post your obfuscated «wg0.conf» from «/etc/wireguard».
Yes, I’ve add Address and DNS, but still status unknown.
# cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.1.4/32
PrivateKey = key
DNS = 1.1.1.1,8.8.8.8
[Peer]
PublicKey = key
PresharedKey = key
AllowedIPs = 0.0.0.0/0
Endpoint = ip:51820
PersistentKeepalive = 15
Ip address set correctly
8: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.1.4/32 scope global wg0
valid_lft forever preferred_lft forever
But problem with routes
[root@beast user]# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.1.4/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n
[root@beast user]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 enp4s0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp4s0
#4 2023-02-06 06:35:56
- -thc
- Member
- Registered: 2017-03-15
- Posts: 389
Re: [SOLVED] wg0 state UNKNOWN
Del.Mar wrote:
8: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
State «UNKNOWN» is normal.
Del.Mar wrote:
But problem with routes
Wireguard as a «full tunnel» VPN operates with a separate, numbered routing table (51820) and a packet marker (fwmark 51820) to route all packets through the wg0 tunnel except the tunnel packets themselves.
So — everything looks o.k. now.
#5 2023-02-06 07:54:20
- Del.Mar
- Member
- Registered: 2023-01-01
- Posts: 5
Re: [SOLVED] wg0 state UNKNOWN
-thc wrote:
So — everything looks o.k. now.
Yeah, today it’s works fine.
Thanks, mate!
I get the following error when running as a non-admin:
WireGuard is running, but the UI is only accessible from desktops of
the Builtin Administrators
How do I enable wireguard for win10 to work with just a regular user?
asked Oct 3, 2019 at 16:19
2
At present what you ask is not possible, on Windows.
Unlike other VPN tools and technologies, the Wireguard client creates a tunnel interface (showing up as a network adapter) for each connection you have configured when you try to connect, aka «on the fly». When you terminate the connection the client deletes the tunnel interface entirely. It does this outside the official VPN plumbing of Windows. That design has the severe limitation that you need to be an administrator of the machine so the software can create the interface.
I use Wireguard on Windows, Mac, and Linux. Windows is the only platform I have this issue with. Additionally, I only use the official client (version 0.38 at the time of this writing) from Wireguard. I do not know if there are others.
answered Feb 24, 2020 at 19:26
As previous solutions and comments have pointed out, activating a wireguard (WG) tunnel is not possible — the action requires privilege elevation of some kind.
The solutions mentioned so far have some downsides, at least in my use case. For completeness I’ll list all solutions mentioned and add mine.
-
Normal WG installation, switch to administrator user to activate Wireguard, then switch back.
- Pro: admin user has access to all features of WG GUI
- Con: it takes time & clicks to switch users
-
Normal WG installation, add
HKLM\Software\WireGuard\LimitedOperatorUI
registry key and add user toNetwork Configuration Operators
groupsee WG registry keys documentation
- Pro: WG GUI accessible
- Con: messing with registry, GUI functionality severely limited, messes with privilege elevation prompt
The last point needs clarification: when working as a regular unprivileged user, Windows asks for privilege elevation for many reasons, and one needs to type the/an admin password regularly. This is pretty straightforward, because an admin account is selected by default and one can enter the password quickly. Being part of the NCO group, however, makes the user a kind of admin in the eyes of the OS, so each elevation prompt will offer the current NCO user by default — now in order to enter the password of a real admin, it’s necessary to first select another user. This quickly becomes annoying after the first few times one need privilege elevation.
-
Enterprise WG install without launching admin GUI, starting / stopping WG tunnel from shortcut run as administrator
- Pro: no GUI, no WG background service, user really stays regular
- Con: no GUI
See Enterprise Usage documentation.
In brief:
- download WG MSI installer (instead of .exe)
- in admin command prompt, run
msiexec /i <installer filename>.msi DO_NOT_LAUNCH=1
- create Desktop shortcuts for WG:
- start with command
wireguard /installtunnelservice <path to conf>.conf
- stop with command `wireguard /uninstalltunnelservice
- tick
run as Administrator
for both shortcuts
- start with command
Tunnel status can be checked with wg.exe
answered Jul 6, 2021 at 17:07
1
Wireguard 3.1+ now supports non-admins running wireguard, but you’ll need to do some minor modifications:
https://lore.kernel.org/wireguard/[email protected]/T/#u
- Install wireguard 3.1+
- Add your user to the «Network Configuration Operators». Open up explorer as admin right click «My Computer» > «Manage» > «Users/Groups» > Network Configuration Operators
- Add an entry to the registry. Windows Key + R > regedit > create the key HKLM\SOFTWARE\WireGuard, then create a DWORD at HKLM\SOFTWARE\WireGuard\LimitedOperatorUI and set it to 1
- Logout and log back in.
- Run wireguard
answered Nov 26, 2020 at 10:50
Patoshi パトシPatoshi パトシ
2,8795 gold badges26 silver badges39 bronze badges
2
You can’t open the UI as a regular user. However, there is a way to enable Wireguard to work with a regular user in Windows 10, giving the user the ability to freely start and stop the Wireguard tunnel.
Since Wireguard runs as a service in Windows, you can change the permissions for that service, without having to give the user more privilege than it needs to have.
-
Configure the Wireguard tunnel on the machine using an admin account and the GUI then start the tunnel
-
Open a command prompt and change the permissions for the service
sc.exe sdset WireGuardTunnel$NameOfTheTunnel «D:AR(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;WD)(A;;CCLCSWLOCRRC;;;IU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)»
-
You can then start and stop the tunnel using those commands. Don’t use the GUI to start/stop at this point
sc stop WireGuardTunnel$NameOfTheTunnel
sc start WireGuardTunnel$NameOfTheTunnel
-
Create a batch file, one for each command, like WireguardON.bat and WiregaurdOFF.bat and put them somewhere the client could access (on its desktop or something)
-
Logout and log back in with the user account. It should be able to start and stop the service, even after a reboot.
answered Jun 23, 2022 at 18:03
1
If you add it to the Network Operators Group, the User will be able to change IP address, change adapter and modify network settings which might end up compromising on the network.
If there is any other possibility, please post.
answered Nov 14, 2021 at 11:16
2
I know this Thread is old, but if other’s looking for an answer.
Found this site via Google and searched for a solution. But in the end, I found my own solution.
- Install Wireguard as admin and import the conf.
- Create a new task via task scheduler
- In General -> security options execute independently of the user login and with highest privileges
- In Trigger, start task, choose on login
- in Actions, start program (path to wireguard.exe)
Dave M
13.1k25 gold badges36 silver badges48 bronze badges
answered Nov 4, 2022 at 11:33
All other solutions to this problem are not ideal. The methods I’ve seen are:
-
Just running as an admin
-
Adding the user account to the Network Configuration Operators
- Pros: Wireguard gui, works smoothly
- Cons: Your regular user gets added to an admin group and will appear in UAC prompts. This is very annoying and probably bad security.
-
Running the WireGuard tunnel as a windows service (as suggested in this answer)
- Pros: Works perfectly
- Cons: No gui, needs an elevated console.
-
Using Task Scheduler as in this answer (didn’t work for me at all).
Solution:
-
Install the latest MSI: https://download.wireguard.com/windows-client/
-
Then run this command in elevated console with your .conf file:
wireguard /installtunnelservice C:\path\to\some\myconfname.conf
This creates a service called
WireGuardTunnel$myconfname
, which can be controlled using standard Windows service management utilites, such as services.msc or sc.
— source
-
Control the service with «ServiceTray»: https://www.coretechnologies.com/products/ServiceTray/
(This give you a nice icon on the system tray that shows the up status of the WireGuard tunnel service. Green = connected, red = not connected, and you can start and stop it by right clicking. See image below)
Note: When creating the service controller, save the shortcut to desktop not startup (doesn’t seem to work and you can copy to startup later)
-
(optional) Change the service’s startup type to manual if you don’t want to be connected to the tunnel on startup.
An example of what this looks like on Win 10. Hovering the icon shows the name of the tunnel.
answered Apr 12 at 20:33
bn-lbn-l
1291 silver badge6 bronze badges
0
You must log in to answer this question.
Not the answer you’re looking for? Browse other questions tagged
.
Not the answer you’re looking for? Browse other questions tagged
.
WireGuard — это один из наиболее быстрых и безопасных протоколов VPN, который позволяет пользователям обеспечить конфиденциальность своей онлайн-активности. Однако, иногда пользователи могут столкнуться с проблемой, когда интернет пропадает при использовании WireGuard.
Существует несколько причин, почему WireGuard может привести к пропаданию интернета. Ниже мы рассмотрим некоторые из них и дадим советы, как решить эту проблему.
- Неправильные настройки конфигурации WireGuard.
Во многих случаях, проблема пропадания интернета при использовании WireGuard может быть вызвана неправильной настройкой конфигурации. Вам следует проверить, правильно ли настроен ваш конфигурационный файл WireGuard. Обратите внимание на настройки IP-адресов и маршрутизации.
- Несовместимость WireGuard с другими VPN-сервисами.
Если вы используете WireGuard в сочетании с другими VPN-сервисами, такими как OpenVPN или IPSec, это может привести к проблеме пропадания интернета. В таком случае, вы должны отключить другие VPN-сервисы, чтобы избежать конфликтов.
- Проблемы с маршрутизацией.
Если на вашем устройстве не настроена правильная маршрутизация, это может привести к проблеме пропадания интернета при использовании WireGuard. Вы можете проверить настройки маршрутизации и настроить их правильно.
- Проблемы с брандмауэром.
WireGuard использует UDP-порт для связи с сервером VPN. Если ваш брандмауэр заблокировал этот порт, это может привести к проблеме пропадания интернета. В этом случае, вы должны настроить свой брандмауэр, чтобы разрешить доступ к порту, используемому WireGuard.
В заключение, WireGuard — это отличный VPN-протокол, который обеспечивает быстрый и безопасный доступ в интернет. Однако, если у вас возникла проблема пропадания интернета при использовании WireGuard, вы можете заказать на нашем сайте готовый сконфигурированный сервер VPN.