Настройка VPN-сервера на Debian: OpenVPN и WireGuard — подробное руководство

Узнайте, как развернуть собственный VPN-сервер на Debian с помощью OpenVPN или WireGuard. Пошаговые инструкции, настройка безопасности, сравнение протоколов и ответы на частые вопросы.

Зачем нужен собственный VPN-сервер на Debian

Использование публичных VPN-сервисов удобно, но не всегда безопасно: вы не знаете, кто управляет сервером и какие данные он логирует. Собственный VPN-сервер на Debian даёт полный контроль над инфраструктурой, позволяет настраивать политики доступа и избегать слежки со стороны провайдера или злоумышленников в публичных Wi-Fi сетях.

Debian — один из самых стабильных и безопасных дистрибутивов Linux, что делает его идеальной основой для VPN-сервера. Он поддерживает оба популярных протокола: OpenVPN (проверенный временем, гибкий) и WireGuard (современный, быстрый, встроенный в ядро). Выбор зависит от ваших задач: если нужна максимальная совместимость с клиентами и тонкая настройка — OpenVPN; если приоритет — скорость и простота — WireGuard.

Собственный сервер также позволяет обходить географические блокировки и фильтрацию трафика, особенно если использовать TCP-порт 443, который часто не блокируется. Однако важно помнить о юридических аспектах: в некоторых странах использование VPN регулируется законодательством, поэтому перед развёртыванием стоит изучить местные правила.

OpenVPN или WireGuard: сравнение протоколов

OpenVPN — это зрелый протокол с богатой историей. Он использует SSL/TLS для аутентификации и шифрования, поддерживает сертификаты, логины/пароли и предварительные ключи. OpenVPN легко маскируется под HTTPS-трафик при работе на порту 443, что помогает обходить глубокий анализ пакетов (DPI). Однако он требует отдельного центра сертификации (CA) и более сложной настройки.

WireGuard — более новый протокол, работающий внутри ядра Linux. Он использует современную криптографию (ChaCha20, Curve25519) и отличается высокой производительностью. Настройка WireGuard проще: вместо сертификатов используются пары открытых/закрытых ключей, как в SSH. WireGuard автоматически восстанавливает соединение при смене сети (например, с Wi-Fi на мобильный интернет), что удобно для мобильных устройств.

Для большинства новых проектов WireGuard становится предпочтительным выбором благодаря скорости и простоте. Однако OpenVPN остаётся актуальным, если нужна поддержка старых клиентов или сложные сценарии аутентификации. В этой статье мы рассмотрим оба варианта, чтобы вы могли выбрать подходящий.

Подготовка сервера Debian к установке VPN

Перед установкой VPN-сервера убедитесь, что у вас есть:

  • Сервер с Debian 10, 11 или новее (подойдёт VPS или физическая машина).
  • Доступ к root или пользователю с правами sudo.
  • Минимальные ресурсы: 64 МБ ОЗУ и 1 ГБ дискового пространства достаточно для OpenVPN; WireGuard ещё легче.
  • Открытый порт в брандмауэре (по умолчанию 1194 для OpenVPN UDP, 51820 для WireGuard UDP).

Обновите систему и установите необходимые пакеты:

sudo apt update
sudo apt upgrade -y

Для OpenVPN понадобится пакет openvpn и утилита easy-rsa для управления сертификатами. Для WireGuard — wireguard и wireguard-tools. Также рекомендуется настроить SSH-ключи для безопасного удалённого управления сервером, чтобы не использовать пароли.

Важно: если вы планируете использовать отдельный центр сертификации (CA) для OpenVPN, подготовьте второй сервер или локальную машину, которая не будет постоянно подключена к интернету. Это повышает безопасность, так как закрытый ключ CA хранится отдельно.

Установка и настройка OpenVPN на Debian

Установите OpenVPN и Easy-RSA:

sudo apt install openvpn easy-rsa

Скопируйте скрипты Easy-RSA в рабочий каталог, например /root/easy-rsa:

mkdir /root/easy-rsa
cp -r /usr/share/easy-rsa/* /root/easy-rsa/
cd /root/easy-rsa

Отредактируйте файл vars, указав параметры ключей (размер 4096 бит рекомендуется):

nano vars

Добавьте в конец:

KEY_SIZE=4096
KEY_COUNTRY="RU"
KEY_PROVINCE="Moscow"
KEY_CITY="Moscow"
KEY_ORG="MyOrg"
KEY_EMAIL="admin@example.com"

Инициализируйте PKI и создайте центр сертификации:

source ./vars
./clean-all
./build-ca

Создайте сертификат сервера (имя server обязательно):

./build-key-server server

Сгенерируйте параметры Diffie-Hellman (может занять несколько минут):

./build-dh

Создайте ключ HMAC для защиты от DoS-атак:

openvpn --genkey --secret keys/ta.key

Скопируйте все необходимые файлы в /etc/openvpn/:

cp keys/{ca.crt,server.crt,server.key,ta.key,dh4096.pem} /etc/openvpn/

Теперь создайте конфигурацию сервера /etc/openvpn/server.conf:

port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh4096.pem
tls-auth /etc/openvpn/ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

Включите переадресацию IP и настройте iptables (см. следующий раздел). Затем запустите службу:

sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server

Настройка сети и брандмауэра для OpenVPN

Чтобы VPN-клиенты могли выходить в интернет через сервер, включите переадресацию IP. Отредактируйте /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Примените изменения:

sudo sysctl -p

Настройте iptables для маскировки трафика. Создайте скрипт /root/vpn_firewall.sh со следующим содержимым (адаптируйте под ваш сетевой интерфейс, например eth0):

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
PRIVATE=10.8.0.0/24
LOOP=127.0.0.1
# Сброс правил
iptables -F
iptables -t nat -F
# Политики по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Разрешаем loopback
iptables -A INPUT -s $LOOP -j ACCEPT
iptables -A INPUT -d $LOOP -j ACCEPT
# Разрешаем SSH (порт 22) и OpenVPN (UDP 1194)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# Разрешаем входящие из туннеля
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
# Состояния
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Маскировка
iptables -t nat -A POSTROUTING -s $PRIVATE -o eth0 -j MASQUERADE

Сделайте скрипт исполняемым и запустите:

chmod +x /root/vpn_firewall.sh
sudo /root/vpn_firewall.sh

Проверьте, что SSH-подключение не прервалось. Добавьте скрипт в автозагрузку через cron или systemd, но сначала убедитесь в его корректной работе.

Генерация клиентских сертификатов и настройка клиента OpenVPN

Для каждого клиента OpenVPN создайте отдельный сертификат. На сервере выполните:

cd /root/easy-rsa
./build-key client1

Скопируйте файлы client1.crt, client1.key, ca.crt и ta.key на клиентскую машину. На клиенте Debian установите OpenVPN:

sudo apt install openvpn

Создайте конфигурацию /etc/openvpn/client.conf:

client
dev tun
proto udp
remote ваш_сервер_IP 1194
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
tls-auth /etc/openvpn/ta.key 1
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
nobind

Запустите клиент:

sudo systemctl enable openvpn@client
sudo systemctl start openvpn@client

Проверьте подключение командой ip a — должен появиться интерфейс tun0 с адресом из подсети 10.8.0.0/24. Для мобильных устройств можно использовать официальные приложения OpenVPN, импортировав файл .ovpn, который объединяет все параметры и ключи.

Установка и настройка WireGuard на Debian

WireGuard доступен в стандартных репозиториях Debian 11. Установите его на сервере и клиенте:

sudo apt update
sudo apt install wireguard wireguard-tools

Для Debian 10 потребуется добавить backports-репозиторий.

Создайте пары ключей на сервере:

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

На клиенте аналогично:

wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key

Создайте конфигурацию сервера /etc/wireguard/wg0.conf:

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = <закрытый ключ сервера>

[Peer]
PublicKey = <открытый ключ клиента>
AllowedIPs = 10.10.10.2/32

На клиенте создайте /etc/wireguard/wg-client0.conf:

[Interface]
Address = 10.10.10.2/24
DNS = 10.10.10.1
PrivateKey = <закрытый ключ клиента>

[Peer]
PublicKey = <открытый ключ сервера>
AllowedIPs = 0.0.0.0/0
Endpoint = ваш_сервер_IP:51820
PersistentKeepalive = 25

Установите права доступа:

sudo chmod 600 /etc/wireguard/*

Включите переадресацию IP на сервере (как описано выше) и настройте маскировку через iptables или UFW. Запустите WireGuard:

sudo wg-quick up wg0

Для автозапуска используйте systemd:

sudo systemctl enable wg-quick@wg0

Настройка DNS и брандмауэра для WireGuard

Если вы указали VPN-сервер в качестве DNS-сервера для клиентов, установите на сервере DNS-резолвер, например BIND9:

sudo apt install bind9

Отредактируйте /etc/bind/named.conf.options, добавив разрешение рекурсии для VPN-подсети:

allow-recursion { 127.0.0.1; 10.10.10.0/24; };

Перезапустите BIND:

sudo systemctl restart bind9

Настройте брандмауэр. Если используете UFW, добавьте правила:

sudo ufw allow 22/tcp
sudo ufw allow 51820/udp
sudo ufw allow from 10.10.10.0/24 to any port 53

Для маскировки добавьте в /etc/ufw/before.rules перед секцией *filter:

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens3 -j MASQUERADE
COMMIT

Замените ens3 на ваш сетевой интерфейс. Включите UFW:

sudo ufw enable

Проверьте, что клиент получает IP-адрес и может резолвить домены.

Безопасность VPN-сервера: лучшие практики

Независимо от выбранного протокола, следуйте этим рекомендациям:

  • Используйте сильные ключи: для OpenVPN — 4096-битные ключи RSA, для WireGuard — современную криптографию по умолчанию.
  • Ограничьте доступ по IP: в конфигурации OpenVPN можно указать client-config-dir для назначения конкретных IP-адресов клиентам, а в WireGuard — параметр AllowedIPs.
  • Настройте файрвол: разрешайте только необходимые порты и ограничьте доступ к SSH (например, по ключам и нестандартному порту).
  • Включите логирование: OpenVPN пишет логи в /var/log/openvpn.log, WireGuard — в системный журнал. Регулярно проверяйте их на предмет подозрительной активности.
  • Обновляйте систему: регулярно устанавливайте обновления безопасности с помощью apt update && apt upgrade.
  • Используйте отдельный CA для OpenVPN: храните закрытый ключ CA на машине, не подключённой к интернету, чтобы снизить риск компрометации.
  • Отключите аутентификацию по паролю для SSH и используйте только ключи.

Для OpenVPN также рекомендуется использовать tls-auth или tls-crypt для защиты от сканирования портов и DoS-атак. WireGuard автоматически игнорирует неавторизованные пакеты, что делает его более устойчивым к атакам.

Решение типичных проблем при настройке VPN

Проблема: клиент не может подключиться к OpenVPN. Проверьте, что порт 1194 открыт в брандмауэре, сервер запущен (systemctl status openvpn@server), и в конфигурации клиента указан правильный IP и порт. Также убедитесь, что сертификаты не истекли и совпадают.

Проблема: WireGuard не поднимается. Проверьте права на файлы конфигурации (должны быть 600), корректность ключей и наличие модуля ядра (modprobe wireguard). Убедитесь, что порт 51820 доступен.

Проблема: трафик не маршрутизируется. Проверьте, включена ли переадресация IP (sysctl net.ipv4.ip_forward), и правильно ли настроен MASQUERADE. На клиенте проверьте маршрут по умолчанию (ip route).

Проблема: DNS не работает. Убедитесь, что DNS-сервер доступен с клиента (например, dig @10.10.10.1 example.com). Проверьте настройки resolv.conf и правила брандмауэра для порта 53.

Если проблема не решается, смотрите логи: для OpenVPN — /var/log/openvpn.log, для WireGuard — journalctl -u wg-quick@wg0.

Вопросы и ответы

Какой протокол VPN лучше выбрать для Debian: OpenVPN или WireGuard?

Выбор зависит от ваших приоритетов. OpenVPN более гибкий и совместимый, поддерживает сертификаты и логины/пароли, легко маскируется под HTTPS на порту 443. WireGuard проще в настройке, быстрее и использует современную криптографию, но требует более новых клиентов. Если вам нужна максимальная скорость и простота — выбирайте WireGuard. Если важна совместимость со старыми устройствами или сложная аутентификация — OpenVPN.