OpenVPN client-config-dir: имя файла и CN сертификата
Имя файла CCD берётся из общего имени сертификата или из имени пользователя, когда включено это сопоставление. Сравните оба правила, прежде чем переименовывать файл.
Два имени участвуют ещё до подключения клиента: имя файла на ноутбуке (nuc.ovpn) и идентичность, которую сервер выводит из учётных данных. Поиск в client-config-dir использует вторую. Переименование профиля на клиенте или добавление .conf к файлу на сервере ничего не меняет в том, какой файл откроет сервер.
Полезное сравнение — не «какое имя я использовал», а «какое правило применяет сервер», потому что аутентификация по сертификату и аутентификация по имени пользователя и паролю могут давать разные действующие имена при одном и том же входе.
Имя профиля и общее имя сертификата
В стандартной конфигурации на основе сертификатов сервер берёт общее имя X.509 и ищет файл ровно с таким именем внутри client-config-dir. Профиль с именем nuc.ovpn, в сертификате которого указано tester, разрешается в /etc/openvpn/server/ccd/tester. Имя клиентского файла никогда не участвует в вычислении. Это первое место, где прячется несоответствие.
Поэтому каталог, полный аккуратно названных профилей, может промахиваться каждый раз. Файл сопоставляется не по subject, не по адресу электронной почты и не по имени в графическом интерфейсе, а по строке общего имени.
В файловой системе, различающей регистр, Tester и tester — два разных файла, и открывается только один. Проверяйте общее имя в сертификате, который клиент действительно предъявляет, а не в копии из своих заметок.
username-as-common-name переворачивает правило
Когда сервер выполняет аутентификацию по имени пользователя и паролю с параметром username-as-common-name, аутентифицированное имя пользователя заменяет общее имя сертификата для этого поиска.
Сравните два случая напрямую: при идентичности из сертификата файл следует за сертификатом, и смена пароля не важна; при идентичности из имени пользователя файл следует за именем входа, и перевыпуск сертификата не важен. Поле, которое подставляет сервер, и определяет, по какому имени переименовывать. Перевыпущенный сертификат с новым CN молча меняет цель поиска, а старый файл CCD остаётся на диске и выглядит правильным.
Бывают смешанные конфигурации, и именно там начинается большая часть путаницы. Если один блок службы включает подстановку, а другой нет, действующее имя зависит от того, какой экземпляр обслужил соединение. Подтверждайте активную конфигурацию, а не предполагайте, что действует глобальный файл. Исходный справочник по серверным параметрам описывает поиск по названному файлу и необязательный резервный вариант.
Что сервер читает и что молча пропускает
Выбор файла решают два небольших отличия. Первое — добавленное расширение. Второе — случайный символ в имени.
OpenVPN не добавляет .conf к имени, которое ищет, поэтому tester.conf не совпадает с tester. Редактор, скрывающий расширения, может оставить файл, который в списке выглядит правильно и никогда не совпадает.
Если подходящего файла нет, сервер может перейти к файлу с именем DEFAULT. Поэтому приход части настроек не доказывает, что использовался файл для конкретного клиента. Сравните выданный адрес или протолкнутые маршруты с тем, что дал бы файл для конкретного клиента. Третий фильтр — права, потому что сервер открывает файл после отказа от привилегий; оболочка root, которая может его прочитать, ничего не доказывает.
Правильное имя файла не подтверждает содержимое
Выбор и содержимое — разные сбои. После открытия нужного файла его директивы всё ещё должны быть допустимы для этого клиента.
ifconfig-push должен выдать адрес, который топология действительно может использовать, а iroute имеет смысл только для маршрутизируемой подсети за этим клиентом.
Одна идентичность, несколько устройств
Два ноутбука с одинаковым общим именем выбирают один и тот же файл и получают одни и те же настройки для конкретного клиента. Если нужны отдельные адреса или отдельный отзыв, нужны отдельные идентичности, а не две копии одного файла.
Сравнение идёт между совместным использованием идентичности и выпуском отдельного сертификата на устройство. Совместное использование проще администрировать и грубее отзывать, а сертификаты на устройство требуют больше настройки и дают чистую единицу для отключения.