Wireguard с веб-интерфейсом

Давно нужен был дашборд для быстрого управления клиентами. Когда их у тебя уже 10 шт, то постоянно заходить через консоль и что-то править становится жутко неудобным. Решил написать подсказку для себя, как быстро запустить веб-интерфейс для Wireguard.

Оглавление

Покупаем сервер
Устанавливаем Wireguard
Ошибки в ходе установки
Устанавливаем веб-интерфейс WGDashboard
Общие впечатления

Покупаем сервер #

Для начала обновил хостера для сервера, так как Аеза в месяц падает по несколько раз и в самый не нужный момент ты оказываешься без доступа к важным ресурсам. Сервера Аезы после 8 августа 2023 не работают через мобильного провайдера.

Поэтому взял на тест LLHOST, про который писали на Хабре в комментариях. По деньгам получается ≈260₽ за минимальную версию (1 vCPU, 1 RAM, 25GB SSD) в Нидерландах. За неделю ничего не упало и не отвалилось, можно оплатить русской картой и ip во всех сервисах, что я использовал, был Нидерланды. На 23 августа это стабильный еще рабочий сервер на любых операторах связи.

Еще ранее у меня полгода был Fornex — отличный и стабильный, но дорогой (сейчас тарифы от 500₽) и в комментариях все к той же статье понравился вариант Just Hosting за 70₽, но ширина канала всего 10Mbit.

Если вы решили использовать LLHOST, то я рекомендую накатить чистый образ системы. Изначально по тарифу для VPN Wireguard работает из коробки. При этом настройки по умолчанию несовместимы, например, с использованием в роутерах Кинетик, когда нужные ресурсы будут доступны при подключении к Wi-Fi. Сам процесс настройки:

Устанавливаем Wireguard #


# Заходим на сервер под доступами:
ssh root@<ip адрес сервера>

# Обновляем систему и устанавливаем Wireguard:
apt update && apt upgrade -y
apt install -y wireguard

# Генерируем ключи сервера:
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

# Ставим права для приватного ключа:
chmod 600 /etc/wireguard/privatekey

# Создаем конфигурацию сервера:
vim /etc/wireguard/wg0.conf


# Вставляем в файл. По умолчанию интерфейс eth0:
[Interface]
PrivateKey = <privatekey>
Address = 10.0.0.1/24
ListenPort = 51830
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE


# Настраиваем IP форвардинг:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p

# Включаем systemd демон с Wireguard:
systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service
systemctl status wg-quick@wg0.service

Wireguard Active Exited in Ubuntu 22.04
Если все установилось корректно, то будет зеленый индикатор со статусом Active.

Ошибки в ходе установки #

Ошибка Решение Команда
/usr/bin/ wg -quick: line 295: iptables: command not found Установить Iptables sudo apt-get install iptables
Трафик отсутствует Установить UFW; Добавить порт в разрешенные sudo apt install ufw; sudo ufw allow 51830/udp
Не установлен Git Установить Git sudo apt install git
Интерфейс отличается eth0 Проверить название интерфейса ip route list default
Открытый порт Wireguard
Команда показывает список правил ufw.

Устанавливаем веб-интерфейс WGDashboard #

# Скачиваем и устанавливаем из репозитория
git clone -b v3.0.6 https://github.com/donaldzou/WGDashboard.git wgdashboard

# Открываем папку
cd wgdashboard/src

# Устанавливаем WGDashboard
sudo chmod u+x wgd.sh
sudo ./wgd.sh install

# Меняем права для папки с конфигом
sudo chmod -R 755 /etc/wireguard

# Запускаем WGDashboard
./wgd.sh start

# В случае ошибки последовательно три команды
apt -y install python3-pip
pip install -r requirements.txt
./wgd.sh start

# Открываем веб-интерфейс на порту 10086. Используйте юзернейм admin и пароль admin
http://<ip адрес сервера>:10086
Графический интерфейс WGDashboard
В случае успеха откроется веб-интерфейс WGDashboard. В примере у автора два действующих клиента

Общие впечатления #

— Генерация QR-кода для клиентов на iOS и Android;
— Скачивание конфига в виде файла для роутеров Keenetic и поддержкой OpenWRT;
— Мониторинг статистики клиентов;
— Низкие требования к ресурсам сервера;
— Из коробки не работает автостарт, нужно настраивать отдельно.

Полезные ссылки

Документация WGDashboard.
Видео с настройкой WGDashboard.
Видео по установке Wireguard.
Инструкция «выборочный обход на iOS»

Send
Share
Pin
10 comments
Айфоновод Маковедов 1 y

Привет, все это сложно, рекомендую – https://github.com/WeeJeWel/wg-easy

Миша Тугушев 1 y

Спасибо за дополнение. WF-Easy классный, но мне не зашел. После установки у меня так толком не получилось поменять стандартные настройки, например порт и диапазон ip-адресов 🤷‍♂️

Alex Shvartser 11 mo

Привет!
А если уже стоит WG, можно к нему прикрутит вебморду ?

Миша Тугушев 11 mo

Привет, да. Начни с абзаца Устанавливаем WGDashboard. Он предполагает, что если WG работает, то никаких проблем не будет. Но готовый WG от хостера у меня не заработал с WGDashboard.

Alex Shvartser 11 mo

Ну я сам настраивал по какой-то из шпаргалок на хабре)
Нужно сначала бекап VPS сделать)
А еще вопрос можно?)
А нету случаем такого дополнения в браузеру(Мозилла или Хром),
Что бы только на браузере на компе юзать VPN?
А то на работе когда включаешь, отваливается вся местная сеть от компа)

Миша Тугушев 11 mo

Не знаю 🤷‍♂️

Владислав Палько 9 mo

Как войти какой логин и пароль?

Миша Тугушев 9 mo

логин:admin, пароль: admin

Алексей Белый 8 mo

Подскажите, это под какой линукс мануал?

Миша Тугушев 8 mo

Тестировалось на Ubuntu 20.04 и 22.04

Алексей Белый 8 mo

Sep 03 19:18:39 vsepodryad systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Sep 03 19:18:39 vsepodryad wg-quick[53892]: [#] ip link add wg0 type wireguard
Sep 03 19:18:39 vsepodryad wg-quick[53892]: [#] wg setconf wg0 /dev/fd/63
Sep 03 19:18:39 vsepodryad wg-quick[53913]: Key is not the correct length or format: `<privatekey>’
Sep 03 19:18:39 vsepodryad wg-quick[53913]: Configuration parsing error
Sep 03 19:18:40 vsepodryad wg-quick[53892]: [#] ip link delete dev wg0
Sep 03 19:18:40 vsepodryad systemd[1]: wg-quick@wg0.service: Main process exited, code=exited, status=1/FAILURE
Sep 03 19:18:40 vsepodryad systemd[1]: wg-quick@wg0.service: Failed with result ‘exit-code’.
Sep 03 19:18:40 vsepodryad systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.

Андрей Анатольевич 7 mo

Спасибо большое, Бро!

Поднял WG скриптом из GitHub, а морду поднял заклинаниями из твоей статьи! Завелось с полтычка.

Миша Тугушев 7 mo

Пожалуйста!

Никита Бардин 7 mo

admin/admin и получаю ошибку 500

Никита Бардин 7 mo

ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File “/usr/local/lib/python3.8/dist-packages/flask/app.py”, line 1455, in wsgi_app
response = self.full_dispatch_request()
File “/usr/local/lib/python3.8/dist-packages/flask/app.py”, line 869, in full_dispatch_request
rv = self.handle_user_exception(e)
File “/usr/local/lib/python3.8/dist-packages/flask/app.py”, line 867, in full_dispatch_request
rv = self.dispatch_request()
File “/usr/local/lib/python3.8/dist-packages/flask/app.py”, line 852, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File “/root/wgdashboard/src/dashboard.py”, line 734, in index
return render_template(‘index.html’, conf=get_conf_list(), msg=msg)
File “/root/wgdashboard/src/dashboard.py”, line 502, in get_conf_list
temp = {“conf”: i, “status”: get_conf_status(i), “public_key”: get_conf_pub_key(i)}
File “/root/wgdashboard/src/dashboard.py”, line 417, in get_conf_pub_key
conf.read(WG_CONF_PATH + “/” + config_name + “.conf”)
File “/usr/lib/python3.8/configparser.py”, line 697, in read
self._read(fp, filename)
File “/usr/lib/python3.8/configparser.py”, line 1017, in _read
for lineno, line in enumerate(fp, start=1):
File “/usr/lib/python3.8/codecs.py”, line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xd0 in position 3481: invalid continuation byte

Timur Bautdinov 3 mo

Спасибо за мануал.

Как сделать так, чтобы гуй запускался автоматом после перезагрузки сервера?

Миша Тугушев 3 mo

Пожалуйста. Настроить по мануалу от разработчиков https://github.com/donaldzou/WGDashboard?tab=readme-ov-file#autostart-wgdashboard-on-boot--v22