Установим и настроим Wireguard VPN на собственном vps сервере легко и просто с помощью docker, а также настроим подключение с ПК и смартфона.
UPD: Ввиду возросшего спроса на VPN я написал статью с упрощенной инструкцией для менее опытных пользователей, позволяющую с минимумом телодвижений сделать то же самое.
Почему Wireguard и Docker
Wireguard современный, кроссплатформенный, безопасный, высокопроизводительный и простой в настройке сетевой туннель, который был принят в основную ветку linux с версии 5.6. На текущий момент это самый быстрый и привлекательный свободный VPN. Раньше я использовал OpenVPN, и в целом нареканий к нему нет. Но он проигрывает в скорости. Может быть он конечно более гибкий и поддерживает больше вариантов шифрования. Оба инструмента хороши, и подходят хорошо под свой пласт задач. В моем случае, для домашнего VPN, скорость соединения является решающим фактором. Приятным бонусом также является моментальная скорость подключения, в отличие от OpenVPN, где подключение обычно занимает как минимум несколько секунд.
Docker конечно же использовать не обязательно. Но в нашем случае это упрощает процесс установки, т.к. мы будем использовать уже готовый образ linuxserver/docker-wireguard, развертывание которого еще проще и быстрее, чем ручная настройка.
На клиентах же я все - таки предпочитаю использовать нативные решения, хоть данный образ также можно использовать и как клиент в том числе.
Если вы не знаете что такое docker, как он работает и почему он не является виртуальной машиной, то советую самостоятельно ознакомиться с темой. Данная статья не освещает базовую теорию docker. Но при пошаговом выполнении инструкций данные знания не потребуются.
Критерии выбора VPS сервера
Для начала нам потребуется приобрести или получить бесплатно виртуальный сервер на год, через который будет идти трафик.
Требования:
- Размещение за пределами РФ
- 1 cpu
- не менее чем 512 Mb RAM
- ширина канала 100 - 1000 Mbit/sec
- виртуализация KVM
- Linux дистрибутив на борту
Я решил, что приобрету себе отдельный сервер только под VPN, чтобы отдельная машина занималась одной задачей, не распыляясь, и делала это хорошо. Поэтому одного ядра и небольшой запас оперативной памяти в 512 Mb будет достаточно. Размещение в Германии мне подходит, т.к. я нахожусь в Европейской части России (чем дальше страна тем больше пинг), а также свободы в интернете там приемлемые. Ширину канала нужно выбирать исходя из скорости, которую предоставляет Ваш интернет провайдер (100/1000 Mbit/sec). Виртуализацию лучше взять KVM, что гарантирует изолированность среды и гарантию ресурсов.
OpenVz не стоит брать еще по той причине, что там используется общее ядро хостовой машины на все инстансы. К тому же ядро зачастую не очень не свежее, из-за чего могут быть проблемы с установкой docker.
Арендовать недорогой и надежный VPS для VPN в Европе, Азии, или в США можно тут.
Настройка сервера
Не столь важно какой linux дистрибутив будет установлен на сервере, первично на него нам необходимо установить только Docker. Мой выбор пал на Ubuntu 20.04. Я буду производить все действия из под пользователя root.
Подключение по ssh
Подключимся к серверу по ssh используя реквизиты, предоставленные выбранным хостинг провайдером.
Если вдруг вы работаете из под операционной системы Windows, то подключиться к серверу Вам может помочь утилита Putty.
ssh root@ip-адрес-сервера
Обновление системы
Сначала необходимо обновить кеш репозиториев и систему.
apt update && apt upgrade -y
Установка Docker
После чего установим docker. Можно последовать инструкциям по установке из документации, которые в случае с ubuntu говорят установить в систему репозиторий докера. Но в стандартных репозиториях ubuntu также можно найти не самую свежую, но подходящую версию. Ее и установим
apt install docker.io
и docker-compose
apt install docker-compose
Подготовка конфигов
Директория конфигов
Создадим, например в домашнем каталоге, директорию ~/wireguard, где будем хранить конфигурационные файлы, и сразу внутри нее директорию ~/wireguard/config, которую будем монтировать внутрь контейнера
mkdir -p ~/wireguard/config
docker-compose.yml
Далее создадим файл ~/wireguard/docker-compose.yml, в который скопируем содержимое из документации используемого docker образа
vim ~/wireguard/docker-compose.yml
В скопированном содержимом внесем некоторые изменения:
-
Переменной окружения
SERVERURLвместо текущегоwireguard.domain.comнужно присвоить значениеauto, илиip адреса вашего виртуального сервера. -
Переменной окружения
PEERSнужно присвоить достаточное количество клиентов, которыми вы планируете пользоваться VPN. К примеру, если мы планируем подключаться с ноутбука, 2-х смартфонов и роутера (4 устройства), то установимPEERS=4 -
Монтируемый каталог
/path/to/appdata/configиз секцииvolumeнеобходимо заменить на ранее созданную директорию~/wireguard/config
Итоговый файл будет выглядеть так:
---
version: "2.1"
services:
wireguard:
image: lscr.io/linuxserver/wireguard
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- SERVERURL=auto #optional
- SERVERPORT=51820 #optional
- PEERS=4 #optional
- PEERDNS=auto #optional
- INTERNAL_SUBNET=10.13.13.0 #optional
- ALLOWEDIPS=0.0.0.0/0 #optional
volumes:
- ~/wireguard/config:/config
- /lib/modules:/lib/modules
ports:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
На этом подготовка конфигурации окончена.
Запуск
Создадим и запустим контейнер
cd ~/wireguard
docker-compose up -d
Дождемся пока скачается образ и запустится контейнер, после проверим, что он запущен командой docker ps. При успехе должны увидеть в выводе что - то вроде
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97d91a1ffa87 linuxserver/wireguard "/init" 5 minutes ago Up 2 minutes 0.0.0.0:51820->51820/udp wireguard
Если все так, то на этом настройка сервера закончена, и можно уже начать настройку клиентов.
Настройка смартфонов
Проще всего наверное проверить подключение со смартфона. Ведь для этого понадобится лишь поставить клиент в один клик из магазина приложений
и отсканировать qr код.
Чтобы вывести на экран qr код добавления туннеля, на сервере исполняем команду:
docker exec -it wireguard /app/show-peer 1
Где 1 - порядковый номер PEERS, количество которых мы ранее задали в docker-compose.yml.

Рекомендуется каждый клиент подключать под отдельным peer.
Далее в мобильном приложении необходимо:
- нажать кнопку добавления нового туннеля
- выбрать пункт “сканировать qr код”
- навести на заранее выведенный на экран qr код
- придумать произвольное имя для подключения (например
peer2)
На этом настройка закончена. Подключение с введенным именем появится в списке. Начать пользоваться можно переключив переключатель в активное положение.
