ВОЙТИ
Как известно, WireGuard — это VPN, который позволяет нам защищенный туннель как личной сети, так и для серфинга. Это дает нам безопасный и надежный доступ в Интернет со смартфона или персонального компьютера.

Как его установить на чистый сервер, может ознакомиться в этой статье.

В этом руководстве мы рассмотрим, как установить WireGuard в Docker контейнере, используя Docker Compose.


Установим Docker. 
Но для начала, нужно обновить пакеты ОС. 

apt update

Установим необходимые пакеты, и добавим новый репозиторий:

apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"


Обновим пакеты с новым репозиторием:

apt update

Теперь установим сам Docker.

apt-get install docker-ce docker-ce-cli containerd.io

Проверим версию:

docker --version

Проверим статус:

systemctl status docker


Если он не запустился, то запускаем:

systemctl start docker

И добавляем в автозапуск.

systemctl enable docker


Установим Docker-Compose

Для данного проекта нам будет достаточно версии 1.25. 

curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Устанавливаем права на запуск. 

chmod +x /usr/local/bin/docker-compose

Проверяем как установился Docker-Compose:

docker-compose --version


Добавляем пользователя Linux в группу docker:

usermod -aG docker $USER


Создадим файл *.yaml для Docker-Compose.

Что бы ориентироваться в будущем в том что у нас установлено, создадим отдельную папку для данного проекта в каталоге /opt и перейдем в него.

mkdir /opt/wireguard-server && cd /opt/wireguard-serve

Вы так же можете использовать свою домашнюю директорию /home для размещения этого и других проектов. 

Воспользуемся репозиторием linuxserver для создания файла docker-compose.yaml по ссылке https://hub.docker.com/r/linuxserver/wireguard

Создаем файл docker-compose.yaml или docker-compose.yml,

vim docker-compose.yaml

И добавляем в него следующий код:

version: "2.1"
services:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=0
      - PGID=0
      - TZ=Europe/Amsterdam
      - SERVERURL=auto
      - SERVERPORT=32334
      - PEERS=1
      - PEERDNS=1.1.1.1
      - INTERNAL_SUBNET=10.10.10.0
      - ALLOWEDIPS=0.0.0.0/0
      - LOG_CONFS=true
    volumes:
      -  /opt/wireguard-server/config:/config
      - /lib/modules:/lib/modules
    ports:
      - 32334:32334/udp
      - 51280:51280/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: always

Где:

container_name: название Вашего контейнера;
TZ=: часовой пояс, можете изменить на нужный, но для анонимности лучше оставить Europe/Amsterdam;
SERVERPORT=: рандомный порт на котором будет работать Ваш VPN. Его также нужно будет прописать в ports.
PEERS=: количество пользователей. Их можно будет увеличивать до нужного количества;
32334:32334/udp 51280:51280/udp - пробрасываемые порты.

Запускаем наш скрипт (для этого нужно находиться в директории где создан наш файл. В данном случае это /opt/wireguard-server/):

docker-compose up -d 

Дожидаемся скачивания образов, и развертывания.

Проверяем:

docker-compose ps

или 

docker ps


Так же это можно сделать одной командой в docker:

docker run -d \\
  --name=wireguard \\
  --cap-add=NET_ADMIN \\
  --cap-add=SYS_MODULE \\
  -e PUID=0 \\
  -e PGID=0 \\
  -e TZ=Europe/Amsterdam \\
  -e SERVERURL=auto \\
  -e SERVERPORT=32334 \\
  -e PEERS=1 \\
  -e PEERDNS=1.1.1.1 \\
  -e INTERNAL_SUBNET=10.10.10.0 \\
  -e ALLOWEDIPS=0.0.0.0/0 \\
  -e LOG_CONFS=true \\
  -p 32334:32334/udp \\
  -p 51280:51280/udp \\
  -v /opt/wireguard-server/config:/config \\
  -v /lib/modules:/lib/modules \\
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \\
  --restart always \\
  lscr.io/linuxserver/wireguard:latest


Что бы сгенерировать QR код для смартфона:

docker exec -it wireguard /app/show-peer 1

Где:

1 - это первый конфиг/пользователь.

Результат:


Все конфигурационные файлы и QR коды, размещены в /opt/wireguard-server/config/peer*


Как создать дополнительных пользователей.

Для этого просто нужно изменить директиву PEERS в файле docker-compose.yaml, добавить нужное количество пользователей.

Для того что бы изменения применились, пересоздаем наш контейнер:

docker-compose up -d --force-recreate

Так же для анонимности, отключаем ping на хостовом сервере:

echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf

И применяем изменения:

sysctl -p

Приятного серфинга.