WireGuard — быстрый и простой VPN, встроенный в ядро Linux. Типичная задача: закрыть базы данных, панели и мониторинг от интернета и ходить к ним только по частной сети со своих устройств. VPS с публичным IP становится центральным узлом этой сети.
Схема адресов
| Узел | Адрес в сети WireGuard |
|---|---|
| VPS (сервер) | 10.8.0.1 |
| Ноутбук | 10.8.0.2 |
| Телефон | 10.8.0.3 |
| Второй сервер или офисный роутер | 10.8.0.4 |
Установка и ключи
$ 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] с его публичным ключом:
[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$ chmod 600 /etc/wireguard/wg0.confПересылка между клиентами
Если клиенты должны видеть не только VPS, но и друг друга (ноутбук ↔ офис), включите пересылку пакетов:
$ echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-wireguard.conf$ sysctl --systemФаервол
$ 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.
Запуск
$ systemctl enable --now wg-quick@wg0$ wg showЧтобы добавить устройство без разрыва текущих соединений, допишите [Peer] в wg0.conf и примените изменения:
$ wg syncconf wg0 <(wg-quick strip wg0)Проверьте результат
После подключения клиента в выводе wg show у его блока peer появятся строки latest handshake и transfer. С клиента выполните:
$ ping -c 3 10.8.0.1Частые ошибки
- Нет latest handshake — закрыт 51820/udp, неверный Endpoint у клиента или перепутаны публичные ключи.
- Два peer с одинаковым AllowedIPs — трафик уходит только последнему. У каждого устройства должен быть свой адрес.
- Ошибка «resolvconf: command not found» при старте — в конфигурации указан DNS. Уберите строку DNS из серверного wg0.conf или установите пакет resolvconf.
- Один конфиг на несколько устройств — они будут выбивать друг друга. Одно устройство — одна пара ключей.