Как поднять свой VPN на VPS с WireGuard
Запустить на сервере одной командой (сначала проверьте содержимое скрипта ниже):
curl -sSL https://cp.lv/scripts/svoj-vpn-wireguard.sh | sudo bash…или через wget:
wget -qO- https://cp.lv/scripts/svoj-vpn-wireguard.sh | sudo bashСодержимое скрипта svoj-vpn-wireguard.sh:
#!/usr/bin/env bash
# Свой VPN на WireGuard: сервер + первый клиент (Ubuntu/Debian)
set -euo pipefail
WG_DIR=/etc/wireguard
SERVER_IP=$(curl -s ifconfig.me)
WAN_IF=$(ip route list default | awk '{print $5; exit}')
# 1. Установка
sudo apt update && sudo apt install -y wireguard wireguard-tools qrencode
# 2. Ключи сервера и клиента
cd "$WG_DIR"
umask 077
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
SRV_PRIV=$(sudo cat server_private.key)
SRV_PUB=$(sudo cat server_public.key)
CLI_PRIV=$(sudo cat client_private.key)
CLI_PUB=$(sudo cat client_public.key)
# 3. Конфиг сервера (переменные подставятся)
sudo tee "$WG_DIR/wg0.conf" > /dev/null << EOF
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = ${SRV_PRIV}
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ${WAN_IF} -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ${WAN_IF} -j MASQUERADE
[Peer]
PublicKey = ${CLI_PUB}
AllowedIPs = 10.8.0.2/32
EOF
# 4. Включение IP-форвардинга
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
# 5. Конфиг клиента
sudo tee "$WG_DIR/client.conf" > /dev/null << EOF
[Interface]
PrivateKey = ${CLI_PRIV}
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = ${SRV_PUB}
Endpoint = ${SERVER_IP}:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF
# 6. Firewall и запуск
sudo ufw allow 51820/udp || true
sudo systemctl enable --now wg-quick@wg0
sudo qrencode -t ansiutf8 < "$WG_DIR/client.conf"
echo "Готово: VPN поднят, конфиг клиента — $WG_DIR/client.conf"
Свой VPN на WireGuard поднимается за 15 минут: установить пакет, сгенерировать пару ключей, описать интерфейс wg0 на сервере, включить IP-форвардинг и добавить клиента. Ниже — полная последовательность команд для Ubuntu/Debian на любом VPS.
Почему именно WireGuard
WireGuard встроен в ядро Linux, использует современную криптографию (Curve25519, ChaCha20) и работает быстрее OpenVPN при меньшем объёме кода. Конфигурация — это два коротких файла. Для личного VPN этого более чем достаточно.
Минимальные требования: VPS с 1 vCPU и 512 МБ RAM, публичный IPv4, root-доступ. Для VPN подойдёт любой недорогой тариф — трафик шифрования почти не нагружает процессор.
Шаг 1. Установка
apt update && apt upgrade -y
apt install -y wireguard wireguard-tools
Шаг 2. Генерация ключей сервера
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
cat server_private.key
cat server_public.key
umask 077 защищает приватный ключ от чтения другими пользователями. Сохраните оба значения — они понадобятся в конфиге.
Шаг 3. Конфиг сервера
Определите внешний сетевой интерфейс:
ip route list default
Обычно это eth0 или ens3. Откройте /etc/wireguard/wg0.conf в редакторе (sudo nano /etc/wireguard/wg0.conf) и вставьте содержимое:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key>
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
Либо создайте файл целиком одной командой — скопируйте и вставьте в консоль (кавычки 'EOF' сохраняют плейсхолдеры как есть):
sudo tee /etc/wireguard/wg0.conf > /dev/null << 'EOF'
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key>
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
EOF
Замените eth0 на своё имя интерфейса и вставьте приватный ключ сервера.
Шаг 4. Включение IP-форвардинга
Без этого сервер не будет пересылать трафик клиентов в интернет:
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-wireguard.conf
sysctl -p /etc/sysctl.d/99-wireguard.conf
Шаг 5. Ключи и конфиг клиента
Сгенерируйте пару ключей для клиента:
wg genkey | tee client_private.key | wg pubkey > client_public.key
Откройте на устройстве клиента файл client.conf в редакторе (nano client.conf) и вставьте содержимое:
[Interface]
PrivateKey = <client_private.key>
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <server_public.key>
Endpoint = <IP_вашего_VPS>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Либо запишите файл целиком одной командой (кавычки 'EOF' оставят плейсхолдеры как есть):
tee client.conf > /dev/null << 'EOF'
[Interface]
PrivateKey = <client_private.key>
Address = 10.8.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <server_public.key>
Endpoint = <IP_вашего_VPS>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF
AllowedIPs = 0.0.0.0/0 направляет весь трафик через VPN. PersistentKeepalive = 25 держит соединение живым за NAT.
Шаг 6. Регистрация клиента на сервере
Добавьте в конец /etc/wireguard/wg0.conf:
[Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.8.0.2/32
Шаг 7. Запуск
systemctl enable --now wg-quick@wg0
systemctl status wg-quick@wg0
wg show
Откройте порт в firewall (если используете ufw):
ufw allow 51820/udp
Подключение клиента
На телефоне удобно импортировать конфиг QR-кодом:
apt install -y qrencode
qrencode -t ansiutf8 < client.conf
Отсканируйте код в приложении WireGuard — соединение поднимется автоматически.
Проверка
После подключения проверьте внешний IP:
curl ifconfig.me
Должен вернуться IP вашего VPS. Если нет — проверьте IP-форвардинг и правило MASQUERADE.
Добавление нескольких клиентов
Каждому устройству нужна своя пара ключей и свой IP из подсети. Сгенерируйте ключи для второго клиента:
cd /etc/wireguard
wg genkey | tee client2_private.key | wg pubkey > client2_public.key
Добавьте новый блок в /etc/wireguard/wg0.conf:
[Peer]
PublicKey = <client2_public.key>
AllowedIPs = 10.8.0.3/32
Примените изменения без разрыва существующих соединений:
wg syncconf wg0 <(wg-quick strip wg0)
Так конфиг перечитается «на лету», а активные пиры не отвалятся.
Резервное копирование и восстановление
Все настройки VPN хранятся в /etc/wireguard. Сохраните их в безопасное место:
tar czf wireguard-backup.tar.gz /etc/wireguard
При переносе на новый сервер распакуйте архив, установите wireguard-tools и запустите wg-quick@wg0 — клиентам менять ничего не придётся, если IP сервера сохранился.
Проверка после перезагрузки
Убедитесь, что интерфейс поднимается автоматически:
reboot
# после входа
wg show
systemctl is-enabled wg-quick@wg0
Команда enabled подтверждает автозапуск. Если интерфейс не поднялся — смотрите journalctl -u wg-quick@wg0.
Безопасность интерфейса
Приватный ключ сервера — самый чувствительный файл. Проверьте права:
chmod 600 /etc/wireguard/*.key /etc/wireguard/wg0.conf
Не передавайте приватные ключи по незашифрованным каналам и генерируйте отдельную пару на каждое устройство — так компрометация одного клиента не раскрывает остальных.
Частые вопросы
Сколько устройств можно подключить?
Сколько угодно. На каждое устройство добавьте отдельный блок [Peer] с уникальным AllowedIPs (10.8.0.3/32, 10.8.0.4/32 и т.д.).
Работает ли WireGuard по UDP-only портам? Да, WireGuard использует только UDP. Убедитесь, что провайдер и firewall не блокируют выбранный порт.
Как повысить приватность DNS?
Укажите в клиенте DNS = 1.1.1.1 или поднимите свой резолвер на том же VPS.
Можно ли сменить порт 51820?
Да, поменяйте ListenPort в конфиге сервера и Endpoint у клиентов, откройте новый порт в firewall.
Нужен ли отдельный сервер под VPN? Отдельный VPS изолирует VPN от других задач и упрощает управление доступом. Для личного использования достаточно самого лёгкого тарифа.
Готовы развернуть личный VPN? Возьмите VPS для VPN и безопасности или базовую аренду VPS. Нет времени на настройку — поможет Администрирование серверов.
