Установим и настроим 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
)
На этом настройка закончена. Подключение с введенным именем появится в списке. Начать пользоваться можно переключив переключатель в активное положение.