Найти в Дзене
На балконе

Установка Wireguard + wg-gen-web + WG-API на Ubuntu 20.04

Инструкция предназначена для тех кто не знает "как пропатчить KDE2 под FreeBSD" При установке у меня была проблема с отслеживанием изменений в папке с конфигами и перезапуском интерфейса wireguard. Проблема заключалась в этой команде: ExecStart=/usr/bin/systemctl reload wg-quick@wg0.service. Reload заменил на Restart. Так же, в оригинальной инструкции не написано про необходимость настройки FW для разрешения порта API для получения статистики из контейнера WG-API. 1. При необходимости меняем имя сервера: 2. Устанавливаем статический ip. Отступы в конфиге важны. Не забываем поменять имя интерфейса и звездочки заменить на значения из своей подсети: network: ethernets: enp0s3: <- Сюда пишем имя интерфейса addresses: - 192.168.*.*/24 gateway4: 192.168.*.* nameservers: addresses: [192.168.*.*] optional: true version: 2 3. Установить Docker. Можно при первичной установке Ubuntu или после: 4. Установить и wireguard и настроит
Оглавление

Инструкция предназначена для тех кто не знает "как пропатчить KDE2 под FreeBSD"

При установке у меня была проблема с отслеживанием изменений в папке с конфигами и перезапуском интерфейса wireguard. Проблема заключалась в этой команде: ExecStart=/usr/bin/systemctl reload wg-quick@wg0.service. Reload заменил на Restart. Так же, в оригинальной инструкции не написано про необходимость настройки FW для разрешения порта API для получения статистики из контейнера WG-API.

1. При необходимости меняем имя сервера:

  • sudo hostnamectl set-hostname <новое_имя>
  • sudo nano /etc/hosts

2. Устанавливаем статический ip. Отступы в конфиге важны. Не забываем поменять имя интерфейса и звездочки заменить на значения из своей подсети:

  • sudo nano /etc/netplan/*.yaml
network:
ethernets:
enp0s3: <- Сюда пишем имя интерфейса
addresses:
- 192.168.*.*/24
gateway4: 192.168.*.*
nameservers:
addresses: [192.168.*.*]
optional: true
version: 2
  • sudo netplan try

3. Установить Docker. Можно при первичной установке Ubuntu или после:

  • sudo apt-get update
  • sudo apt-get install ca-certificates curl gnupg lsb-release -y
  • curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  • echo \
  • "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • sudo apt-get update
  • sudo apt-get install docker-ce docker-ce-cli containerd.io -y

4. Установить и wireguard и настроить FW. Wireguard настраивать не нужно. Конфиги будут созданы после настройки wg-gen-web:

  • sudo apt install wireguard
  • sudo nano /etc/sysctl.conf
  • net.ipv4.ip_forward=1
  • net.ipv6.conf.all.forwarding=1
  • ip route list default
Output
default via 203.0.113.1 dev "ЗДЕСЬ БУДЕТ НАПИСАНО НАЗВАНИЕ СЕТЕВОГО ИНТЕРФЕЙСА" proto static
  • sudo ufw allow 51820/udp
  • sudo ufw allow 8182/tcp
  • sudo ufw allow OpenSSH

5. Запустить контейнер c wg-gen-web на порту 8080. Tmp из оригинальной инструкции заменил на etc. Если установка wg-gen-web будет происходить на уже настроенный WIreguard, то необходимо сохранить конфиги, так как при запуске wg-gen-web они будут затерты новыми конфигами. Второй командой запускаем докер для отслеживания статистики подключений. Для доступа из wg-gen-web во второй докер с API в прошлом шаге мы разрешали траффик на порте 8182:

  • sudo docker run --restart=always -it -d -v /etc/wireguard:/data -p 8080:8080 -e "WG_CONF_DIR=/data" -e "WG_INTERFACE_NAME=wg0.conf" -e "WG_STATS_API=http://172.17.0.1:8182" vx3r/wg-gen-web:latest
  • sudo docker run --restart=always -it -d --name=wg-json-api -d --network host --cap-add NET_ADMIN james/wg-api:latest wg-api --device=wg0 --listen=172.17.0.1:8182

6. Создать службу для отслеживания изменений в папке с конфигом:

6.1 Создать юнит для просмотра папки с конфигом. Этот wg-gen-web.path активирует юнит-файл с тем же именем если конфиг будет изменен :

  • sudo nano /etc/systemd/system/wg-gen-web.path
# /etc/systemd/system/wg-gen-web.path
[Unit]
Description=Watch /etc/wireguard for changes
[Path]
PathModified=/etc/wireguard
[Install]
WantedBy=multi-user.target

6.2 Создать юнит wg-gen-web.service. Он перезапустит wireguard если конфиг будет изменен. В оригинальной статье на github в команде указан reload, но он не работает и был заменен на restart: Предполагаю, что из-за команды restart будут отваливаться активные соединения, но аналогичного решения пока я не нашел.

  • sudo nano /etc/systemd/system/wg-gen-web.service
# /etc/systemd/system/wg-gen-web.service
[Unit]
Description=Reload WireGuard
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service
[Install]
WantedBy=multi-user.target

7. Запустим созданную службу:

  • sudo systemctl enable wg-gen-web.path
  • sudo systemctl start wg-gen-web.path
  • sudo systemctl status wg-gen-web.path

8. Заменим стандартные настройки FW в конфиге wg-gen-web. Необходимо так же заменить имя интерфейса на имя из шага 2:

  • sudo nano /etc/wireguard/server.json
"preUp": "ufw route allow in on wg0 out on <ЗДЕСЬ НАПИСАТЬ НАЗВАНИЕ СЕТЕВОГО ИНТЕРФЕЙСА>",
"postUp": "iptables -t nat -I POSTROUTING -o <ЗДЕСЬ НАПИСАТЬ НАЗВАНИЕ СЕТЕВОГО ИНТЕРФЕЙСА> -j MASQUERADE",
"preDown": "ufw route delete allow in on wg0 out on <ЗДЕСЬ НАПИСАТЬ НАЗВАНИЕ СЕТЕВОГО ИНТЕРФЕЙСА>",
"postDown": "iptables -t nat -D POSTROUTING -o <ЗДЕСЬ НАПИСАТЬ НАЗВАНИЕ СЕТЕВОГО ИНТЕРФЕЙСА> -j MASQUERADE",

9. Теперь можно зайти в wg-gen-web, изменить настройки DNS, внешнего ip и внешний порт и затем можно создать конфигурации для пользователей и проверить работу сбора статистики подключений.

Ресурсы на базе которых писал эту инструкцию:

Инструкция по настройке авторизации будет добавлена позже. Так как настроить авторизацию через сервисы oauth2 без открытия доступа к UI из интернета, чего делать я не хочу, на данный момент мне не удалось.