Настройка OpenVPN Client-Config-Dir (CCD): статические IP и маршруты
- Клиенты OpenVPN получают случайные IP-адреса из пула при каждом новом подключении.
- Центральный сервер не видит локальную подсеть за подключенным OpenVPN-клиентом (Site-to-Site режим).
- Ошибка в логах сервера:
MULTI: no route to receive address from client. - Игнорирование персональных конфигураций из каталога
client-config-dirиз-за несовпадения Common Name (CN).
1. Архитектура механизма Client-Config-Dir (CCD)
Механизм CCD позволяет серверу OpenVPN при аутентификации клиента считывать файл конфигурации, имя которого в точности совпадает с Common Name (CN) сертификата клиента. Это позволяет передавать индивидуальные статические IP, персональные маршруты (push route) и регистрировать подсети филиалов внутри виртуального маршрутизатора OpenVPN (директива iroute).
2. Настройка серверной части (/etc/openvpn/server.conf)
# Включение каталога индивидуальных настроек клиентов
client-config-dir /etc/openvpn/ccd
# Базовая сеть туннеля
server 10.8.0.0 255.255.255.0
topology subnet
# Регистрация маршрута к подсети филиала в таблице ядра сервера
route 192.168.30.0 255.255.255.03. Создание персонального файла клиента в каталоге CCD
Создайте файл /etc/openvpn/ccd/branch-office-spb (имя файла должно строго совпадать с CN сертификата):
# 1. Назначение фиксированного IP клиенту в топологии subnet
ifconfig-push 10.8.0.50 255.255.255.0
# 2. Сообщение внутреннему роутеру OpenVPN, что подсеть 192.168.30.0/24 находится за этим клиентом
iroute 192.168.30.0 255.255.255.0
# 3. Передача индивидуальных маршрутов только этому клиенту
push "route 172.16.0.0 255.255.0.0"
push "dhcp-option DNS 10.8.0.1"4. Настройка прав доступа
chmod 750 /etc/openvpn/ccd
chmod 640 /etc/openvpn/ccd/*
chown -R root:openvpn /etc/openvpn/ccd5. Включение форвардинга трафика в ядре сервера
# Активация IP Forwarding
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-openvpn-forward.conf
sysctl --system
# Разрешение транзитного трафика в iptables
iptables -A FORWARD -s 10.8.0.0/24 -d 192.168.30.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.30.0/24 -d 10.8.0.0/24 -j ACCEPT Частые вопросы (FAQ)
В чем разница между директивами 'route' и 'iroute'?
Директива 'route' добавляет маршрут в таблицу маршрутизации самой операционной системы Linux. Директива 'iroute' (Internal Route) регистрирует маршрут во внутренней таблице демона OpenVPN, чтобы он знал, какому именно подключенному клиенту адресовать этот пакет.
Почему настройки из файла CCD не применяются к клиенту?
Проверьте CN сертификата клиента через openssl x509 -in client.crt -noout -subject. Имя файла в каталоге ccd должно точно совпадать со значением CN с учетом регистра символов.
Какую топологию сети следует использовать в modern OpenVPN?
Всегда используйте 'topology subnet'. Устаревшая топология 'net30' выделяет виртуальные подсети по 4 адреса на каждого клиента и сложна в расчете статических IP.
Можно ли полностью запретить клиенту доступ в интернет через CCD?
Да, в файле CCD можно переопределить опцию redirect-gateway, убрав push дефолтного шлюза, или применить специфические правила iptables для IP-адреса данного клиента.