WireGuard: настройка VPN-сервера на Linux

WireGuard даёт защищённый удалённый доступ к сети с минимальной конфигурацией: один файл на сервере и один на клиенте. Ниже установка на Debian/Ubuntu, маршрутизация и проверка. Ключи и адреса в примерах условные.
Шаг 1. Установка и ключи
apt install -y wireguard
umask 077
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
Приватный ключ никому не передают. Права на /etc/wireguard должны быть только у root. Для каждого клиента создайте свою пару ключей на его устройстве.
Шаг 2. Конфигурация сервера
Файл /etc/wireguard/wg0.conf:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
В AllowedIPs на стороне сервера указывайте только адрес этого клиента. Это одновременно маршрут и фильтр: клиент не сможет подставить чужой адрес.
Шаг 3. Маршрутизация в сеть
Если клиентам нужен доступ во внутреннюю сеть или в интернет через сервер, включите пересылку пакетов и NAT:
echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-wg.conf
sysctl --system
Добавьте в блок [Interface] правила (замените eth0 на ваш внешний интерфейс):
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
Если у вас nftables или firewalld, оформите эти правила в них: настройка firewall в Linux. Откройте порт: 51820/udp.
Шаг 4. Клиент
[Interface]
Address = 10.8.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 10.8.0.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 10.8.0.0/24, 192.168.10.0/24
PersistentKeepalive = 25
Если указать AllowedIPs = 0.0.0.0/0, весь трафик клиента пойдёт через сервер. Для доступа только к офисной сети перечислите нужные подсети, как выше.
Шаг 5. Запуск
systemctl enable --now wg-quick@wg0
Как проверить
wg show # на сервере: у peer есть latest handshake
ping 10.8.0.1 # с клиента
ip route get 192.168.10.5 # маршрут идёт через wg0
Если handshake не появляется, проверьте, что открыт 51820/udp, совпадают публичные ключи и верен Endpoint.
Риски и ограничения
- Один компрометированный клиентский ключ даёт доступ ко всем подсетям из его
AllowedIPs. Удаляйте peer сразу при потере устройства:wg set wg0 peer CLIENT_PUBLIC_KEY remove. - WireGuard не имеет встроенных учётных записей и MFA. Если нужна привязка к пользователям и второй фактор, используйте надстройки или другой продукт. Подробнее: MFA и управление доступом.
- Для нового сервера сначала выполните базовый hardening.
Официальная документация: wireguard.com/quickstart.





















