Сегодня я хочу познакомиться с одной интерпретацией поднятия связки Web
—интерфейса и WireGuard
сервера в одном лице, посмотреть, как все это делается от и до, какие моменты и, как и что дабы применить в одном из своих проектов, а также адаптировать после с учетом ниже указанного к своему ранее развернутому ("Поднимем WireGuard VPN туннель на Ubuntu 20.04"
), но без Web
-интерфейса.
Шаг №1:
Устанавливаем Docker
в Ubuntu 22.04 Server
опираясь на заметку: "Как установить Docker на Ubuntu 22.04"
Шаг №2:
Устанавливаем Docker Compose
в Ubuntu 22.04 Server
опираясь на заметку: "Как развернуть Docker Compose в Ubuntu 22.04 Server"
Шаг №3:
Далее действую опиряюсь на шаги инсталляции https://github.com/wg-easy/wg-easy
ekzorchik@srv-home:~$ sudo docker run -d \ --name=wg-easy \ -e WG_HOST=172.33.33.102 \ -e PASSWORD=712mbddr@ \ -v ~/.wg-easy:/etc/wireguard \ -p 51820:51820/udp \ -p 51821:51821/tcp \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --sysctl="net.ipv4.ip_forward=1" \ --restart unless-stopped \ ghcr.io/wg-easy/wg-easy Unable to find image 'ghcr.io/wg-easy/wg-easy:latest' locally latest: Pulling from wg-easy/wg-easy 4abcf2066143: Pull complete e7ced292c644: Pull complete b32c0114bba5: Pull complete f3748d9674b0: Pull complete a2a524de099d: Pull complete 114bdfdcdd40: Pull complete 575154ec3698: Pull complete ab0bdf69dac2: Pull complete 268d6f1b88e2: Pull complete 4f4fb700ef54: Pull complete Digest: sha256:daa94b77901bdef3cb10151416c095e64cf66a6539fa8f748c09812b60b97f49 Status: Downloaded newer image for ghcr.io/wg-easy/wg-easy:latest 11a3f085a580a6a30f9f2013251dd1f6feb83351751c542cf8291631f08d73c0 ekzorchik@srv-home:~$
Шаг №4:
Можно подключиться к контейнеру через консоль дабы после развертывания посмотреть, что у него внутри, ну это так для ознакомления:
ekzorchik@srv-home:~$ docker run -it ghcr.io/wg-easy/wg-easy /bin/bash 5fe7dab06db2:/app# 856a8302e0f9:/app# tree . ├── config.js ├── lib │ ├── Server.js │ ├── ServerError.js │ ├── Util.js │ └── WireGuard.js ├── package-lock.json ├── package.json ├── server.js ├── services │ ├── Server.js │ └── WireGuard.js ├── tailwind.config.js └── www ├── css │ └── app.css ├── img │ ├── apple-touch-icon.png │ ├── favicon.png │ └── logo.png ├── index.html ├── js │ ├── api.js │ ├── app.js │ ├── i18n.js │ └── vendor │ ├── apexcharts.min.js │ ├── sha256.min.js │ ├── timeago.full.min.js │ ├── vue-apexcharts.min.js │ ├── vue-i18n.min.js │ └── vue.min.js ├── manifest.json └── src └── css └── app.css 9 directories, 27 files 856a8302e0f9:/app# 5fe7dab06db2:/app# exit exit ekzorchik@srv-home:~$
Шаг №5:
Серверная часть конфигурации WireGuard
сервера располагается:
ekzorchik@srv-home:~$ sudo apt-get install -y tree ekzorchik@srv-home:~$ tree ~/.wg-easy/ /home/ekzorchik/.wg-easy/ ├── wg0.conf └── wg0.json 0 directories, 2 files ekzorchik@srv-home:~$ ekzorchik@srv-home:~$ sudo bash -c "cat /home/ekzorchik/.wg-easy/wg0.conf" # Note: Do not edit this file directly. # Your changes will be overwritten! # Server [Interface] PrivateKey = gPr+C37dq3+jdCHHT5yF9gv5JOZssGRQapyqsxaD7HM= Address = 10.8.0.1/24 ListenPort = 51820 PreUp = PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; PreDown = PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT;
Шаг №6:
Переходим в браузере по адресу вашего сервера указав порт 51821.
Пример — http://SERVER_IP:51821
и авторизуемся с паролем, который указывали "-e PASSWORD"
, у меня это 712mbddr@
После авторизации вижу, что пока нет настроенных клиентов
Чтобы создать конфигурацию для нового клиента
нажимаю "+ New Client"
- New Client: client1
и нажимаю Create
, по итогу получаем
Скачиваем конфигурационный файл для клиента
Открываем текстовый редактором client1.conf
и видим содержимое
[Interface] PrivateKey = 6AzaSrST2ICmlNSTUq81f9SR8VdQmLabRh4qOl8CbHQ= Address = 10.8.0.2/24 DNS = 1.1.1.1 [Peer] PublicKey = htaY5e3OJm4JPGpnCBVWqcKhJvzjzVIpHwNTZUksQDc= PresharedKey = Adbwnuu7zHz9hl+YmmRXXbe0EF0DFjgO4WsJ+VRyL+w= AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 0 Endpoint = 172.33.33.102:51820
Шаг №7:
Посмотреть логи контейнера wg-easy:
ekzorchik@srv-home:~$ docker container ls --all | grep wg-easy 5fe7dab06db2 ghcr.io/wg-easy/wg-easy "docker-entrypoint.s…" 12 minutes ago Exited (0) 10 minutes ago loving_lalande ekzorchik@srv-home:~$ ekzorchik@srv-home:~$ docker container logs wg-easy
Шаг №8:
Если с учетом добавленного клиента WireGuard
посмотреть конфигурационный файл wg0.conf
, то его (клиента) данные добавляется после создания конфигурационного файла для клиента:
ekzorchik@srv-home:~$ sudo bash -c "cat /home/ekzorchik/.wg-easy/wg0.conf" # Note: Do not edit this file directly. # Your changes will be overwritten! # Server [Interface] PrivateKey = gPr+C37dq3+jdCHHT5yF9gv5JOZssGRQapyqsxaD7HM= Address = 10.8.0.1/24 ListenPort = 51820 PreUp = PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; PreDown = PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; # Client: client1 (b28ed0bf-e7f0-4bc6-a1d7-0550daa8d5c4) [Peer] PublicKey = gmSbBSAOt0yFLSXK4S4IQ0us+BKbl4zrVkds4Uda/xk= PresharedKey = Adbwnuu7zHz9hl+YmmRXXbe0EF0DFjgO4WsJ+VRyL+w= AllowedIPs = 10.8.0.2/32 ekzorchik@srv-home:~$
Шаг №9:
В системе Ubuntu 22.04 Server WireGuard
сервис не как сервис развернут, а развернут как контейнер в докере:
ekzorchik@srv-home:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE ghcr.io/wg-easy/wg-easy latest ffa9223d7784 3 weeks ago 147MB ekzorchik@srv-home:~$
Останавливаем Docker
сервис WireGuard
завершает работу:
ekzorchik@srv-home:~$ sudo systemctl stop docker Warning: Stopping docker.service, but it can still be activated by: docker.socket ekzorchik@srv-home:~$
Запускаем Docker
сервис WireGuard
начинает работать:
ekzorchik@srv-home:~$ sudo systemctl start docker ekzorchik@srv-home:~$ sudo netstat -tulpn | grep docker tcp 0 0 0.0.0.0:51821 0.0.0.0:* LISTEN 6428/docker-proxy tcp6 0 0 :::51821 :::* LISTEN 6434/docker-proxy udp 0 0 0.0.0.0:51820 0.0.0.0:* 6448/docker-proxy udp6 0 0 :::51820 :::* 6454/docker-proxy ekzorchik@srv-home:~$
Шаг №10:
Хочу еще обратить внимание что конфигурационный файл это ~/.wg-easy
, так что в него вносим изменения, а после перезапускаем docker
Шаг №11:
C учетом справки можно заранее предопределить параметры, с которыми поднимать WireGuard
—сервер в Docker(е):
Шаг №12:
Удаляем текущую установку wg-easy
с системы Ubuntu 22.04 Server:
sudo nano uninstallwg.sh #!/bin/bash docker stop wg-easy rm -rf /home/ekzorchik/.wg-easy/ #remove containter id wg-easy docker container rm -f $(docker container ls -al | grep wg-easy | awk '{print $1}') #remove images id wg-easy docker rmi $(docker images | grep wg-easy | awk '{print $3}') ekzorchik@srv-home:~$ sudo chmod +x uninstallwg.sh ekzorchik@srv-home:~$ sudo ./uninstallwg.sh
Шаг №13:
Предварительно удаляю текущую установку wg-easy
, а затем хочу посмотреть, как делается, что сеть WireGuard
не 10.8.0.1/24
, а 10.10.10.1/24
, т.е. новое развертывание, как править уже настроенное пока не разобрал:
ekzorchik@srv-home:~$ docker run -d \ --name=wg-easy \ -e WG_HOST=172.33.33.102 \ -e WG_DEFAULT_ADDRESS=10.10.10.2 \ -e WG_DEFAULT_DNS=8.8.8.8 \ -e PASSWORD=712mbddr@ \ -v ~/.wg-easy:/etc/wireguard \ -p 51820:51820/udp \ -p 51800:51821/tcp \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --sysctl="net.ipv4.ip_forward=1" \ --restart unless-stopped \ ghcr.io/wg-easy/wg-easy Unable to find image 'ghcr.io/wg-easy/wg-easy:latest' locally latest: Pulling from wg-easy/wg-easy 4abcf2066143: Pull complete e7ced292c644: Pull complete b32c0114bba5: Pull complete f3748d9674b0: Pull complete a2a524de099d: Pull complete 114bdfdcdd40: Pull complete 575154ec3698: Pull complete ab0bdf69dac2: Pull complete 268d6f1b88e2: Pull complete 4f4fb700ef54: Pull complete Digest: sha256:daa94b77901bdef3cb10151416c095e64cf66a6539fa8f748c09812b60b97f49 Status: Downloaded newer image for ghcr.io/wg-easy/wg-easy:latest 10ed2a1853bc61be33f37bfac35845fcbd1cc132a9f08920aeaaf21e789d0a76 ekzorchik@srv-home:~$
после чего доступ в Web
-интерфейс идет как, http://IP&DNS:51800 - Pass:712mbddr@
и при создании первого клиента ему присваивает IP
адрес 10.10.10.2
и т.д, а вот у сервера 10.10.10.1:
ekzorchik@srv-home:~$ sudo bash -c "cat /home/ekzorchik/.wg-easy/wg0.conf" # Note: Do not edit this file directly. # Your changes will be overwritten! # Server [Interface] PrivateKey = OC03oZ9Y+dnRCQ8X3v0VTXieyT1QZvqdgUKdiF2ZaV0= Address = 10.10.10.1/24 ListenPort = 51820 PreUp = PostUp = iptables -t nat -A POSTROUTING -s 10.10.10.2/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; PreDown = PostDown = iptables -t nat -D POSTROUTING -s 10.10.10.2/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; # Client: 1 (e645c1ee-dca3-4d2a-b30e-6573e2f3a805) [Peer] PublicKey = 5K9t03+PQw2Jxef1if0htegCl84AuinEz2oGD6YcNHk= PresharedKey = vhqrsOcUMEkyJEbhsCvRDC+aSH+YpQECad4WkrytVx4= AllowedIPs = 10.10.10.2/32
Но как по мне, мне проще взять свою заметку: "Поднимем WireGuard VPN туннель на Ubuntu 20.04"
с учетом своих нюансов, а именно:
- Замена iptables на firewalld
- Замена 10.8.0.0/24 на любую другую
- и не удалять все при изменении развертывания
docker
файла при новых настройках либо же все свое адаптировать под вот эту заметку тогда да имеет место быть данная заметка.
Шаг №14:
При использовании функционала данной заметке есть как по мне неоспоримое преимущество — это отображение в Web
-интерфейсе статуса подключения клиента, т.е. кто подключен, количество переданных и отравленных пакетов.
Итого: Я разобрал для себя, как поднимается WireGuard
сервер и к нему Web
-интерфейс в Docker(е)
дабы обезопасить основную систему и управлять лишь свойствами контейнера и передаваемыми для него параметрами с учетом документации от проекта wg-easy.
На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik
, будет что-то еще в процессе использования, то все это также отразится в последующих заметках.