В статье описана пошаговая установка и настройка OpenVPN сервера в Debian 13: генерация сертификатов, правка конфигурационного файла и настройка сетевых скриптов.
1. Установка пакетов
Установите OpenVPN, утилиту для работы с сертификатами Easy-RSA и iptables:
root@srv:~# apt -y install openvpn easy-rsa iptables
2. Создание центра сертификации (CA) и ключей
Перейдите в директорию Easy-RSA и инициализируйте PKI:
root@srv:~# cd /usr/share/easy-rsa root@srv:/usr/share/easy-rsa# ./easyrsa init-pki
Создайте центр сертификации (CA). Придумайте и введите пароль, а затем укажите имя (Common Name), например Server-CA:
root@srv:/usr/share/easy-rsa# ./easyrsa build-ca
Сгенерируйте сертификат сервера (ключ nopass означает, что для запуска сервиса не потребуется ввод пароля):
root@srv:/usr/share/easy-rsa# ./easyrsa build-server-full server1 nopass
Подтвердите действие, введя yes, и укажите пароль от CA.
Сгенерируйте сертификат для клиента (например, client1):
root@srv:/usr/share/easy-rsa# ./easyrsa build-client-full client1 nopass
Создайте параметры Диффи-Хеллмана (это может занять некоторое время):
root@srv:/usr/share/easy-rsa# ./easyrsa gen-dh
Сгенерируйте ключ TLS-Auth для дополнительной защиты:
root@srv:/usr/share/easy-rsa# openvpn --genkey secret ./pki/ta.key
Скопируйте все созданные файлы в рабочую директорию OpenVPN:
root@srv:/usr/share/easy-rsa# cp -pR /usr/share/easy-rsa/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/
3. Настройка конфигурационного файла
Скопируйте пример конфигурации в рабочую папку:
root@srv:~# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
Откройте файл для редактирования:
root@srv:~# vi /etc/openvpn/server/server.conf
Найдите и измените следующие строки (либо создайте пустой файл и поместите в него этот конфиг):
# Порт подключения port 1194 # Протокол proto udp # Тип устройства dev tun # Пути к сертификатам и ключам ca ca.crt cert issued/server1.crt key private/server1.key dh dh.pem # Виртуальная подсеть VPN (не должна совпадать с локальной) server 172.16.100.0 255.255.255.0 # Маршрут к локальной сети сервера (замените 10.0.0.0 на вашу сеть) push "route 10.0.0.0 255.255.255.0" # Настройки keepalive keepalive 10 120 # Ключ TLS-Auth tls-auth ta.key 0 # Параметры сохранения состояния persist-key persist-tun # Уровень логирования verb 3
4. Настройка маршрутизации (iptables)
Создайте скрипт, который будет включаться при старте VPN и настраивать форвардинг трафика:
root@srv:~# vi /etc/openvpn/server/add-bridge.sh
Вставьте следующий код (замените enp1s0 на имя вашего сетевого интерфейса, смотрящего в локальную сеть):
#!/bin/bash
IF=enp1s0
VPNIF=tun0
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i ${VPNIF} -j ACCEPT
iptables -t nat -A POSTROUTING -o ${IF} -j MASQUERADE
Создайте скрипт для очистки правил при остановке:
root@srv:~# vi /etc/openvpn/server/remove-bridge.sh
#!/bin/bash
IF=enp1s0
VPNIF=tun0
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -D FORWARD -i ${VPNIF} -j ACCEPT
iptables -t nat -D POSTROUTING -o ${IF} -j MASQUERADE
Сделайте оба скрипта исполняемыми:
root@srv:~# chmod 700 /etc/openvpn/server/{add-bridge.sh,remove-bridge.sh}
5. Запуск сервиса
Чтобы systemd автоматически выполнял скрипы настройки сети, создайте override для сервиса:
root@srv:~# systemctl edit openvpn-server@server
Добавьте в открывшийся редактор следующие строки:
[Service] ExecStartPost=/etc/openvpn/server/add-bridge.sh ExecStopPost=/etc/openvpn/server/remove-bridge.sh
Сохраните файл и запустите сервис:
root@srv:~# systemctl enable --now openvpn-server@server
6. Файлы для клиента
Передайте клиенту по защищенному каналу следующие файлы:
ca.crtta.keyclient1.crtclient1.key

