← К вики

Установка WireGuard VPN

Как настроить WireGuard-сервер на VPS и подключить клиентские устройства.

Время: 20 мин · Сложность: ★★☆☆☆

Подходит: ✓ Ubuntu 22.04 · ✓ Debian 12


Краткое описание

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

Когда пригодится

  • Нужен личный VPN без сторонних сервисов
  • Хотите объединить несколько серверов в приватную сеть
  • Нужен защищённый канал для удалённого доступа к ресурсам за файрволом

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

  • VPS с Ubuntu 22.04 или Debian 12 и доступом root/sudo
  • Открытый порт UDP 51820 (настроим в процессе)
  • На клиентском устройстве — приложение WireGuard (wireguard.com)

Пошаговая инструкция

1. Установить WireGuard

apt update && apt install -y wireguard

2. Сгенерировать ключи сервера

wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key

Первая команда генерирует приватный ключ, сохраняет его в файл и одновременно выводит публичный ключ в другой файл. chmod 600 закрывает приватный ключ от других пользователей.

Посмотреть содержимое ключей:

cat /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key

3. Создать конфиг сервера

nano /etc/wireguard/wg0.conf

Вставьте следующее, заменив <содержимое server_private.key> на реальный ключ:

[Interface]
PrivateKey = <содержимое server_private.key>
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Address = 10.0.0.1/24 — внутренний IP-адрес сервера в сети VPN. Клиенты получат адреса из этой же подсети (10.0.0.2, 10.0.0.3 и т.д.).

PostUp / PostDown — правила iptables для маскарадинга: трафик клиентов выходит в интернет через интерфейс eth0 сервера. Если у вашего сервера другой интерфейс (проверьте через ip a), замените eth0 на нужное имя.

4. Включить IP-форвардинг

Без этого трафик клиентов не будет проходить через сервер:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Проверить, что форвардинг включён:

sysctl net.ipv4.ip_forward

Должен вернуть net.ipv4.ip_forward = 1.

5. Открыть порт в файрволе

ufw allow 51820/udp

Если ufw не используется, добавьте правило через iptables:

iptables -A INPUT -p udp --dport 51820 -j ACCEPT

6. Запустить WireGuard

systemctl enable --now wg-quick@wg0

Проверить, что интерфейс поднялся:

wg show

7. Сгенерировать ключи клиента

Выполните на сервере (или на клиентской машине, если там установлен WireGuard):

wg genkey | tee client_private.key | wg pubkey > client_public.key

8. Добавить клиента в конфиг сервера

Откройте /etc/wireguard/wg0.conf и добавьте в конец:

nano /etc/wireguard/wg0.conf
[Peer]
PublicKey = <содержимое client_public.key>
AllowedIPs = 10.0.0.2/32

AllowedIPs = 10.0.0.2/32 — сервер будет принимать трафик от клиента только с этого IP. Для второго клиента добавьте новый [Peer] с 10.0.0.3/32.

Перезагрузите конфиг без разрыва соединений:

wg syncconf wg0 <(wg-quick strip wg0)

9. Создать конфиг клиента

Создайте файл client.conf — его нужно скопировать на клиентское устройство:

[Interface]
PrivateKey = <содержимое client_private.key>
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = <содержимое server_public.key>
Endpoint = SERVER_IP:51820
AllowedIPs = 0.0.0.0/0

Замените SERVER_IP на реальный IP вашего VPS (узнайте через curl -4 ifconfig.me).

AllowedIPs = 0.0.0.0/0 означает, что весь трафик клиента идёт через VPN. Если нужен доступ только к внутренней сети VPN — укажите 10.0.0.0/24.

Передайте конфиг на устройство (через scp, QR-код в приложении WireGuard или вручную) и активируйте подключение.

Проверка результата

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

wg show

После подключения клиента в выводе появится секция peer с latest handshake.

С клиентского устройства проверьте связность с сервером:

ping 10.0.0.1

Убедитесь, что внешний трафик идёт через VPN:

curl ifconfig.me

Должен вернуть IP вашего VPS, а не реальный IP клиента.

Возможные ошибки

Нет соединения, wg show не показывает handshake

Проверьте, открыт ли порт:

ufw status

Попробуйте с клиента:

nc -zu SERVER_IP 51820

Если порт закрыт — перепроверьте правила файрвола.

Трафик идёт мимо VPN

Проверьте, что IP-форвардинг включён (sysctl net.ipv4.ip_forward). Убедитесь, что в конфиге клиента AllowedIPs = 0.0.0.0/0. Проверьте, что правила iptables из PostUp применились:

iptables -t nat -L POSTROUTING

WireGuard не запускается

Посмотрите лог:

journalctl -u wg-quick@wg0 -n 50

Чаще всего проблема в неверном формате ключа в конфиге или ошибке синтаксиса.

FAQ

Сколько клиентов можно подключить?

Ограничений по протоколу нет. Добавляйте [Peer] секции в конфиг сервера. Производительность ограничена процессором сервера.

Как отключить клиента?

Удалите соответствующий [Peer] блок из /etc/wireguard/wg0.conf и выполните wg syncconf wg0 <(wg-quick strip wg0).

Работает ли WireGuard на мобильных устройствах?

Да. Официальные приложения доступны для Android и iOS. Конфиг можно импортировать вручную или через QR-код, который генерирует команда qrencode -t ansiutf8 < client.conf (требует пакет qrencode).

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

Следующие статьи

Сейчас работают только те cookie, без которых сайт не откроется. Разрешите ещё аналитические — будем видеть, где интерфейс мешает, и чинить это.