Назад в блог/Как настроить WireGuard на VPS: сервер и клиент

Как настроить WireGuard на VPS: сервер и клиент

Настройка WireGuard VPN на VPS с Ubuntu или Debian: установка, ключи, firewall, маршрутизация IPv4, клиентская конфигурация и диагностика handshake.

Зашифрованный WireGuard-туннель от устройств к VPS
Схема VPN-туннеля WireGuard через VPS

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

По данным Wordstat, запрос «wireguard настройка сервера» набрал 412 показов за последние 30 дней; вариант «как сделать свой VPN сервер» — 313. Покажем базовую конфигурацию для одного клиента и IPv4 на Ubuntu/Debian. Для подключения нескольких устройств каждому нужен собственный ключ и отдельный VPN-адрес.

1. Проверьте сервер и порт

Нужен VPS с публичным IPv4, доступом администратора и актуальной Ubuntu или Debian. В панели хостинга проверьте внешний сетевой экран: он должен пропускать входящий UDP-трафик на выбранный порт, например 51820. На самом сервере не отключайте доступ по SSH во время настройки.

Сначала обновите списки пакетов и установите WireGuard:

BASH
sudo apt update
sudo apt install wireguard

Если используете UFW, разрешите UDP-порт WireGuard, сохранив ранее настроенные правила SSH:

BASH
sudo ufw allow 51820/udp
sudo ufw status

2. Сгенерируйте ключи

WireGuard проверяет участников по паре ключей. На сервере создайте приватный ключ с ограниченными правами и вычислите открытый:

BASH
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'

Для клиента создайте отдельную пару на самом клиентском устройстве. На Linux это можно сделать так:

BASH
umask 077
wg genkey | tee client.key | wg pubkey > client.pub

Не копируйте клиентский приватный ключ на VPS. На сервер передаётся только открытый ключ клиента; в конфигурацию клиента — только открытый ключ сервера. Файлы .key и экспортируемые конфиги храните как пароли.

3. Включите маршрутизацию IPv4

Для выхода клиентов в интернет серверу нужно пересылать IPv4-пакеты. Создайте файл /etc/sysctl.d/99-wireguard-forward.conf:

TEXT
net.ipv4.ip_forward=1

Загрузите настройку и проверьте значение:

BASH
sudo sysctl --system
sysctl net.ipv4.ip_forward

В ответе должно быть net.ipv4.ip_forward = 1.

4. Создайте конфигурацию сервера

Определите внешний интерфейс, через который VPS выходит в интернет:

BASH
ip -4 route get 1.1.1.1

В строке результата найдите значение после dev — например, eth0 или ens3. В конфигурации ниже замените WAN_IF на это имя, а значения в угловых скобках на ключи. Не вставляйте сами скобки.

Создайте /etc/wireguard/wg0.conf:

INI
[Interface]
Address = 10.66.66.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o WAN_IF -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o WAN_IF -j MASQUERADE

[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.66.66.2/32

Подставьте приватный серверный ключ из /etc/wireguard/server.key, открытый ключ клиента — из client.pub. Сеть 10.66.66.0/24 в примере должна отличаться от сетей, уже используемых локальной сетью и другими VPN. Установите безопасные права:

BASH
sudo chmod 600 /etc/wireguard/wg0.conf

Правила PostUp разрешают пересылку трафика VPN-клиента и выполняют NAT на внешнем интерфейсе. Если сервер управляет firewall через nftables или облачную панель, адаптируйте правила под существующую конфигурацию, чтобы они не конфликтовали.

5. Добавьте конфигурацию на клиент

Клиентский конфиг для одного устройства выглядит так:

INI
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.66.66.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <SERVER_PUBLIC_KEY>
Endpoint = <SERVER_PUBLIC_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Замените адрес сервера и ключи. AllowedIPs = 0.0.0.0/0 отправляет IPv4-трафик клиента через VPN. Если требуется доступ только к внутренней подсети, укажите её диапазон, например 10.20.0.0/16, вместо маршрута всего интернета. Настройка выше не маршрутизирует IPv6; если клиентская сеть использует IPv6, отдельно настройте IPv6-маршрутизацию и фильтрацию либо отключите IPv6 для этого подключения на клиенте, чтобы избежать обхода туннеля.

6. Запустите и проверьте WireGuard

На VPS включите интерфейс сейчас и добавьте его в автозапуск:

BASH
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0
sudo wg show

Установите официальное приложение WireGuard на клиентское устройство и импортируйте конфигурацию. Когда туннель включён, sudo wg show на сервере покажет latest handshake после первого обмена данными. Счётчики передачи пакетов помогут увидеть, проходит ли трафик.

Если handshake не появляется, проверьте по порядку: совпадают ли ключи и адрес endpoint; разрешён ли UDP-порт на внешнем и серверном firewall; запущена ли служба; разрешён ли форвардинг. Ubuntu отдельно рекомендует проверять AllowedIPs, маршруты, адрес интерфейса и ip_forward при диагностике WireGuard.

Если handshake есть, но интернет через туннель не открывается, проверьте имя WAN_IF в правилах NAT, DNS-клиента и маршрут по умолчанию. Для DNS-тестирования временно используйте IP-адрес сайта: если по IP доступ есть, а по имени нет, проблема может быть в DNS-конфигурации.

Для нового ноутбука или телефона создайте новую пару ключей, добавьте ещё один блок [Peer] на сервере и назначьте уникальный адрес, например 10.66.66.3/32. Не переносите один клиентский конфиг между людьми: у каждого участника должны быть отдельные ключи, чтобы доступ можно было отозвать независимо.

Документация

Нужен быстрый сервер под ваш проект?

Арендуйте производительный KVM VPS в Москве или Германии на скоростных NVMe дисках от 300 ₽/мес. Автовыдача за 60 секунд, выделенный IPv4 и защита от DDoS.

Выбрать тариф