WireGuard — минималистичный VPN-протокол, встроенный в ядро Linux с 5.6. По сравнению с OpenVPN: в 3-5 раз быстрее, конфиг умещается в 10 строк, latency минимальный (UDP, никаких handshake overhead).
Ниже — рабочий конфиг за 5 минут: свой WireGuard-сервер на VPS для 5-10 клиентов (телефон, ноутбук, домашний роутер). Без Docker, без сторонних скриптов — только официальные пакеты.
Шаг 1. Установка на сервере
Ubuntu 22.04/24.04 — wireguard в основных репозиториях.
sudo apt update
sudo apt install -y wireguard qrencode
sudo apt install -y iptables-persistent # для сохранения правил NAT
# включить forwarding в ядре
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wg.conf
sudo sysctl -p /etc/sysctl.d/99-wg.confШаг 2. Генерация ключей сервера
Приватный + публичный ключ ed25519.
cd /etc/wireguard
umask 077
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
sudo cat server_private.key # → SERVER_PRIVATE
sudo cat server_public.key # → SERVER_PUBLICШаг 3. Конфиг wg0.conf
Кладём в /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = SERVER_PRIVATE
Address = 10.100.0.1/24
ListenPort = 51820
SaveConfig = false
# 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
# первый клиент (добавим позже)Если основной интерфейс не eth0, замените (проверить: ip route | grep default). Обычно — eth0 или ens3.
Шаг 4. Запустить сервис
Systemd unit wg-quick@wg0 уже готов.
sudo systemctl enable --now wg-quick@wg0
# статус
sudo wg show # интерфейс wg0, peers пока нет
sudo ss -tulpn | grep 51820 # udp *:51820 LISTENШаг 5. Открыть порт 51820 UDP в firewall
На хосте:
sudo ufw allow 51820/udp
sudo ufw reload
# или через iptables напрямую:
sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT
sudo netfilter-persistent saveШаг 6. Добавить клиента (телефон)
Генерируем ключи клиента, дописываем секцию в wg0.conf.
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
CLIENT_PRIVATE=$(cat client1_private.key)
CLIENT_PUBLIC=$(cat client1_public.key)
SERVER_PUBLIC=$(sudo cat /etc/wireguard/server_public.key)
# конфиг для клиента (сохраните как client1.conf)
cat <<EOF > client1.conf
[Interface]
PrivateKey = $CLIENT_PRIVATE
Address = 10.100.0.2/24
DNS = 1.1.1.1, 9.9.9.9
[Peer]
PublicKey = $SERVER_PUBLIC
Endpoint = your.vps.ip:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF
# добавить peer в конфиг сервера
sudo tee -a /etc/wireguard/wg0.conf <<EOF
[Peer]
# client1 — phone
PublicKey = $CLIENT_PUBLIC
AllowedIPs = 10.100.0.2/32
EOF
# перезапустить wg
sudo systemctl restart wg-quick@wg0Шаг 7. QR-код для телефона
WireGuard-приложение (iOS/Android) читает QR — не надо копипастить.
qrencode -t ansiutf8 < client1.conf
# в терминале появится QR — сканируйте с телефонаПроверка
На клиенте — включаем VPN, curl ifconfig.me должен показать IP вашего VPS.
- На сервере:
sudo wg show— видно peer, endpoint, кол-во handshake'ов, трафик. - На клиенте:
ip a— должен быть интерфейсutun/wg0c 10.100.0.2. ping 10.100.0.1— сервер отвечает.curl ifconfig.me— IP сервера, не IP клиента.