Задача: В облаке провайдера DigitalOcean, на Linux Debian поднять VPN-сервер, который будет работать на основе протокола wireguard. Время на развертывание сервиса не должно превышать 20-ти минут. После настройки сервера сразу сгенерировать 100 конфигов для подключения клиентов.
На момент написания статьи версии:
Linux Debian: 11 (bullseye)
Docker: 20.10.21
Docker-compose: 2.12.2
Wireguard: 1.0.20210914
Кстати, если вы решите завести сервер на DigitalOcean, используйте реферальную ссылку: https://m.do.co/c/6a70cf3a7a23, которая при регистрации даст вам $200 на счет. Это позволит вам пару месяцев пользоваться сервисом абсолютно бесплатно!
Итак начнем. Регистрируемся на digitalocean.com, в профиле добавляем платежную карту. Далее создаем проект и в нем «капельку» (Get started with a Droplet). Выбираем регион, в котором хотите, чтобы у вас был сервер. Я, например, выбрал Франкфурт, так как уже проверенный вариант. В разделе Choose an image выбираем OS — Debian, Version 11 x64. Для нужд VPN сервера нам достаточно самых минимальных ресурсов. Поэтому берем Droplet Type — Basic, тариф с Regular CPU, 512 MB / 1 CPU, 10 GB SSD Disk, 500 GB transfer. Стоимость тарифа на момент написания статьи была $4 в месяц.
Ниже выбираем способ авторизации. По простому — выбираем Password. Нужно будет просто вводить логин и пароль при подключении по SSH. Вводим сложный пароль в текстовое поле и запоминаем его, так как никакого письма на почту с инфой о регистрации не придет.
Еще ниже, в разделе Finalize Details можно отредактировать Hostname. Сделать, например, «wireguard-server».
И жамкаем внизу Create Droplet.
Ждем несколько секунд сборку нашей новенькой виртуалки и вуаля! Все готово для настройки сервера. Погнали?
Подключаемся к серверу по ssh. Логин root, пароль тот, который указали при создании дроплета.
Выполняем:
apt update
apt upgrade -y
В процессе обновления пакетов установщик спросил по поводу замены конфига для openssh-server. Можно выбрать «keep the local version…».
Устанавливаем Docker Engine, containerd, and Docker Compose:
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -
chmod +x docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
systemctl enable docker.service
systemctl enable containerd.service
Устанавливаем Wireguard в Docker:
Добавим директорию, в которой будет жить wireguard:
mkdir /opt/wireguard-server
Создаем файл конфигурации для docker-compose:
touch /opt/wireguard-server/docker-compose.yml
Открываем его для редактирования:
nano /opt/wireguard-server/docker-compose.yml
В него вставляем:
version: "2.1" services: wireguard: image: linuxserver/wireguard container_name: wireguard cap_add: - NET_ADMIN - SYS_MODULE environment: - PUID=0 - PGID=0 - TZ=Europe/Berlin - SERVERURL=auto #optional - SERVERPORT=51820 #optional - PEERS=100 #optional - PEERDNS=auto #optional - INTERNAL_SUBNET=10.13.13.0 #optional volumes: - /opt/wireguard-server/config:/config - /lib/modules:/lib/modules ports: - 51820:51820/udp sysctls: - net.ipv4.conf.all.src_valid_mark=1 restart: always
Сохраняем и выходим из редактора (F2, Y и подтверждаем имя).
Переходим в каталог и запускаем установку:
cd /opt/wireguard-server/
docker-compose up -d
Сервер готов!
Чтобы подключиться к такому VPN-серверу нужно установить на смартфон приложение Wireguard, и открыв его добавить подключение нажатием на синий кружок с плюсиком. В качестве варианта добавления выбрать сканирование QR-кода. Данные коды находятся на сервере в каталогах /opt/wireguard-server/config/peer*, где * — это номер клиента. В каждом таком каталоге есть картинка в формате PNG. Все эти картинки можно скачать с сервера при помощи приложения для Windows — WinSCP. Либо можно QR-код отобразить прям в консоли при помощи утилиты qrencode.
Давайте ее на всякий пожарный тоже установим:
apt install qrencode -y
И теперь если нам, например, нужно сгенерировать в консоли QR-код первого пира, то вводим:
qrencode -t ansiutf8 < /opt/wireguard-server/config/peer1/peer1.conf
Если Wireguard нужен не на смартфоне, а на Windows, то тоже ставим данное приложение с официального сайта, но в качестве конфига для подключения берем уже файлик peer*.conf, который также находится в каталоге /opt/wireguard-server/config/peer*.