Инструкция обновлена 14.10.2024
WireGuard — open-source-проект с открытым исходным кодом, который позволяет легко и удобно настраивать шифрованные туннели.
Коротко, чем мне нравится WireGuard:
Из минусов:
В сети много различных гайдов и инструкций по настройке и установке. Для ознакомления рекомендую следующее:
В этой инструкции я опишу простые способы начала использования WireGuard и интересные решения — побольше примеров и практики, поменьше воды и теории.
В панели идем в Облачные серверы > Добавить > Маркетплейс > Сеть > Wireguard GUI.
Выбираю Нидерланды, убираю бэкапы, нажимаю «Заказать сервер».
Необходимо минут 5 на создание виртуальной машины и установку ПО, затем придет сообщение на почту, что сервер готов к работе.
cloud
Перейду по адресу из письма и войду в интерфейс со своим паролем.
Web-интерфейс — минималистичный и интуитивно понятный.
Добавляю новых клиентов для подключения с Android и Windows PC.
Доступны два способа подключения к серверу с клиентского устройства:
На скриншоте выше видны кнопки для открытия QR-кода и скачивания конфигурационного файла.
Для запуска на смартфоне нужно скачать с GooglePlay официальный клиент Wireguard.
Далее нужно открыть приложение > отсканировать QR-код с web-интерфейса > нажать «Подключиться».
Проверяю IP-адрес на сайте 2ip.ru. Вижу IP-адрес сервера — значит, все работает.
Для подключения нужно:
В целом, это все, уже можно пользоваться. Весь процесс занял около 15 минут:
Еще есть много тонких настроек конфигурации, но на практике хватает способа, который показан выше с минимальными настройками и затратами. Как правило, WireGuard можно один раз поднять, настроить и забыть — работает стабильно.
Информации выше достаточно для того, чтобы легко начать пользоваться, а дальше я буду описывать дополнительные функции и интересные решения.
Для начала проверю скорость интернета с самого сервера. Для этого придется установить инструмент Speedtest CLI:
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get install speedtest
Скорость 194 Mbs — отлично.
Теперь проверим на Windows PC с подключением WireGuard:
172 Mbs — неплохо (ожидал на уровне 180, но вполне нормально).
В целом, решение c WebGUI и установка через маркетплейс Timeweb Cloud в одну кнопку очень упрощает процесс, но хочется больше контроля и удобства для обслуживания. Например, может требоваться установка на другом хостинге или на своем удаленном сервере, где нет маркетплейса.
Так как мне очень нравится Docker, буду использовать его для установки точно такого же WireGuard с веб-интерфейсом.
Начинаю с чистой чистой системы: Создать сервер > Ubuntu 24.04.
После создания и подключения к серверу нужно обновить пакеты и установить docker
и docker-compose
:
apt update && apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Следующим шагом нужно создать безопасный зашифрованный пароль для веб-интерфейса. Для этого скачаем образ wg-ease
:
docker pull ghcr.io/wg-easy/wg-easy
И запустим команду:
docker run -it ghcr.io/wg-easy/wg-easy wgpw YOUPASSWORD
Вместо YOURPASSWORD
подставьте свой пароль.
На выходе получаем свой пароль в зашифрованном виде, примерно такого формата:
$2a$12$BGXo0fIV4s0gVEaNQDggpeVz01MhlG8DzSLfs2tbvuKTSoaXoKi1G
Оригинальный пароль нужно запомнить и сохранить, обратно расшифровать вы его уже не сможете (но пароль можно поменять, настройки при этом сохраняются).
Создадим новый файл compose.yaml
:
nano compose.yaml
В редакторе вставляю следующую конфигурацию:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
environment:
LANG: ru
WG_HOST: '194.87.220.159' # Hostname or server white IP address
PASSWORD_HASH: $$2a$$12$$BGXo0fIV4s0gVEaNQDggpeVz01MhlG8DzSLfs2tbvuKTSoaXoKi1G
MAX_AGE: 15
volumes:
- ./wireguard:/etc/wireguard
ports:
- 51820:51820/udp
- 51821:51821/tcp
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
Важно:
WG_HOST
— внешний IP-адрес вашего сервера.PASSWORD_HASH
— зашифрованный пароль от веб-интерфейса WireGuard. Здесь нужно установить пароль созданный выше, без кавычек, но все знаки $
заменить на $$
(задвоить).Сохраняю изменения, после чего выполняю команду для запуска:
docker compose up -d
После запуска можно проверить и открыть в браузере по адресу http://IP-адрес:51821
, в моем случае: http://194.87.220.159:51821
.
В итоге получим тот же знакомый web-интерфейс.
Сам проект называется wg-easу
. В репозитории можно ознакомиться с более подробными настройками.
Дополнительно есть возможность в разделе environment
docker-compose файла, изменить некоторую конфигурацию:
PASSWORD_HASH
— зашифрованный пароль для WebGUI.WG_HOST
— hostname или IP-адрес.WG_DEVICE
— устройство Ethernet, через которое должен пересылаться трафик WireGuard. WG_PORT
— общедоступный UDP-порт сервера (51280).WG_MTU
— MTU, который будут использовать клиенты. Сервер использует WG MTU по умолчанию. WG_PERSISTENT_KEEPALIVE
— значение в секундах для проверки соединения. Если это значение равно 0, то соединения не будут поддерживаться в рабочем состоянии. WG_DEFAULT_ADDRESS
— диапазон адресов, которые будут выдаваться клиентам.WG_DEFAULT_DNS
— DNS-сервер.WG_ALLOWED_IPS
— разрешенные IP-адреса, которые будут использовать клиенты.MAX_AGE
— максимальное время сеансов веб-интерфейса в минутах. Значение по умолчанию (0) означает, что сеанс будет продолжаться до тех пор, пока браузер не будет закрыт.UI_TRAFFIC_STATS
— отображение активной статистики соединения по каждому клиенту. По умолчанию выключено, для включения необходимо установить значение true
.UI_CHART_TYPE
— вид отображения статистики от 1 до 3 (обычно 3 — самый простой удобный формат в виде бара).Данный способ установки позволяет удобнее управлять конфигурацией, перезапускать, переносить и править настройки. Также становится удобнее запускать на этом сервере другие сервисы, тоже в Docker, при необходимости.
Этот пункт редко встречается в инструкциях, но мне кажется будет полезным.
При подключении к WireGuard весь трафик пойдет через туннель и к локальным ресурсам напрямую обратиться не получится
В конфигурации WireGuard есть значение AllowedIPs
, где можно указать, какие адреса пойдут через WG. По умолчанию это 0.0.0.0.0/0
, т.е. весь трафик идет через туннель. Для доступа к локальным ресурсам приходится делать наоборот, и все адреса, за исключением нужных (серого списка IP-адресов), добавлять в AllowedIPs
.
Для этого в файле docker-compose.yml
можно добавить environment
-переменную и перезапустить контейнер.
environment:
WG_ALLOWED_IPS: '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'
А в WireGuard WebGUI из маркетплейса перезапустить контейнер с добавлением флага:
-e WG_ALLOWED_IPS='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'
Или на клиентском устройстве отредактировать конфигурационный файл подключения:
[Peer]
PublicKey = PublicKey
PresharedKey = PresharedKey
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
Endpoint = Endpoint
Разверните WireGuard в облаке Timeweb Cloud
На мой взгляд, WireGuard— один из простых и удобных в использовании сервисов для безопасного доступа в сеть и построения шифрованных каналов связи. Для разных задач я настраивал и использовал PPTP, SSTP, L2TP/IPsec и другие — у каждого есть свои плюсы и минусы. Для каждой задачи нужно подбирать наиболее подходящие инструменты. На данный момент Wireguard справляется со всем необходимыми для меня задачами и не доставляет проблем.
Проект активно развивается, все больше различных устройств поддерживают Wireguard, а некоторые команды разработчиков создают еще дополнительные UI для расширения конфигурации и более удобного управления через GUI (например, проект NetMaker).
Привет всей команде Timeweb! Подскажите, а есть ли возможность ограничить пропускную способность ключа WG? И как это сделать?
Добрый день!
В WireGuard нет встроенных средств для ограничения пропускной способности. Однако вы можете использовать системные утилиты, такие как
tc
, для настройки лимитов на уровне системы. Подробнее о работе сtc
можно прочитать в этой статье.Хочу установить панель управления в ручную, всё вроде проходит нормально, но на последнюю команду docker compose up -d, получаю следующее. Подскажите пожалуйста, в чём может быть проблема?
root@vm760974:~# docker compose up -d [+] Running 1/2 ✔ Network root_default Created 0.0s ⠋ Container wg-easy Starting 0.1s Error response from daemon: driver failed programming external connectivity on endpoint wg-easy (1128bea22adaf3243eff698ad572cabef57f0db37902874aa2749b5271aa249b): failed to bind port 0.0.0.0:51820/udp: Error starting userland proxy: listen udp4 0.0.0.0:51820: bind: address already in use
Всё разрулилось, при установке ОС, не нужно было предустанавливать WireGuard. Без предустановки, всё взлетело по инструкции.
Добрый день!
Судя по ошибке, порт 51820 был занят из-за предустановленного WireGuard GUI. Ваш подход с установкой на чистую ОС правильный, но проблему можно было решить и без переустановки системы.
Для этого достаточно проверить, какой контейнер использует порт:
и остановить его:
После этого контейнер запустился бы без ошибок.
Заказал как показано в гайде, но в итоге никакой ссылки на почту не пришло, только письмо о том, что сервер готов к работе. Что делать ?(
Добрый день!
Проверьте, пожалуйста, отображаются ли данные для авторизации на вкладке «Дашборд» сервера, как на последнем скриншоте в статье?
Если на вкладке «Дашборд» данные для подключения также не отображаются, создайте, пожалуйста, тикет в поддержку — коллеги помогут разобраться, из-за чего возникла проблема.
Добрый день. на команду "docker compose up -d" ругается, что compose не существует, при этом файл я создал и изменения в нем внес. Не подскажите, что может быть не так?
Добрый день, проверить синтаксис в наименовании файла
compose.yaml
, убедиться что в текущей директорииls -la
, можно указать путь до файла через аргументdocker compose -f /srv/compose.yaml up -d
Здравствуйте. Установил wg-easy вручную, при подключении через ПК пишет что нет интернета. Через Iphone тоже не грузит. Только если включить мобильный интернет, открыть YouTube, VPN запускается автоматом и включить следом WI-FI то трафик начинает проходить. Вроде бы можно сказать что провайдер виноват, но есть пару НО:
Не могу понять в чем проблема, почему один работает, а мой нет. В админке wg вижу что трафик еле капает, но медленно оооочень(за исключением танца с бубном, то там всё нормально), по идее всё настроено верно.
Да у меня такая же проблема, я даже попробовал поделиться с другом QR-кодом, он попробовал и сказал, что у него всё грузит, но вот пробовал я сам и писал в поддержку, и у них так же было, но списали на то, что это WG лагает/плохо работает в данный момент.
Ну вот мой не работает никак, даже у друга. Но его у меня работает...
Добрый день. Не получается зайти в веб wireguard. Захожу по паролю с почты, а на сайте пишут, что я не авторизован. Не знаете, что в таком случае делать?
Здравствуйте! Если проблема еще актуальна, напишите в поддержку из своей панели, пожалуйста. Поможем разобраться.
Здравствуйте а как изменить пароль уже установленного wiguard
Добрый день!
В интерфейсе WireGuard GUI не предусмотрена возможность изменения пароля через настройки. Для изменения пароля необходимо перезапустить контейнер. Выполните следующие шаги:
Подключитесь к серверу по SSH.
Остановите контейнер с WireGuard командой:
А как редактировать существующий сервер?
Основные конфигурации сервера через переменные окружения в compose.yaml раздел environment
Созданные клиенты хранятся в volumes создается директории wireguard рядом с compose.yaml
Развернул два стандартных сервера с Wireguard GUI, один в Казахстане, другой в Нидерландах. Из Европы соединяется и работает через оба, из РФ через казахский нормально, а с голландским соединяется, но трафик не идет вообще. Проверяли на двух разных девайсах и двух интернетах. Где может быть затык?
Добрый день! Это ограничение на работу протокола Wireguard со стороны интернет-провайдеров.
Здравсвтуйте! А блокировка со стороны провайдеров разве не должна была бы заблокировать траффик и через Нидерланды и через Казахстан? Судя по комменту выше - проблема только с Нидерландами.
✘ wireguard Error Get "https://registry-1.docker.io/v2/": net/http: request... 15.0s Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) Что это значит не могу настроить
Добрый день! Гугл подсказывает, что в отдельных случаях это решается сменой DNS-серверов. После попробуйте снова выполнить шаги по этой инструкции.
Здравствуйте. Как подключить WireGuard на роутер TP-Link Archer C86? В интерфейсе нету VPN, но в поиске по функциям упоминания vpn есть.
Добрый день! К сожалению, с роутером подсказать не сможем, попробуйте поискать варианты настройки в сети — или инструкцию к нужной модели роутера.
Все сделал по инструкции. При включении Wireguard на компьютере пропадает интернет.
Работа протокола Wireguard может быть ограничена вашим провайдером интернета (уточнить можно в их поддержке). Вместо готовой сборки Wireguard можно попробовать другие решения, например, настройку Outline на своем сервере.
Столкнулся с аналогичной проблемой. Если решили, то подскажите как
Сделал все по инструкции, все работает, спасибо. На Ютуб заходит. НО, ip определяется как русский, и для обхода региональных ограничений я так понимаю ваш сервис не годится? Или я что то делаю неверно?
Статья для демонстрации возможностей сервиса, а не для обхода ограничений. IP адрес будет использоваться в зависимости от локации виртуального сервера.
Возможно ли избавиться от рекламы на ютубе , с использованием Wireguard? В данный момент созданное vpn просто закидывает рекламой
Это стандартное поведение Youtube, варианты купить подписку с для отключения рекламы или использовать сторонние приложения которые позволяют пропускать рекламу
Возможно настроить Wireguard на телевизоре LG с системой WebOs
на WebOs не так просто все настроить, проще на стороне роутера это сделать
Скажите, можно ли накатить созданный в Wireguard GUI файл конфигурации на роутер (Keenetic) при наличии у последнего компонента Wireguard VPN для создания VPN-соединения с доступом в интернет?
Устройства Keenetic под рукой нет, но думаю можно т.к. конфигурационные файлы для подключения в стандартном формате создаются, можно скачать его и попробовать в Keenetic
Добавить подключение WireGuard -> Загрузить из файла
Да, есть такая возможность. Файл конфигурации закидывайте в менеджер создания VPN.
А есть ли возможность формировать конфигурационные файлы на стороне сервера? не через веб-интерфейс
Да, есть возможность внутри контейнера самостоятельно генерировать ключи создать конфигурационные файлы.
Если веб интерфейс не нужен, проще установить чистый wireguard сразу в ОС, если в контейнере нужно, то использовать
linuxserver/wireguard
Еще есть множества различных opensource проектов, где управление не только через веб, но и с использованием телеграм бота, десктопные приложения, api, консольные утилиты, производители маршрутизаторов(роутеров) тоже начали свои интерфейсы для управления добавлять.
Отличная статья!
Здравствуйте. Все сделал, как написано, и всё работает. Большое спасибо за статью! Что осталось непонятно, это как поменять пароль на WEB UI после установки сервера. Имеется в виду как менять его периодически?
Добрый день, спасибо
На данный момент актуальная версия проекта wg-easy: ghcr.io/wg-easy/wg-easy:13
Где вместо открытого пароля уже используется переменная
PASSWORD_HASH
и зашифрованный bcrypt пароль, пример формата:В своем репозитории авторы сделали инструкцию и скрипт для шифрования: https://github.com/wg-easy/wg-easy/blob/master/How_to_generate_an_bcrypt_hash.md
Остается только подставить его в compose файле или использовать файл
.env
При перезапуске контейнера, пароль web ui изменится
Данный способ усиливает безопасность и пароль уже не будет в явном виде хранится на сервере.
Ваш комментарий очень помог, ибо я не понял про генерацию хеша в начале и вбивал пароль в открытую...
Если заказать сервер с Wireguard-GUI, то там и будет эта версия, а не форк от WeeJeWel, инструкция для которого везде в интернет. Рекомендую оригинал а не форк!