Как настроить 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:
sudo apt update
sudo apt install wireguard
Если используете UFW, разрешите UDP-порт WireGuard, сохранив ранее настроенные правила SSH:
sudo ufw allow 51820/udp
sudo ufw status
2. Сгенерируйте ключи
WireGuard проверяет участников по паре ключей. На сервере создайте приватный ключ с ограниченными правами и вычислите открытый:
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 это можно сделать так:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
Не копируйте клиентский приватный ключ на VPS. На сервер передаётся только открытый ключ клиента; в конфигурацию клиента — только открытый ключ сервера. Файлы .key и экспортируемые конфиги храните как пароли.
3. Включите маршрутизацию IPv4
Для выхода клиентов в интернет серверу нужно пересылать IPv4-пакеты. Создайте файл /etc/sysctl.d/99-wireguard-forward.conf:
net.ipv4.ip_forward=1
Загрузите настройку и проверьте значение:
sudo sysctl --system
sysctl net.ipv4.ip_forward
В ответе должно быть net.ipv4.ip_forward = 1.
4. Создайте конфигурацию сервера
Определите внешний интерфейс, через который VPS выходит в интернет:
ip -4 route get 1.1.1.1
В строке результата найдите значение после dev — например, eth0 или ens3. В конфигурации ниже замените WAN_IF на это имя, а значения в угловых скобках на ключи. Не вставляйте сами скобки.
Создайте /etc/wireguard/wg0.conf:
[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. Установите безопасные права:
sudo chmod 600 /etc/wireguard/wg0.conf
Правила PostUp разрешают пересылку трафика VPN-клиента и выполняют NAT на внешнем интерфейсе. Если сервер управляет firewall через nftables или облачную панель, адаптируйте правила под существующую конфигурацию, чтобы они не конфликтовали.
5. Добавьте конфигурацию на клиент
Клиентский конфиг для одного устройства выглядит так:
[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 включите интерфейс сейчас и добавьте его в автозапуск:
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. Не переносите один клиентский конфиг между людьми: у каждого участника должны быть отдельные ключи, чтобы доступ можно было отозвать независимо.