Перейти к содержимому

WireGuard: частная сеть для своих серверов и устройств

Поднять WireGuard на VPS, чтобы ноутбук, офис и другие серверы общались по защищённой частной сети 10.8.0.0/24.

Уровень
Средний
Время чтения
3 мин чтения
Обновлено
Проверено на
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Содержание
  1. Схема адресов
  2. Установка и ключи
  3. Конфигурация сервера
  4. Пересылка между клиентами
  5. Фаервол
  6. Запуск
  7. Проверьте результат
  8. Частые ошибки

WireGuard — быстрый и простой VPN, встроенный в ядро Linux. Типичная задача: закрыть базы данных, панели и мониторинг от интернета и ходить к ним только по частной сети со своих устройств. VPS с публичным IP становится центральным узлом этой сети.

Схема адресов

УзелАдрес в сети WireGuard
VPS (сервер)10.8.0.1
Ноутбук10.8.0.2
Телефон10.8.0.3
Второй сервер или офисный роутер10.8.0.4

Установка и ключи

bash
$ apt update && apt install -y wireguard$ cd /etc/wireguard$ umask 077$ wg genkey | tee server.key | wg pubkey > server.pub$ cat server.pub

Приватный ключ (server.key) не покидает сервер. Публичный (server.pub) понадобится в конфигурации каждого клиента.

Конфигурация сервера

Для каждого устройства создайте свою пару ключей (как — в статье про клиентов) и добавьте блок [Peer] с его публичным ключом:

/etc/wireguard/wg0.conf
[Interface]Address = 10.8.0.1/24ListenPort = 51820PrivateKey = <содержимое server.key># Ноутбук[Peer]PublicKey = <публичный ключ ноутбука>AllowedIPs = 10.8.0.2/32# Телефон[Peer]PublicKey = <публичный ключ телефона>AllowedIPs = 10.8.0.3/32
bash
$ chmod 600 /etc/wireguard/wg0.conf

Пересылка между клиентами

Если клиенты должны видеть не только VPS, но и друг друга (ноутбук ↔ офис), включите пересылку пакетов:

bash
$ echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-wireguard.conf$ sysctl --system

Фаервол

bash
$ ufw allow 51820/udp$ ufw route allow in on wg0 out on wg0$ ufw reload

Вторая команда разрешает трафик между клиентами внутри туннеля. Сервисы, которые должны быть доступны только по VPN, открывайте для интерфейса wg0, например: ufw allow in on wg0 to any port 5432 proto tcp.

Запуск

bash
$ systemctl enable --now wg-quick@wg0$ wg show

Чтобы добавить устройство без разрыва текущих соединений, допишите [Peer] в wg0.conf и примените изменения:

bash
$ wg syncconf wg0 <(wg-quick strip wg0)

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

После подключения клиента в выводе wg show у его блока peer появятся строки latest handshake и transfer. С клиента выполните:

bash
$ ping -c 3 10.8.0.1

Частые ошибки

  • Нет latest handshake — закрыт 51820/udp, неверный Endpoint у клиента или перепутаны публичные ключи.
  • Два peer с одинаковым AllowedIPs — трафик уходит только последнему. У каждого устройства должен быть свой адрес.
  • Ошибка «resolvconf: command not found» при старте — в конфигурации указан DNS. Уберите строку DNS из серверного wg0.conf или установите пакет resolvconf.
  • Один конфиг на несколько устройств — они будут выбивать друг друга. Одно устройство — одна пара ключей.

Дочитайте до конца — статья засчитается в обучении автоматически.

  • wireguard
  • vpn
  • частная сеть
  • туннель
  • wg

Статья помогла?