Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Как начать работу с WireGuard: подробная инструкция

Артур Акмалов
Артур Акмалов
Инженер по разработке
30 ноября 2023 г.
40002
8 минут чтения
Средний рейтинг статьи: 3.6

WireGuard — open-source-проект с открытым исходным кодом, который позволяет легко и удобно настраивать шифрованные туннели.

Коротко, чем мне нравится WireGuard:

  • Скорость работы (минимальная задержка, максимальная пропускная способность)
  • Удобство установки и настройки

Из минусов:

  • Требуется установка дополнительного ПО на клиентских устройствах (не слишком серьезный минус, так как поддерживаются все платформы, а многие современные маршрутизаторы уже имеют поддержку Wireguard из коробки).

В сети много различных гайдов и инструкций по настройке и установке. Для ознакомления рекомендую следующее:

В этой инструкции я опишу простые способы начала использования WireGuard и интересные решения — побольше примеров и практики, поменьше воды и теории.

Установка сервера через маркетплейс Timeweb Cloud

В панели идем в Облачные серверы > Добавить > Маркетплейс > Сеть > Wireguard GUI.

Выбираю Нидерланды, убираю бэкапы, нажимаю «Заказать сервер».

Abc4523e 4ff7 4d41 9e96 C0f9767aba6a

Необходимо минут 5 на создание виртуальной машины и установку ПО, затем придет сообщение на почту, что сервер готов к работе.

Настройка и подключение 

Перейду по адресу из письма и войду в интерфейс со своим паролем. 

Image4

Web-интерфейс — минималистичный и интуитивно понятный.

Добавляю новых клиентов для подключения с Android и Windows PC.

Image1

Доступны два способа подключения к серверу с клиентского устройства:

  1. QR-код — удобно с мобильного устройства.
  2. Config-файл — для ПК проще загрузить файл конфигурации.

На скриншоте выше видны кнопки для открытия QR-кода и скачивания конфигурационного файла.

Android

Для запуска на смартфоне нужно скачать с GooglePlay официальный клиент Wireguard.

Image9

Далее нужно открыть приложение > отсканировать QR-код с web-интерфейса > нажать «Подключиться».

Проверяю IP-адрес на сайте 2ip.ru. Вижу IP-адрес сервера — значит, все работает.

Image7

Windows 

Для подключения нужно:

  • Скачать клиент для Windows можно с официального сайта.
  • В веб-интерфейсе скачать конфигурационный файл.
  • Запустить клиент > Добавить туннель > Выбрать файл -> Нажать «Подключить».

Image8

В целом, это все, уже можно пользоваться. Весь процесс занял около 15 минут:

  • создание сервера,
  • скачивание клиентов,
  • подключение с Android- и Windows-клиентов.

Еще есть много тонких настроек конфигурации, но на практике хватает способа, который показан выше с минимальными настройками и затратами. Как правило, WireGuard можно один раз поднять, настроить и забыть — работает стабильно. 

Информации выше достаточно для того, чтобы легко начать пользоваться, а дальше я буду описывать дополнительные функции и интересные решения.

Проверка скорости

Для начала проверю скорость интернета с самого сервера. Для этого придется установить инструмент Speedtest CLI:

curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get install speedtest

Image6

Скорость 194 Mbs — отлично.

Теперь проверим на Windows PC с подключением WireGuard:

Image3

172 Mbs — неплохо (ожидал на уровне 180, но вполне нормально).

Установка сервера через docker-compose

В целом, решение c WebGUI и установка через маркетплейс Timeweb Cloud в одну кнопку очень упрощает процесс, но хочется больше контроля и удобства для обслуживания. Например, может требоваться установка на другом хостинге или на своем удаленном сервере, где нет маркетплейса.

Так как мне очень нравится Docker, буду использовать его для установки точно такого же WireGuard с веб-интерфейсом.

Начинаю с чистой чистой системы:  Создать сервер > Ubuntu 22.04

После создания и подключения к серверу нужно обновить пакеты и установить docker и docker-compose:

apt update && apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Создаю новый файл docker-compose.yml:

nano docker-compose.yml

В редакторе вставляю следующую конфигурацию:

version: '3.8'
services:
  wireguard:
    image: weejewel/wg-easy:7
    environment:
      WG_HOST: '188.225.31.8'       # Hostname or IP address
      PASSWORD: 'MegaSuperPass@42'  # web-gui password
    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: always

В поле WG_HOST пропишите IP-адрес вашего сервера, в поле PASSWORD — пароль от веб-интерфейса WireGuard.

Сохраняю изменения, после чего выполняю команду для запуска:

docker compose up -d

После запуска можно проверить и открыть в браузере по адресу http://IP-адрес:51821, в моем случае: http://188.225.31.8:51821.

В итоге получим тот же знакомый web-интерфейс.

Сам проект называется wg-easу. В репозитории можно ознакомиться с дополнительными настройками.

Дополнительно есть возможность в разделе environment docker-compose файла, изменить некоторую конфигурацию:

  •  PASSWORD — пароль для 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-адреса, которые будут использовать клиенты.

Данный способ установки позволяет чуть удобнее управлять конфигурацией, перезапускать, переносить и править настройки. Также становится удобнее запускать на этом сервере другие сервисы, тоже в 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—  один из простых и удобных в использовании сервисов для безопасного доступа в сеть и построения шифрованных каналов связи. Для разных задач я настраивал и использовал PPTP, SSTP, L2TP/IPsec и другие — у каждого есть свои плюсы и минусы. Для каждой задачи нужно подбирать наиболее подходящие инструменты. На данный момент Wireguard справляется со всем необходимыми для меня задачами и не доставляет проблем. 

Проект активно развивается, все больше различных устройств поддерживают Wireguard, а некоторые команды разработчиков создают еще дополнительные UI для расширения конфигурации и более удобного управления через GUI (например, проект NetMaker). 

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
30 ноября 2023 г.
40002
8 минут чтения
Средний рейтинг статьи: 3.6
Комментарии 29
Сергей
28.09.2024, 11:17

Здравствуйте а как изменить пароль уже установленного wiguard

Timeweb Cloud
Timeweb Cloud
30.09.2024, 17:04

Добрый день!

В интерфейсе WireGuard GUI не предусмотрена возможность изменения пароля через настройки. Для изменения пароля необходимо перезапустить контейнер. Выполните следующие шаги:

  1. Подключитесь к серверу по SSH.

  2. Остановите контейнер с WireGuard командой:

docker stop wg-easy
  1. Удалите контейнер (существующие конфиги не пропадут):
docker rm wg-easy
  1. Запустите контейнер заново, указав новый пароль и IP вашего сервера:
docker run -d \
    --name=wg-easy \
    -e WG_HOST=IP_СЕРВЕРА \
    -e PASSWORD=НОВЫЙ_ПАРОЛЬ \
    -v /root/.wg-easy:/etc/wireguard \
    -p 51820:51820/udp \
    -p 51821:51821/tcp \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_MODULE \
    --sysctl=net.ipv4.conf.all.src_valid_mark=1 \
    --sysctl=net.ipv4.ip_forward=1 \
    --restart unless-stopped \
    weejewel/wg-easy
Алена
15.09.2024, 18:06

А как редактировать существующий сервер?

Артур
Артур
16.09.2024, 16:59

Основные конфигурации сервера через переменные окружения в compose.yaml раздел environment

Созданные клиенты хранятся в volumes создается директории wireguard рядом с compose.yaml

Diligent
29.08.2024, 18:17

Развернул два стандартных сервера с Wireguard GUI, один в Казахстане, другой в Нидерландах. Из Европы соединяется и работает через оба, из РФ через казахский нормально, а с голландским соединяется, но трафик не идет вообще. Проверяли на двух разных девайсах и двух интернетах. Где может быть затык?

Timeweb Cloud
Timeweb Cloud
30.08.2024, 13:10

Добрый день! Это ограничение на работу протокола Wireguard со стороны интернет-провайдеров.

Александр
29.09.2024, 20:57

Здравсвтуйте! А блокировка со стороны провайдеров разве не должна была бы заблокировать траффик и через Нидерланды и через Казахстан? Судя по комменту выше - проблема только с Нидерландами.

NEXT
25.08.2024, 13:15

✘ 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) Что это значит не могу настроить

Timeweb Cloud
Timeweb Cloud
29.08.2024, 14:16

Добрый день! Гугл подсказывает, что в отдельных случаях это решается сменой DNS-серверов. После попробуйте снова выполнить шаги по этой инструкции.

Герасименко
23.08.2024, 10:02

Здравствуйте. Как подключить WireGuard на роутер TP-Link Archer C86? В интерфейсе нету VPN, но в поиске по функциям упоминания vpn есть.

Timeweb Cloud
Timeweb Cloud
29.08.2024, 14:00

Добрый день! К сожалению, с роутером подсказать не сможем, попробуйте поискать варианты настройки в сети — или инструкцию к нужной модели роутера.

Денис
23.08.2024, 07:35

Все сделал по инструкции. При включении Wireguard на компьютере пропадает интернет.

Timeweb Cloud
Timeweb Cloud
23.08.2024, 12:25

Работа протокола Wireguard может быть ограничена вашим провайдером интернета (уточнить можно в их поддержке). Вместо готовой сборки Wireguard можно попробовать другие решения, например, настройку Outline на своем сервере.

Андрей
02.10.2024, 23:23

Столкнулся с аналогичной проблемой. Если решили, то подскажите как

Константинович
17.08.2024, 00:56

Сделал все по инструкции, все работает, спасибо. На Ютуб заходит. НО, ip определяется как русский, и для обхода региональных ограничений я так понимаю ваш сервис не годится? Или я что то делаю неверно?

Артур
Артур
18.08.2024, 13:36

Статья для демонстрации возможностей сервиса, а не для обхода ограничений. IP адрес будет использоваться в зависимости от локации виртуального сервера.

Максим
14.08.2024, 18:55

Возможно ли избавиться от рекламы на ютубе , с использованием Wireguard? В данный момент созданное vpn просто закидывает рекламой

Артур
Артур
18.08.2024, 13:32

Это стандартное поведение Youtube, варианты купить подписку с для отключения рекламы или использовать сторонние приложения которые позволяют пропускать рекламу

Петров
12.08.2024, 19:41

Возможно настроить Wireguard на телевизоре LG с системой WebOs

Артур
Артур
18.08.2024, 13:29

на WebOs не так просто все настроить, проще на стороне роутера это сделать

Виктор
06.08.2024, 16:42

Скажите, можно ли накатить созданный в Wireguard GUI файл конфигурации на роутер (Keenetic) при наличии у последнего компонента Wireguard VPN для создания VPN-соединения с доступом в интернет?

Артур
Артур
06.08.2024, 17:23

Устройства Keenetic под рукой нет, но думаю можно т.к. конфигурационные файлы для подключения в стандартном формате создаются, можно скачать его и попробовать в Keenetic Добавить подключение WireGuard -> Загрузить из файла

Владислав
14.08.2024, 14:41

Да, есть такая возможность. Файл конфигурации закидывайте в менеджер создания VPN.

Селимов
05.08.2024, 10:28

А есть ли возможность формировать конфигурационные файлы на стороне сервера? не через веб-интерфейс

Артур
Артур
06.08.2024, 02:55

Да, есть возможность внутри контейнера самостоятельно генерировать ключи создать конфигурационные файлы.

Если веб интерфейс не нужен, проще установить чистый wireguard сразу в ОС, если в контейнере нужно, то использовать linuxserver/wireguard

Еще есть множества различных opensource проектов, где управление не только через веб, но и с использованием телеграм бота, десктопные приложения, api, консольные утилиты, производители маршрутизаторов(роутеров) тоже начали свои интерфейсы для управления добавлять.

E2E
28.07.2024, 14:39

Отличная статья!

iblacula
iblacula
30.06.2024, 13:41

Здравствуйте. Все сделал, как написано, и всё работает. Большое спасибо за статью! Что осталось непонятно, это как поменять пароль на WEB UI после установки сервера. Имеется в виду как менять его периодически?

Akmalov Artur
Akmalov Artur
05.07.2024, 17:48

Добрый день, спасибо

На данный момент актуальная версия проекта wg-easy: ghcr.io/wg-easy/wg-easy:13

Где вместо открытого пароля уже используется переменная PASSWORD_HASH и зашифрованный bcrypt пароль, пример формата:

$$2b$$12$$NRiL4Kw4dKid.ix2WvZltOmaQBZjoX30shjHJXRVdEGshAxYWXXMe

В своем репозитории авторы сделали инструкцию и скрипт для шифрования: https://github.com/wg-easy/wg-easy/blob/master/How_to_generate_an_bcrypt_hash.md

Остается только подставить его в compose файле или использовать файл .env

При перезапуске контейнера, пароль web ui  изменится

Данный способ усиливает безопасность и пароль уже не будет в явном виде хранится на сервере.

Михаил
10.09.2024, 07:10

Ваш комментарий очень помог, ибо я не понял про генерацию хеша в начале и вбивал пароль в открытую...

Если заказать сервер с Wireguard-GUI, то там и будет эта версия, а не форк от WeeJeWel, инструкция для которого везде в интернет. Рекомендую оригинал а не форк!