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
Ошибки в ходе установки #
Ошибка | Решение | Команда |
/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 |
Устанавливаем веб-интерфейс 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
Общие впечатления #
— Генерация QR-кода для клиентов на iOS и Android;
— Скачивание конфига в виде файла для роутеров Keenetic и поддержкой OpenWRT;
— Мониторинг статистики клиентов;
— Низкие требования к ресурсам сервера;
— Из коробки не работает автостарт, нужно настраивать отдельно.
Полезные ссылки
Документация WGDashboard.
Видео с настройкой WGDashboard.
Видео по установке Wireguard.
Инструкция «выборочный обход на iOS»
Привет, все это сложно, рекомендую – https://github.com/WeeJeWel/wg-easy
Спасибо за дополнение. WF-Easy классный, но мне не зашел. После установки у меня так толком не получилось поменять стандартные настройки, например порт и диапазон ip-адресов 🤷♂️
Привет!
А если уже стоит WG, можно к нему прикрутит вебморду ?
Привет, да. Начни с абзаца Устанавливаем WGDashboard. Он предполагает, что если WG работает, то никаких проблем не будет. Но готовый WG от хостера у меня не заработал с WGDashboard.
Ну я сам настраивал по какой-то из шпаргалок на хабре)
Нужно сначала бекап VPS сделать)
А еще вопрос можно?)
А нету случаем такого дополнения в браузеру(Мозилла или Хром),
Что бы только на браузере на компе юзать VPN?
А то на работе когда включаешь, отваливается вся местная сеть от компа)
Не знаю 🤷♂️
Как войти какой логин и пароль?
логин:admin, пароль: admin
Подскажите, это под какой линукс мануал?
Тестировалось на Ubuntu 20.04 и 22.04
Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2023-09-03 19:18:40 CEST; 16s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 53892 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=1/FAILURE)
Main PID: 53892 (code=exited, status=1/FAILURE)
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.
Спасибо большое, Бро!
Поднял WG скриптом из GitHub, а морду поднял заклинаниями из твоей статьи! Завелось с полтычка.
Пожалуйста!
admin/admin и получаю ошибку 500
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
Спасибо за мануал.
Как сделать так, чтобы гуй запускался автоматом после перезагрузки сервера?
Пожалуйста. Настроить по мануалу от разработчиков https://github.com/donaldzou/WGDashboard?tab=readme-ov-file#autostart-wgdashboard-on-boot--v22
Подскажите плиз, кто разбирается.
Суть такая установил WireGuard Easy, создал первые две учетки, установил их на 2 разных устройства и всё работает без проблем. Спустя примерно полгода. потребовалось подкинуть ещё учеток для других устройств, с легкостью создал их в панели WireGuard Easy, но при попытке подключить новые устройства, получаю ошибку
в клиентском приложении на винде: Unable to resolve one or more DNS hostname endpoints: No such host is known.
в клиентском приложении на маке: Ошибка при разрешении DNS. Один или несколько IP-адресов серверов не могу быть разрешены
При этом на первых/старых устройствах все продолжает работать, но если попытаться даже те, рабочие учетки использовать на новых устройствах, все равно получаю данные ошибки.
Без файла конфигурации к сожалению ничего не сказать. Можете выложить без ключей и тогда будет понятно. Посоветовал бы посмотреть логи подключения на этих машинах. Посмотрите на это решение https://superuser.com/questions/1788561/no-dns-on-server-after-bringing-up-wireguard-server.
Мне в целом не нравится WireGuard Easy из-за запуска в докере более, чем трех хостов. Всегда начинаются какие-то проблемы.
День добрый. Сделал все как описано в статье на локальной машине – все заработало. Потом попытался повторить на VDS сервере с Ubuntu 20.04 – не получилось – не устанавливался Wireguard. Установил в итоге с помощью скрипта официального, правда на некоторых шагах приходилось действовать из-под rootа. Теперь WG запускает скрипт по добавлению нового пира только под rootом. WGDashboard встал нормально по мануалу из статьи. Можно зайти и увидеть все созданные скриптом ./wireguard-install.sh пиры. Но создать новый не получается. При попытке создать новый пир CPU и RAM забивается на 100%, в логах сообщение: Out of memory: Killed process 104850 (gunicorn) total-vm:661232kB, anon-rss:459268kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1196kB oom_score_adj:0. В общем, подскажите пожалуйста, куда рыть чтоб все заработало. Права на wireguard И wgdashboard дал основному пользователю, но не помогло....
Добрый день!
Большое спастио за мануал! Получилось всё практически с первого раза (пришлось проделать дополнительный шаг с установкой пайтон и т.п.)
Подскажите.
Видел выше, что можно добавить дэшборд для уже установленного WG.
И, подскажите, как можно удалить данный пакет?
Народ, всем привет!
А как ограничить скорость конкретному клиенту?
А ларчик просто открывался (с)
tc qdisc add dev ens3 root handle 1:0 hfsc default 1
tc class add dev ens3 parent 1:0 classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev ens3 parent 1:0 classid 1:2 hfsc sc rate 1000kbit ul rate 1000kbit
tc filter add dev ens3 protocol all parent 1: u32 match ip dst 10.66.66.9 flowid 1:2
Всем привет. Помогите не работает, выдает ошибку:
| Starting WGDashboard with Gunicorn in the background. |
./wgd.sh: line 104: gunicorn: command not found
| Log files is under log/
В браузере не открывается.
Разобрался сам. Решение тут:
https://github.com/donaldzou/WGDashboard/issues/152
👍