Зачем нужен собственный 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.