NPV-AM

← Все статьи

WireGuard: настройка с нуля

18 апр 2026 · 11 мин чтения

Почему WireGuard

WireGuard — это современный VPN-протокол, созданный Джейсоном Доненфельдом. Он значительно проще в настройке и быстрее IPSec и OpenVPN. Кодовая база составляет всего около 4000 строк (включая ядерный модуль), что делает его легко auditsable. WireGuard использует современные криптографические примитивы: Curve25519, ChaCha20, Poly1305, BLAKE2s.

Установка

# Ubuntu/Debian
sudo apt install wireguard

# CentOS/RHEL 8+
sudo dnf install wireguard-tools

# Arch Linux
sudo pacman -S wireguard-tools

# Проверка ядерного модуля
sudo modprobe wireguard
lsmod | grep wireguard

Генерация ключей

Каждая сторона (сервер и клиент) нуждается в паре ключей: приватный и публичный.

# Генерация ключей сервера
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

# Генерация ключей клиента
wg genkey | tee /etc/wireguard/client_private.key | wg pubkey > /etc/wireguard/client_public.key

# Pre-shared ключ для дополнительной защиты (опционально)
wg genpsk > /etc/wireguard/preshared.key

# Установка прав доступа
chmod 600 /etc/wireguard/*_private.key

Настройка сервера

Создайте конфигурационный файл сервера:

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <СЕРВЕР_PRIVATE_KEY>

# Включаем форвардинг и NAT
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

[Peer]
PublicKey = <КЛИЕНТ_PUBLIC_KEY>
PresharedKey = <PRESHARED_KEY>
AllowedIPs = 10.0.0.2/32

Включение IP-форвардинга

# Временно
sudo sysctl -w net.ipv4.ip_forward=1

# Постоянно
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Настройка клиента

# /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.2/24
PrivateKey = <КЛИЕНТ_PRIVATE_KEY>
DNS = 1.1.1.1, 8.8.8.8

[Peer]
PublicKey = <СЕРВЕР_PUBLIC_KEY>
PresharedKey = <PRESHARED_KEY>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Параметр AllowedIPs = 0.0.0.0/0 означает, что весь трафик будет маршрутизироваться через VPN (full tunnel). Если нужно только трафик до подсети сервера, используйте конкретные CIDR.

Запуск и управление

# Запуск интерфейса
sudo wg-quick up wg0

# Остановка
sudo wg-quick down wg0

# Автозапуск при загрузке
sudo systemctl enable wg-quick@wg0

# Просмотр текущего состояния
sudo wg show

# Добавление пира на лету
sudo wg set wg0 peer <PUBLIC_KEY> endpoint vpn.example.com:51820 allowed-ips 10.0.0.3/32

Маршрутизация для split tunnel

Если вы хотите, чтобы через VPN ходил только определённый трафик:

# Только трафик до корпоративной сети
AllowedIPs = 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16

# Или только один сервер
AllowedIPs = 10.0.0.1/32, 192.168.1.100/32

Мониторинг и отладка

# Проверка подключений
sudo wg show wg0

# Пример вывода:
# interface: wg0
#   public key: ABC123...
#   private key: (hidden)
#   listening port: 51820
#
# peer: DEF456...
#   endpoint: 203.0.113.1:51820
#   allowed ips: 10.0.0.2/32
#   latest handshake: 32 seconds ago
#   transfer: 1.2 GiB received, 3.4 GiB sent

# Проверка маршрутов
ip route show table all | grep wg0

# Логи
sudo journalctl -u wg-quick@wg0
WireGuard не имеет встроенной системы аутентификации пользователей. Каждый пир идентифицируется по публичному ключу. Для управления множеством клиентов используйте tools вроде wg-easy или Headscale.

Безопасность

Вывод

WireGuard — это минималистичный, быстрый и безопасный VPN-протокол. Его настройка занимает считанные минуты, а производительность не уступает IPSec. Для продакшен-среды рекомендуется дополнительная автоматизация ключей и мониторинг состояния туннелей.