Як відомо, WireGuard — це VPN, який дозволяє нам захищений тунель як особистої мережі, так і для серфінгу. Це дає нам безпечний і надійний доступ в Інтернет зі смартфона або персонального комп'ютера.
Як його встановити на чистий сервер, можна ознайомитися в цій статті.
В цьому керівництві ми розглянемо, як встановити WireGuard у Docker контейнері, використовуючи Docker Compose.
Але для початку, потрібно оновити пакети ОС.
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
Для цього проекту нам буде достатньо версії 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-server
Ви також можете використовувати свою домашню директорію /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=51820
- 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:
- 51820:51820/udp
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: always
Де:
container_name: назва Вашого контейнера;
TZ=: часовий пояс, можете змінити на потрібний, але для анонімності краще залишити Europe/Amsterdam;
SERVERPORT=: рандомний порт, на якому буде працювати Ваш VPN. Його також потрібно буде прописати в ports.
PEERS=: кількість користувачів. Їх можна буде збільшувати до потрібної кількості;
51820:51820/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=51820 \\ -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 51820:51820/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
Приємного серфінгу.