Все системы работают Ваш IP: 216.73.217.36 info@cloudhosting.lv +371 66 66 29 69 Личный кабинет

← Все вопросы

Как настроить WireGuard VPN сервер на VPS

Это руководство показывает, как развернуть собственный WireGuard VPN сервер на VPS с Ubuntu 22.04 или 24.04. Оно написано для разработчиков и администраторов, которым нужен быстрый приватный туннель для удалённого доступа, безопасной работы в публичном Wi-Fi или фиксированный IP для доступа к внутренним сервисам. В конце у вас будет работающий сервер, один настроенный клиент и QR код, который можно отсканировать телефоном.

Почему WireGuard

WireGuard сегодня является разумным выбором по умолчанию для собственного VPN. Причины практические:

  • Небольшая кодовая база. Ядро проекта составляет примерно 4000 строк. OpenVPN вместе со своим TLS стеком больше на порядки, а поверхность атаки растёт вместе с объёмом кода.
  • Современная криптография без выбора опций. ChaCha20-Poly1305 для шифрования и Curve25519 для обмена ключами зафиксированы. Здесь нет наборов шифров, которые можно настроить неправильно.
  • Реализация в ядре. WireGuard входит в ядро Linux начиная с версии 5.6, поэтому даже небольшой VPS прокачивает трафик почти на скорости порта при низкой нагрузке на CPU.
  • Минимальная конфигурация. Рабочий конфиг занимает около десяти строк, а переключение между Wi-Fi и мобильной сетью происходит незаметно, потому что сессии привязаны к ключам, а не к адресам источника.

Компромисс: в WireGuard нет управления пользователями и динамического пула адресов. Каждый клиент представляет собой пару ключей и статический IP туннеля, который вы назначаете сами. Для одного администратора и нескольких устройств это преимущество, а не ограничение.

Установка WireGuard и генерация ключей

Все команды ниже выполняются от root. Установите инструменты:

apt update
apt install -y wireguard qrencode

Сгенерируйте пару ключей для сервера и одну для первого клиента. umask гарантирует, что приватные ключи не будут доступны всем на чтение:

cd /etc/wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
wg genkey | tee client1.key | wg pubkey > client1.pub

Приватный ключ никогда не покидает машину, которой он принадлежит. В строгом развёртывании ключ клиента генерируют на самом устройстве клиента; для первой настройки допустимо сделать это на сервере, только удалите client1.key после импорта конфигурации на телефон.

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

Создайте /etc/wireguard/wg0.conf. Замените оба заполнителя реальным содержимым server.key и client1.pub:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# client1, телефон
PublicKey = CLIENT1_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Строка PostUp превращает VPS в NAT шлюз: пакеты, приходящие из туннеля, уходят через публичный интерфейс с IP адресом сервера. Во многих образах публичный интерфейс называется ens3 или enp1s0, а не eth0. Проверьте это и поправьте обе строки:

ip route | grep default

NAT не работает без IP forwarding, который в Ubuntu по умолчанию выключен. Включите его на постоянной основе:

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-wireguard.conf
sysctl --system

Наконец, защитите конфигурацию, поскольку она содержит приватный ключ:

chmod 600 /etc/wireguard/wg0.conf

Конфигурация клиента и QR код для телефона

Создайте client1.conf в той же директории. Этот файл уйдёт на устройство клиента, поэтому в нём находятся приватный ключ клиента и публичный ключ сервера:

[Interface]
PrivateKey = CLIENT1_PRIVATE_KEY
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_VPS_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0 направляет весь трафик клиента через VPN. Если вам нужен доступ только к внутренней сети сервера, укажите вместо этого конкретные подсети, например 10.8.0.0/24. PersistentKeepalive поддерживает запись NAT живой в мобильных сетях.

Для телефона установите официальное приложение WireGuard из App Store или Google Play и выведите конфигурацию как QR код прямо в терминале:

qrencode -t ansiutf8 < client1.conf

В приложении выберите Add tunnel, затем Scan from QR code. Передача файлов не нужна.

Файрвол и запуск

Если вы используете ufw, откройте порт WireGuard и разрешите форвардинг трафика из туннеля в интернет:

ufw allow 51820/udp
ufw route allow in on wg0 out on eth0
ufw reload

Запустите туннель и включите его автозапуск:

systemctl enable --now wg-quick@wg0
wg show

wg show покажет пира; поле latest handshake появится, как только телефон подключится. С клиента проверьте путь целиком:

  • ping 10.8.0.1 подтверждает сам туннель
  • любой сайт вида what is my ip теперь покажет адрес VPS, что подтверждает работу NAT

Чтобы добавить новых клиентов, повторите генерацию ключей, возьмите следующий свободный адрес (10.8.0.3/32 и так далее), допишите новый блок [Peer] в wg0.conf и выполните systemctl restart wg-quick@wg0, либо добавьте пира на лету командой wg set wg0 peer PUBKEY allowed-ips 10.8.0.3/32.

Ресурсы и когда передать задачу

WireGuard лёгкий. Каждый пир занимает несколько килобайт состояния, а шифрование в ядре обходится дёшево, поэтому VPS с 1 vCPU и 2 GB RAM спокойно обслуживает десятки одновременных клиентов. Реальным узким местом будет сетевой порт, а не процессор, и типичный трафик удалённой работы даже не приближается к его насыщению.

Для этой задачи подойдёт любой из наших тарифов VPS; каждый включает выделенный публичный IPv4 адрес в нашей собственной сети AS58269, а это именно то, что нужно конечной точке VPN. Если задача состоит в соединении целых офисов, а не отдельных устройств, настоящей работой становятся распределение ключей, мониторинг и отказоустойчивость; для такого случая мы предлагаем управляемый VPN между офисами, где туннели обслуживаем и мониторим мы, а маршрутизацию контролируете вы.

Хотите, чтобы это делали мы?
VPS. NVMe виртуальные серверы, запуск за минуту.
Подробнее

Готовы начать?

Запустите за минуты или обсудите с инженером, что подходит вашему проекту.