Установим и настроим 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
)
На этом настройка закончена. Подключение с введенным именем появится в списке. Начать пользоваться можно переключив переключатель в активное положение.
Убедиться, что все действительно работает, можно посетив сайт 2ip.ru, который любезно покажет нам ip адрес нашего сервера в той стране, где вы приобрели виртуальный сервер, вместо нашего настоящего ip адреса, выдаваемого интернет провайдером.
ПК (Desktop)
Конфиги подключения
Настройка клиента на любой платформе по сути сводится к тому, чтобы импортировать на клиент уже готовый файл конфигурации с сервера.
На сервере выведем содержимое монтируемой внутрь docker контейнера директории
~/wireguard/config
ls -la ~/wireguard/config
В этой директории наблюдаем файлы и директории жизнедеятельности контейнера.
Нас интересуют директории peer1
, peer2
, peerN
, где N
- номер пира,
как вы уже поняли.
Внутри каждой директории под каждого пира лежат заранее сгенерированные при старте контейнера файлы, а именно:
- приватный и публичный ключ (
privatekey-peer1
,publickey-peer1
) peer1.png
- изображение с qr кодом подключенияpeer1.conf
- целевой конфигурационный файл, который требуется на клиенте
ls -la ~/wireguard/config/peer1
GNU/Linux
Чтобы установить wireguard клиент
в свой linux дистрибутив, необходимо установить
пакет wireguard-tools
из репозиториев:
Установка клиента
Arch linux
sudo pacman -S wireguard-tools
Debian/Ubuntu
sudo apt install wireguard
Fedora
sudo dnf install wireguard-tools
Инструкции по другим дистрибутивам можно найти на странице установки на официальном сайте.
Конфиг
После установки нам необходимо на клиентской машине создать конфигурационный файл подключения
/etc/wireguard/wg0.conf
с содержимым файла ~/wireguard/config/peer1/peer1.conf
с сервера.
Для этого можно например вывести содержимое файла peer1.conf
в консоль
командой cat ~/wireguard/config/peer1/peer1.conf
, и скопипастить содержимое
в целевой файл на клиенте.
Но вместо этого можно скачать файл при помощи утилиты scp
с сервера прямо в целевой файл
следующей единственной командой:
sudo scp root@ip-адрес-сервера:~/wireguard/config/peer1/peer1.conf /etc/wireguard/wg0.conf
-
sudo
при запуске потребуется для того, чтобы записать содержимое в файл, находящийся вне домашней директории вашего пользователя ОС (/etc
). -
первым параметром после указания имени утилиты
scp
указывается строка подключения к серверу ssh. Затем двоеточие, после которого путь к скачиваемому файлу на сервере. -
Вторым параметром указывается путь к файлу, который будет создан на локальной машине.
Запуск
Все готово, осталось лишь запустить клиент следующей командой:
wg-quick up wg0
Проверим, что все работает:
curl ifconfig.me
195.255.255.255
Если в выводе ip адрес вашего сервера, то все получилось!
Остановка клиента
wg-quick down wg0
Windows, macOS
Под данные системы с официального сайта скачивается классический инсталляционный пакет, установка которого ничем не отличается от несложной установки любой программы (прожать кнопку далее несколько раз).
Добавление туннеля производится путем импортирования файла конфига туннеля через пользовательский интерфейс программы.
Удаление wireguard с сервера
Удаление с сервера настроенного решения можно произвести в несколько шагов:
Остановка контейнера
docker stop wireguard
Удаление контейнера
docker rm wireguard
Удаление образа
docker rmi lscr.io/linuxserver/wireguard
Удаление директории с конфигами
Удалим директорию ~/wireguard
с файлом docker-compose.yml
и монтируемой директорией ~/wireguard/config
,
в которой локализованы все файлы жизнедеятельности контейнера
rm -rf ~/wireguard
Заключение
Мы рассмотрели один из простых и быстрых способов поднять свой собственный
VPN сервер на основе замечательной технологии wireguard
, с помощью
docker
. Безусловно, одну и ту же задачу в linux можно решить множеством
способов. Изучайте linux, его экосистему. Его возможности безграничны.