2026-05-21 10:30:07 +00:00

Схема следующа. OpenVPN-сервер находится в РФ, к нему подключаютсся клиенты, а также шлюз, через который идёт весь трафик. Обязательно использование режима DCO (Data channel offloading) для OpenVPN-интерфейсов клиента и шлюза, т.к. при включении этого режима производительность увеличивается драматически. Поэтому использование готовых скриптов типа github/angristan нам не подходит, будем поднимать всё ручками. Для начала нам нужно два сервера - в РФ и в забугорище. Оба подготавливаем идентично:

apt update && apt dist-upgrade -y

Если произошёл апгрейд ядра, нужно обязательно перезагрузиться, т.к. в дальнейшем мы будем устанавливать расширения ядра.

reboot

Когда перезагрузились, устанавливаем необходимые пакеты:

apt install -y openvpn openvpn-dco-dkms easy-rsa

Далее включаем модуль openvpn-dco:

modprobe ovpn-dco-v2

Проверяем, включилось ли:

lsmod | grep ovpn

Если вывод пуст, разбираемся. Если вывод что-то типа

ovpn_dco_v2 86016 0 ip6_udp_tunnel 16384 1 ovpn_dco_v2 udp_tunnel 32768 1 ovpn_dco_v2 То всё хорошо, можно примменять на постоянку:

echo "ovpn-dco-v2" | sudo tee -a /etc/modules
update-initramfs -u -k all

Можно ещё раз перезагрузиться и проверить наличие dco-модуля после перезагрузки lsmod | grep ovpn

Теперь приступим к настройке OpenVPN-сервера. Инициализируем инфраструктуру открытых ключей и выпускаем сертификат сервера (без паролей для автозапуска):

make-cadir ~/openvpn-ca && cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh

# Генерация и подписание ключей сервера
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# Генерация секретного ключа защиты от сканирования (TLS-Crypt)
openvpn --genkey secret tls-crypt.key

Копируем ключи в рабочую директорию OpenVPN-сервера:

cp pki/ca.crt pki/dh.pem pki/issued/server.crt pki/private/server.key tls-crypt.key /etc/openvpn/server/

Создаём конфиг сервера:

nano /etc/openvpn/server/server.conf

Вставляем следующее содержимое:

dev tun
proto udp
port 1194
server 10.210.0.0 255.255.255.0
topology subnet

# Сертификаты и секреты
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
tls-crypt /etc/openvpn/server/tls-crypt.key

# Максимальная скорость (Только AES-128-GCM, без сжатия)
data-ciphers AES-128-GCM
data-ciphers-fallback AES-128-GCM

# Логирование (минимум операций, разгрузка CPU)
verb 1
mute 20

# Тайм-ауты и папка индивидуальных настроек
keepalive 10 120
persist-key
persist-tun
client-config-dir /etc/openvpn/server/ccd

# Маршрут по умолчанию для клиентов
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"

Далее необходимо создать на сервере конфиг, в котором описаны директивы, затрагивающие конкретный клиент. Имя такого файла должно соответствовать сертификату клиента (без расширения) и находиться в client-config-dir (у нас /etc/openvpn/server/ccd). Это аналог Client Specific Overrides в pFsense. В нашем случае таким клиентом будет шлюз в забугорище. Присвоим ему адрес в конце нашего диапазона и обязательно отменим перенаправление трафика в туннелль:

sudo mkdir -p /etc/openvpn/server/ccd
echo "ifconfig-push 10.210.0.254 255.255.255.0" | sudo tee /etc/openvpn/server/ccd/special-gateway
echo 'push-remove "redirect-gateway def1 bypass-dhcp"' | sudo tee -a /etc/openvpn/server/ccd/special-gateway
ip -details link show dev tun0
Description
No description provided
Readme 169 KiB
Languages
Shell 100%