WireGuard — настройка сервера на Linux
Установка WireGuard-сервера на Debian/Ubuntu и подключение клиентов. Клиентские статьи: клиент на Linux, инструкция для пользователя (Windows/iOS), WireGuard на MikroTik.
Установка и ключи
sudo apt update && sudo apt install -y wireguard
Генерируем ключи сервера:
umask 077
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Конфигурация сервера
Создаём /etc/wireguard/wg0.conf:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <приватный_ключ_сервера>
# NAT для выхода клиентов в интернет/локальную сеть (eth0 — внешний интерфейс)
PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Включаем форвардинг:
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
Открываем порт (если используется UFW):
sudo ufw allow 51820/udp
Запускаем и включаем автозапуск:
sudo systemctl enable --now wg-quick@wg0
wg show
Добавление клиента
- Генерируем пару ключей клиента (можно на сервере):
umask 077
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
- Добавляем peer в
/etc/wireguard/wg0.conf:
[Peer]
# client1 — Иванов
PublicKey = <публичный_ключ_клиента>
AllowedIPs = 10.8.0.2/32
- Применяем без разрыва соединений:
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
- Конфиг для клиента
client1.conf:
[Interface]
PrivateKey = <приватный_ключ_клиента>
Address = 10.8.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = <публичный_ключ_сервера>
Endpoint = vpn.example.com:51820
AllowedIPs = 10.0.0.0/8, 10.8.0.0/24
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 — если через туннель должен идти весь трафик клиента.
Для мобильных устройств удобно отдать конфиг QR-кодом:
sudo apt install -y qrencode
qrencode -t ansiutf8 < client1.conf
Проверка и диагностика
wg show # рукопожатия и трафик по каждому peer
sudo systemctl status wg-quick@wg0
sudo journalctl -u wg-quick@wg0 -e
- Нет handshake — проверьте, что порт UDP открыт и Endpoint указан верно.
- Handshake есть, трафик не ходит — проверьте
ip_forward, правило MASQUERADE и маршруты на стороне сервера. - Каждому клиенту — свой уникальный
/32адрес и своя пара ключей; один конфиг на несколько устройств использовать нельзя.