ВОЙТИ
    Как известно, 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
    

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