Установка 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).