Логотип

Как настроить VPN-сервер WireGuard с помощью WireGuard-UI в Ubuntu

Как настроить VPN-сервер WireGuard с помощью WireGuard-UI в Ubuntu

Когда вы подключаетесь к Wi-Fi в кафе или выходите в интернет через любую общедоступную сеть, ваши данные проходят через инфраструктуру, которую вы не контролируете. Любой, кто находится между вами и посещаемыми вами веб-сайтами, потенциально может перехватить ваш трафик. Даже в вашей домашней сети ваш интернет-провайдер может видеть все сайты, которые вы посещаете.

VPN решает эту проблему, создавая зашифрованный туннель между вашим устройством и сервером, которому вы доверяете. Вместо того чтобы напрямую подключаться к интернету, ваш трафик сначала проходит через этот защищённый туннель к вашему VPN-серверу, который затем перенаправляет его по назначению. Таким образом, любой, кто следит за сетью, видит только зашифрованные данные, поступающие на ваш VPN-сервер, и ничего больше.

WireGuard — это современный VPN протокол, который отлично справляется с этой задачей. В отличие от более старых VPN-технологий, требующих сотен тысяч строк кода, WireGuard выполняет ту же задачу, используя всего около 4000 строк, что означает меньшее количество ошибок, более высокую производительность и упрощённый аудит безопасности.

Но вот в чём дело: хотя WireGuard сам по себе прост, управление несколькими VPN-клиентами, создание файлов конфигурации и отслеживание того, у кого есть доступ, могут стать утомительными, если использовать только командную строку. Поэтому веб-интерфейс оказывается очень кстати.

В этой статье мы настроим полноценный WireGuard VPN сервер с удобным веб-интерфейсом, который позволит вам управлять всем через браузер, например добавлять новые устройства, генерировать QR-коды для мобильных клиентов и отслеживать подключения, не редактируя ни один файл конфигурации вручную.

 

Что Вам понадобится

Прежде чем мы начнём, убедитесь, что у вас есть:

  • Сервер Linux с общедоступным IP-адресом.
  • Корневой доступ или права sudo на этом сервере.
  • Базовые знания о SSH (вы должны знать, как подключиться к своему серверу).

 

В этой статье  предполагается, что вы используете Ubuntu 22.04 или Ubuntu 24.04, но эти шаги аналогичны для Debian и других дистрибутивов с небольшими изменениями.

 

Понимание архитектуры

Прежде чем вводить команды, давайте разберемся, что мы создаем.

Настройка WireGuard состоит из одноранговых узлов — устройств, которые могут взаимодействовать друг с другом через зашифрованные туннели.

В нашем случае получится:

  • Сервер: ваш компьютер с Linux и общедоступным IP-адресом, который выступает в роли центрального узла, к которому подключаются все ваши устройства.
  • Клиенты: ваш ноутбук, телефон, планшет или любое другое устройство, которое вы хотите защитить. Для каждого клиента создается собственная пара криптографических ключей и настраиваются параметры.
  • Веб-интерфейс: лёгкое веб-приложение (мы будем использовать WireGuard-UI), которое запускается на вашем сервере и предоставляет панель управления для всех операций.

 

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

 

Шаг 1. Установка WireGuard на сервере Ubuntu

Для начала давайте убедимся, что ваша система обновлена и в ней установлены необходимые инструменты. Для этого выполните следующую команду, которая обновит списки пакетов и устаревшее программное обеспечение.

sudo apt update && sudo apt upgrade -y

 

Затем установите сам WireGuard:

sudo apt install wireguard -y

 

Поскольку WireGuard встроен в ядро Linux (для ядер 5.6 и выше), эта команда в первую очередь устанавливает инструменты пользовательского пространства, необходимые для настройки и управления WireGuard интерфейсами.

Установка WireGuard в Ubuntu

 

Шаг 2. Включение переадресации IP-адресов в Ubuntu

По умолчанию Ubuntu не пересылает пакеты между сетевыми интерфейсами. Это сделано в целях безопасности, чтобы ваш сервер не работал как маршрутизатор без вашего прямого указания. Но для VPN-сервера нам нужна эта функция.

Когда ваш телефон подключается к VPN и пытается зайти на веб-сайт, сервер должен перенаправить этот запрос с интерфейса WireGuard на интерфейс общедоступной сети, а затем перенаправить ответ обратно.

Чтобы включить постоянную переадресацию IP-адресов, нам нужно отредактировать файл конфигурации системы:

sudo nano /etc/sysctl.conf

 

Найдите эту строку (она может быть закомментирована с помощью # в начале):

#net.ipv4.ip_forward=1

 

Уберите # , чтобы раскомментировать код, или добавьте строку, если она отсутствует:

net.ipv4.ip_forward=1

 

Сохраните файл, а затем примените изменения без перезагрузки:

sudo sysctl -p

Включите переадресацию IP-адресов в Ubuntu

Включите переадресацию IP-адресов в Ubuntu

 

Шаг 3. Настройка брандмауэра и маршрутизации для WireGuard

Ваш VPN-сервер должен принимать входящие соединения через порт WireGuard (по умолчанию это UDP-порт 51820). Он также должен правильно маршрутизировать трафик между VPN-интерфейсом и вашим общедоступным сетевым интерфейсом.

Читать  6 браузерных атак, к которым все группы безопасности должны быть готовы в 2025 году

Для начала давайте определим ваш общедоступный сетевой интерфейс:

ip route | grep default

 

Вы увидите примерно такой результат:

default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100

 

Здесь имя интерфейса — `eth0`, но в вашей системе оно может быть другим: `ens3`, `enp0s3` или что-то подобное.

Теперь давайте настроим брандмауэр ufw (брандмауэр Ubuntu по умолчанию):

# Разрешить SSH (если вы ещё этого не сделали)
sudo ufw allow 22/tcp

# Разрешить WireGuard
sudo ufw allow 51820/udp

# Разрешить веб-интерфейс (мы будем использовать порт 5000) 
sudo ufw allow 5000/tcp

 

Далее нам нужно добавить правило NAT (трансляция сетевых адресов), которое будет указывать вашему серверу на необходимость маскировки VPN-трафика, как если бы он исходил от самого сервера, при его пересылке в Интернет.

sudo nano /etc/ufw/before.rules

 

Добавьте эти строки в начало файла, сразу после комментариев в заголовке, но перед строкой *filter и замените eth0 на фактическое название вашего интерфейса:

# Правила таблицы NAT для WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT

 

Вот что это значит:

  • *nat: Мы работаем с таблицей NAT.
  • -s 10.0.0.0/24Для пакетов, поступающих из нашей VPN-сети (10.0.0.0/24 — это подсеть, которую мы назначаем VPN-клиентам).
  • -o eth0: Выход через интерфейс eth0.
  • -j MASQUERADE: Замените исходный IP-адрес на общедоступный IP-адрес сервера.

 

Сохраните и выйдите, затем включите и перезагрузите UFW:

sudo ufw enable
sudo ufw reload

 

Шаг 4. Установка WireGuard-UI на сервер Ubuntu

Теперь перейдём к самому интересному — настройке веб-интерфейса с помощью WireGuard-UI, который представляет собой чистое и простое веб-приложение, написанное на Go.

Сначала создайте каталог для WireGuard-UI:

sudo mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui

 

Затем скачайте последнюю версию WireGuard-UI с страницы релизов GitHub, но на момент написания статьи команда wget выдавала последнюю стабильную версию:

sudo wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz

 

После загрузки распакуйте архив и сделайте файл исполняемым:

sudo tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
sudo chmod +x wireguard-ui

 

Прежде чем запускать интерфейс, давайте создадим службу systemd, чтобы она автоматически запускалась при загрузке.

sudo nano /etc/systemd/system/wireguard-ui.service

 

Вставьте эту конфигурацию:

[Unit]
Description=Пользовательский интерфейс WireGuard
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

 

Сохраните и выйдите, затем включите и запустите службу:

sudo systemctl daemon-reload
sudo systemctl enable wireguard-ui
sudo systemctl start wireguard-ui

 

Убедитесь, что он запущен:

sudo systemctl status wireguard-ui

Проверьте статус Wireguard-UI

 

Шаг 5. Доступ к пользовательскому интерфейсу Wireguard

Откройте веб-браузер и перейдите по следующему URL-адресу, не забыв заменить YOUR_SERVER_IP на фактический публичный IP-адрес вашего сервера.

http://IP-YOUR_SERVER_IP:5000

 

Вы увидите страницу входа, на которой можно использовать следующие учётные данные по умолчанию:

Username: admin
Password: admin

 

Wireguard-Панель управления Пользовательским интерфейсом

 

Важно: измените их сразу после входа в систему. Нажмите на своё имя пользователя в правом верхнем углу, затем выберите «Настройки» и обновите пароль.

Шаг 6. Настройка сервера WireGuard

После входа в систему вы попадете на панель управления WireGuard-UI. Чтобы начать настройку сервера, нажмите «Сервер WireGuard» на левой боковой панели и укажите имя интерфейса 10.0.0.1/24 (интерфейс WireGuard по умолчанию) и порт прослушивания 51820.

В поле Post Up Script введите:

iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

 

а в поле Post Down Script введите:

iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

 

Обязательно замените eth0 на фактическое имя вашего сетевого интерфейса, если оно отличается от указанного, и укажите Address to 10.0.0.1/24, который будет внутренним IP-адресом VPN-сервера.

Когда вы нажмёте Применить конфигурацию, WireGuard создаст интерфейс wg0, будет прослушивать VPN-подключения на порту 51820, назначит вашему серверу VPN-IP и настроит правила брандмауэра для правильной переадресации VPN-трафика.

Пользовательский интерфейс также автоматически сгенерирует закрытый и открытый ключи вашего сервера. После применения настроек интерфейс должен отображать статус Активный, что означает, что ваш сервер WireGuard запущен и работает.

Настройка сервера WireGuard

 

Шаг 7. Добавьте своего первого клиента WireGuard

Теперь давайте добавим устройство в вашу VPN. Это может быть ваш ноутбук, телефон или любое другое клиентское устройство. На левой боковой панели нажмите «Клиенты», затем нажмите «Добавить нового клиента».

Читать  Новый бэкдор Linux «Plague» использует PAM для обхода авторизации в системе

Присвойте клиенту описательное имя, например «Мой ноутбук» или «iPhone», и при желании укажите адрес электронной почты, чтобы впоследствии можно было идентифицировать устройство. Нажмите «Авто», чтобы автоматически назначить следующий доступный IP-адрес (скорее всего, 10.0.0.2).

В поле «Разрешённые IP-адреса» введите 0.0.0.0/0, ::/0, чтобы весь трафик клиента проходил через VPN. Если вам нужен доступ только к внутренней сети сервера, вы можете указать эту подсеть (например, 10.0.0.0/24).

Когда всё будет готово, нажмите «Отправить», и веб-интерфейс автоматически сгенерирует полную конфигурацию WireGuard для этого клиента, включая его собственную пару криптографических ключей.

Добавить клиент WireGuard

 

Шаг 8. Подключение клиентского устройства

Теперь вам нужно перенести конфигурацию на своё устройство. WireGuard-UI упрощает эту задачу с помощью QR-кодов для мобильных устройств и загружаемых файлов конфигурации для компьютеров.

Для мобильных устройств (телефонов/планшетов):

  • Установите приложение WireGuard из магазина приложений (оно доступно как для iOS, так и для Android).
  • В веб-интерфейсе WireGuard-UI найдите только что созданного клиента и нажмите на значок QR-кода.
  • Откройте приложение WireGuard на своём телефоне, нажмите кнопку "+" и выберите «Создать из QR-кода».
  • Отсканируйте QR-код, отображаемый в вашем браузере.
  • Присвойте соединению имя и нажмите «Создать туннель».

 

Вот и всё! Нажмите на переключатель, чтобы подключиться, и ваше мобильное устройство начнёт направлять весь трафик через ваш VPN-сервер.

Для Настольного компьютера/Ноутбука:

  • Установите WireGuard с сайта wireguard.com/install.
  • В интерфейсе WireGuard-UI нажмите на значок загрузки рядом с вашим клиентом, чтобы скачать файл .conf.
  • Откройте приложение WireGuard на своем компьютере, нажмите “Импортировать туннели из файла“ и выберите загруженный файл конфигурации.
  • Нажмите «Активировать», чтобы подключиться.

 

Шаг 9. Тестирование VPN

Давайте убедимся, что всё работает правильно. Сначала отключите VPN, перейдите на сайт whatismyipaddress.com и запишите указанный IP-адрес.

Затем подключитесь к WireGuard VPN и обновите страницу. Теперь вместо вашего исходного IP-адреса должен отображаться общедоступный IP-адрес вашего сервера, что подтверждает, что трафик направляется через VPN.

Чтобы убедиться, что DNS работает правильно, вы можете выполнить следующую команду на подключенном устройстве:

ping google.com

 

Если вы видите ответы, значит, ваш VPN правильно маршрутизирует трафик.

Чтобы просмотреть активные подключения на вашем сервере, войдите по SSH и выполните команду:

sudo wg show

 

Вы увидите примерно такой результат:

interface: wg0
  public key: [your server's public key]
  private key: (hidden)
  listening port: 51820

peer: [client's public key]
  endpoint: [client's IP]:random_port
  allowed ips: 10.0.0.2/32
  latest handshake: 45 seconds ago
  transfer: 2.50 MiB received, 15.23 MiB sent

 

Здесь показано, что ваш клиент подключен, когда он в последний раз взаимодействовал с сервером и какой объем данных был передан.

 

Шаг 10. Используйте HTTPS для WireGuard-UI

Прямо сейчас, когда вы заходите в веб-интерфейс WireGuard по адресу http://YOUR_SERVER_IP:5000, ваши учётные данные и все данные конфигурации передаются через Интернет в виде обычного текста, и любой, кто перехватит трафик между вашим браузером и сервером, может увидеть ваш пароль администратора и потенциально перехватить ваш сеанс.

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

Мы будем использовать Nginx (высокопроизводительный веб-сервер) в качестве обратного прокси-сервера и Let’s Encrypt для получения бесплатного SSL сертификата, чтобы вы могли получить доступ к своему интерфейсу WireGuard по адресу https://vpn.yourdomain.com вместо IP-адреса по протоколу HTTP.

 

Установить веб-сервер Nginx

Сначала вам нужно создать DNS запись для вашего домена (https://vpn.yourdomain.com), которая будет указывать на IP-адрес вашего сервера, а затем установить веб-сервер Nginx.

sudo apt обновить систему
sudo apt установить nginx -y

После установки вы можете ввести http://vpn.yourdomain.com в адресной строке браузера и увидеть стандартную страницу приветствия Nginx, что означает, что Nginx работает и доступен из Интернета.

 

Установите Certbot для Let’s Encrypt

Затем установите Let’s Encrypt — бесплатный центр сертификации, предоставляющий SSL-сертификаты, а certbot — инструмент, автоматизирующий процесс получения и продления этих сертификатов.

sudo apt install certbot python3-certbot-nginx -y

 

Пакет python3-certbot-nginx включает в себя плагин, который может автоматически настроить Nginx, значительно упрощая процесс.

Читать  Скрытые киберриски при использовании генеративного ИИ

 

Настройте Nginx в качестве обратного прокси

Теперь давайте создадим конфигурацию Nginx, которая будет перенаправлять запросы с https://vpn.yourdomain.com на ваше приложение WireGuard-UI, работающее на localhost:5000.

Создайте новый файл конфигурации.

sudo nano /etc/nginx/sites-available/wireguard-ui

 

Вставьте эту конфигурацию (замените vpn.yourdomain.com на свой домен):

server {
 listen 80;
 listen [::]:80;
 server_name vpn.yourdomain.com;

 # Это будет использоваться Certbot для проверки SSL-сертификата
 location /.well-known/acme-challenge/ {
 root /var/www/html;
 }

 # Перенаправляет весь остальной HTTP-трафик на HTTPS
 location / {
 return 301 https://$host$request_uri;
 }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name vpn.yourdomain.com;

 # Пути к SSL-сертификату (Certbot заполнит их)
 ssl_certificate /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem;

 # Современная конфигурация SSL
 ssl_protocols TLSv1.2 TLSv1.3;
 ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_prefer_server_ciphers on;

 # Заголовки безопасности
 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 add_header X-Frame-Options "SAMEORIGIN" always;
 add_header X-Content-Type-Options "nosniff" always;

 # Настройки прокси
 location / {
 proxy_pass http://127.0.0.1:5000;
 proxy_http_version 1.1;
 
  поддержка # WebSocket (если ее использует WireGuard-UI)
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";
 
 # Пересылка информации о реальном клиенте
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 
 # Таймауты
 proxy_connect_timeout 60 с;
 proxy_send_timeout 60 с;
 proxy_read_timeout 60 с;
 }
}

 

Теперь включите эту конфигурацию, создав символическую ссылку:

sudo ln -s /etc/nginx/sites-available/wireguard-ui /etc/nginx/sites-enabled/

 

Проверьте конфигурацию Nginx на наличие синтаксических ошибок:

sudo nginx -t

 

Вы должны увидеть:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

Если вы обнаружили какие-либо ошибки, вернитесь и проверьте файл конфигурации на наличие опечаток.

 

Получение SSL-сертификата

После того как всё настроено правильно, можно запустить команду certbot, которая автоматически получит SSL-сертификат от Let’s Encrypt и настроит Nginx для его использования.

sudo certbot --nginx -d vpn.yourdomain.com

 

Весь процесс занимает около 30 секунд, после чего вы увидите сообщение об успешном завершении:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem

 

Теперь перезагрузите Nginx, чтобы применить все изменения:

sudo systemctl reload nginx

 

Автоматическое продление сертификата

Let’s Encrypt действительны только в течение 90 дней. Это сделано намеренно, чтобы стимулировать регулярное обновление и ограничить потенциальный ущерб в случае компрометации закрытого ключа.

К счастью, Certbot автоматически устанавливает таймер продления при установке, и вы можете убедиться, что служба продления активна, выполнив команду:

sudo systemctl status certbot.timer

 

и вы увидите, что он активен (работает). Этот таймер проверяет наличие сертификата дважды в день и автоматически продлевает его, если до истечения срока действия осталось менее 30 дней.

Чтобы убедиться, что всё работает, не выполняя фактическое обновление, запустите:
sudo certbot renew –dry-run

Если проверка пройдёт успешно, автоматическое продление сертификата будет настроено, и вам не придётся беспокоиться о том, что срок действия сертификатов истечёт.

 

Обновите свой брандмауэр

Поскольку теперь мы обращаемся к WireGuard-UI через Nginx на стандартном порту HTTPS (443), нам нужно разрешить это в нашем брандмауэре и при желании закрыть прямой доступ к порту 5000.

sudo ufw allow 443/tcp

 

При желании вы можете запретить прямой доступ к WireGuard-UI через порт 5000 (чтобы все использовали интерфейс HTTPS). Для этого удалите следующее правило:

sudo ufw delete allow 5000/tcp

 

Перезагрузите брандмауэр:

sudo ufw reload

 

Шаг 11. Настройте WireGuard-UI на прослушивание только локального хоста

Поскольку Nginx теперь обрабатывает все внешние подключения, мы должны настроить WireGuard-UI так, чтобы он принимал подключения только с локального компьютера. Это не позволит никому получить прямой доступ к порту 5000, даже если они обнаружат, что порт открыт.

Остановите службу WireGuard-UI:

sudo systemctl stop wireguard-ui

 

Отредактируйте служебный файл:

sudo nano /etc/systemd/system/wireguard-ui.service

Измените строку ExecStart так, чтобы привязка осуществлялась только к localhost:

[Unit]
Description=WireGuard UI
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
Environment="BIND_ADDRESS=127.0.0.1:5000"
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

 

Сохраните и выйдите, затем перезагрузите systemd и перезапустите службу:

sudo systemctl daemon-reload
sudo systemctl start wireguard-ui
sudo systemctl status wireguard-ui

 

Наконец, откройте браузер и перейдите по ссылке:

https://vpn.yourdomain.com

 

В адресной строке вашего браузера должен появиться значок замка. Чтобы просмотреть сведения о сертификате, нажмите на значок замка. Вы увидите, что сертификат выдан Let’s Encrypt и действителен в течение 90 дней.

 

Краткие сведения

К этому моменту вы успешно развернули полностью работоспособный сервер WireGuard VPN с безопасным веб-интерфейсом для управления. Вместо того чтобы вручную работать с ключами, файлами конфигурации и правилами маршрутизации, WireGuard-UI предоставляет вам простую панель управления для добавления новых устройств, генерации QR-кодов и мониторинга активных подключений.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)

Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.

Важно: Материал носит исключительно технический и образовательный характер. Мы не призываем к использованию VPN в целях обхода ограничений, предусмотренных законодательством РФ или иных стран. Использование VPN в ряде государств может регулироваться или ограничиваться законом. Перед использованием VPN ознакомьтесь с актуальными правовыми требованиями вашей страны.

Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала