VPSРейтинг
VPN24 января 2026 · 10 мин чтения

Как настроить WireGuard VPN на VPS: пошаговый гайд 2026

WireGuard — самый быстрый и простой VPN-протокол. Настройка сервера занимает 10 минут на чистом Ubuntu 22.04. Все команды готовы к копированию.

Что понадобится

  • • VPS с Ubuntu 22.04 LTS (минимум 1 vCPU, 512 МБ RAM)
  • • Root-доступ по SSH
  • • Открытый UDP-порт на файрволле (по умолчанию 51820)
  • • 10–15 минут времени

Нет VPS? Смотрите рейтинг провайдеров для VPN — тариф от 150₽/мес.

Почему WireGuard, а не OpenVPN

WireGuard был представлен в 2016 году и с версии ядра Linux 5.6 (март 2020) встроен прямо в ядро. Вот почему он лучше:

ПараметрWireGuardOpenVPN
Строк кода~4 000~70 000
СкоростьБлизко к скорости канала200–500 Мбит/с типично
КриптографияChaCha20-Poly1305, Curve25519, BLAKE2sAES-256-GCM, RSA, гибко
ПротоколUDP толькоUDP / TCP
Смена сети (WiFi→LTE)Без разрываПереподключение
Сложность настройкиПростаяСредняя
Встроен в ядро LinuxС 5.6 (2020)Нет (userspace)

Меньше кода = меньше уязвимостей. Работа в ядре Linux = максимальная скорость без userspace-накладных расходов.

Шаг 1: Установка WireGuard на сервер

Подключитесь к серверу по SSH и выполните:

Обновляем систему и ставим WireGuard
apt update && apt upgrade -y
apt install -y wireguard curl

На Ubuntu 22.04 WireGuard уже есть в стандартных репозиториях. На CentOS/AlmaLinux 9 команда другая:

Для CentOS/AlmaLinux 9
dnf install -y wireguard-tools

Шаг 2: Генерация ключей

WireGuard использует пары ключей (приватный + публичный). Генерируем для сервера:

Генерируем ключи сервера
cd /etc/wireguard
wg genkey | tee server.key | wg pubkey > server.pub
chmod 600 server.key

Теперь ключи для первого клиента (выполняем здесь же, на сервере — удобнее):

Генерируем ключи клиента
wg genkey | tee client1.key | wg pubkey > client1.pub
chmod 600 client1.key

Сохраните значения ключей — они понадобятся в конфигах:

Просматриваем ключи
cat server.key   # приватный ключ сервера — только в wg0.conf на сервере
cat server.pub   # публичный ключ сервера — в конфиг клиента
cat client1.key  # приватный ключ клиента — только в конфиг клиента
cat client1.pub  # публичный ключ клиента — в [Peer] секции wg0.conf
Важно: Приватные ключи (server.key, client1.key) нельзя передавать никому. Публичные ключи (*.pub) — безопасны для передачи.

Шаг 3: Конфигурация сервера

Создаём файл /etc/wireguard/wg0.conf. Команда ниже подставит ключи и имя интерфейса автоматически — никаких ручных правок:

Создаём /etc/wireguard/wg0.conf (ключи и интерфейс подставляются автоматически)
SERVER_PRIVATE=$(cat /etc/wireguard/server.key)
CLIENT1_PUBLIC=$(cat /etc/wireguard/client1.pub)
IFACE=$(ip -o -4 route show to default | awk '{print $5}')

cat > /etc/wireguard/wg0.conf << EOF
[Interface]
PrivateKey = $SERVER_PRIVATE
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT; iptables -I FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o $IFACE -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o $IFACE -j MASQUERADE

[Peer]
# Клиент 1
PublicKey = $CLIENT1_PUBLIC
AllowedIPs = 10.0.0.2/32
EOF
chmod 600 /etc/wireguard/wg0.conf
Пояснения:
  • Address = 10.0.0.1/24 — IP сервера в VPN-сети (подсеть 10.0.0.0/24)
  • ListenPort = 51820 — UDP-порт WireGuard (можно изменить)
  • PostUp: -I FORWARD — вставляем правила в начало цепочки, чтобы они работали даже с активным UFW
  • POSTROUTING MASQUERADE — NAT: клиенты выходят в интернет через IP сервера
  • AllowedIPs = 10.0.0.2/32 — IP первого клиента в VPN-сети

Проверьте, что конфиг создан корректно:

Просматриваем созданный конфиг
cat /etc/wireguard/wg0.conf

Шаг 4: IP-форвардинг и NAT

Без IP-форвардинга сервер не будет перенаправлять трафик клиентов в интернет. Это самая частая причина «VPN подключён, но интернета нет».

Включаем IP-форвардинг (файл в sysctl.d — не затронет /etc/sysctl.conf)
cat > /etc/sysctl.d/99-wireguard.conf << EOF
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl --system

Проверяем, что применилось:

Проверка IP-форвардинга
sysctl net.ipv4.ip_forward
# Должно вернуть: net.ipv4.ip_forward = 1

Правила iptables (PostUp/PostDown) прописаны в wg0.conf и применятся автоматически при старте и остановке интерфейса — дополнительных команд iptables вводить не нужно.

Шаг 5: Запуск и автозапуск

Сначала открываем порт в файрволле, затем запускаем WireGuard. Проверьте, активен ли UFW:

Проверяем UFW и открываем порт
ufw status
# Если "inactive" — UFW выключен, переходите к следующему шагу
# Если "active" — открываем порт:
ufw allow 51820/udp
Если UFW не установлен и вы управляете iptables напрямую:iptables -A INPUT -p udp --dport 51820 -j ACCEPT
Запускаем WireGuard и добавляем в автозапуск
systemctl enable --now wg-quick@wg0

Проверяем статус:

Статус сервиса и интерфейса
systemctl status wg-quick@wg0
# Должно быть: active (exited) — это нормально для WireGuard
# wg-quick запускает интерфейс и завершается; сам интерфейс живёт в ядре

wg show
# Покажет: интерфейс wg0, публичный ключ сервера, порт 51820, список пиров

Шаг 6: Настройка клиента

Генерируем конфиг клиента прямо на сервере — ключи и IP подставляются автоматически:

Создаём конфиг клиента (ключи подставляются автоматически)
CLIENT1_PRIVATE=$(cat /etc/wireguard/client1.key)
SERVER_PUBLIC=$(cat /etc/wireguard/server.pub)
SERVER_IP=$(curl -s -4 https://ifconfig.me)

cat > /etc/wireguard/wg-client1.conf << EOF
[Interface]
PrivateKey = $CLIENT1_PRIVATE
Address = 10.0.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = $SERVER_PUBLIC
Endpoint = $SERVER_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF
chmod 600 /etc/wireguard/wg-client1.conf
  • Address = 10.0.0.2/32 — IP клиента в VPN (только его адрес, /32)
  • AllowedIPs = 0.0.0.0/0, ::/0 — весь трафик (IPv4 и IPv6) идёт через VPN
  • PersistentKeepalive = 25 — keepalive каждые 25 сек, поддерживает соединение за NAT
  • DNS = 1.1.1.1 — DNS-запросы через VPN на сервер Cloudflare

Android и iOS

Установите WireGuard из App Store / Google Play. Генерируем QR-код прямо в терминале сервера:

Генерация QR-кода для мобильных клиентов
apt install -y qrencode
qrencode -t ansiutf8 < /etc/wireguard/wg-client1.conf

В приложении нажмите «+» → «Scan QR code» и наведите камеру на терминал.

Windows и macOS

Скачайте файл конфига с сервера на локальный компьютер:

Скачиваем конфиг на локальный ПК (выполнять на клиенте, не на сервере)
scp root@ВАШ_IP_СЕРВЕРА:/etc/wireguard/wg-client1.conf ./wg-client1.conf

Скачайте официальное приложение WireGuard с wireguard.com/install. Нажмите «Add Tunnel» → «Import from file» — выберите скачанный wg-client1.conf. Включите туннель кнопкой Activate.

Linux (клиент)

Подключение на Linux-клиенте (выполнять на клиентской машине)
# 1. Устанавливаем WireGuard — это создаст папку /etc/wireguard
apt install -y wireguard

# 2. Скачиваем конфиг с сервера
scp root@ВАШ_IP_СЕРВЕРА:/etc/wireguard/wg-client1.conf /etc/wireguard/wg0.conf
chmod 600 /etc/wireguard/wg0.conf

# 3. Запускаем туннель
wg-quick up wg0          # включить
wg-quick down wg0        # выключить
systemctl enable wg-quick@wg0  # автозапуск при загрузке

Шаг 7: Проверка подключения

После подключения клиента проверьте на сервере:

Статус активных пиров
wg show
# Сразу после запуска: интерфейс wg0, список peer-ов без handshake
# После первого подключения клиента появится:
#   latest handshake: X seconds ago
#   transfer: N KiB received, N KiB sent

На стороне клиента убедитесь, что IP сменился:

Проверка IP через curl (Linux-клиент)
curl -s https://ifconfig.me
# Должен вернуть IP вашего VPS, а не домашний IP

Проверьте доступность внутреннего адреса сервера:

Пинг сервера через VPN-туннель
ping 10.0.0.1
# Ответы подтверждают, что туннель работает

Добавление новых клиентов

Каждый новый пользователь — новая пара ключей и новый IP в VPN-сети:

Генерация ключей и конфига для клиента 2
cd /etc/wireguard
wg genkey | tee client2.key | wg pubkey > client2.pub
chmod 600 client2.key

# Добавляем нового пира в конфиг сервера
CLIENT2_PUBLIC=$(cat client2.pub)
echo "
[Peer]
# Клиент 2
PublicKey = $CLIENT2_PUBLIC
AllowedIPs = 10.0.0.3/32" >> /etc/wireguard/wg0.conf

Применяем без перезапуска сервиса (активные клиенты не отключатся):

Горячее добавление пира
wg syncconf wg0 <(wg-quick strip wg0)
# Или полный перезапуск (если нужно обновить PostUp/PostDown):
# systemctl restart wg-quick@wg0

Генерируем конфиг для клиента 2 (аналогично первому, только другой IP и ключ):

Конфиг клиента 2
CLIENT2_PRIVATE=$(cat /etc/wireguard/client2.key)
SERVER_PUBLIC=$(cat /etc/wireguard/server.pub)
SERVER_IP=$(curl -s -4 https://ifconfig.me)

cat > /etc/wireguard/wg-client2.conf << EOF
[Interface]
PrivateKey = $CLIENT2_PRIVATE
Address = 10.0.0.3/32
DNS = 1.1.1.1

[Peer]
PublicKey = $SERVER_PUBLIC
Endpoint = $SERVER_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF
chmod 600 /etc/wireguard/wg-client2.conf

Типичные проблемы и решения

VPN подключён, но интернета нет

Решение: Три вещи: (1) sysctl net.ipv4.ip_forward — должно быть 1; (2) iptables -t nat -L POSTROUTING -n -v — должно быть правило MASQUERADE; (3) iptables -L FORWARD -n -v — должны быть правила ACCEPT для wg0. Если правил нет — перезапустите: systemctl restart wg-quick@wg0.

Клиент не может подключиться (таймаут)

Решение: На сервере: systemctl status wg-quick@wg0 — сервис должен быть active. Затем: ss -ulnp | grep 51820 — порт должен слушаться. С другого хоста: sudo nmap -sU -p 51820 ВАШ_IP — порт должен быть open. Также проверьте файрволл в панели управления VPS-провайдера — он может блокировать UDP независимо от UFW.

DNS не работает через VPN

Решение: Убедитесь, что DNS = 1.1.1.1 есть в [Interface] клиентского конфига. На Linux-клиентах с systemd-resolved может помочь: PostUp = resolvectl dns %i 1.1.1.1; resolvectl domain %i ~., PostDown = resolvectl revert %i (где %i = имя интерфейса wg0).

WireGuard не запускается: «Cannot find device wg0»

Решение: Ядро слишком старое — WireGuard встроен начиная с Linux 5.6. Проверьте: uname -r. Ubuntu 22.04 использует ядро 5.15 — проблем быть не должно. Если у вас ядро старше 5.6 — обновите ОС до Ubuntu 22.04 или новее.

Частые вопросы

Смотрите также