ifconfig-push: адрес пира в net30 или маска подсети в subnet?
Второй аргумент ifconfig-push — это адрес пира в net30 и маска подсети при topology subnet. Сравните работающую топологию, прежде чем править файл CCD.
Динамические клиенты подключаются и маршрутизируются нормально, но единственный клиент с фиксированным адресом вообще не достигает сервера. В брандмауэре ничего не менялось, а строка CCD выглядит правдоподобно. Обычная причина — второй аргумент, написанный для другой топологии TUN, не той, что использует сервер. Отказ тихий: клиент поднимается с адресом, и сервер принимает соединение, но трафик не проходит.
В net30 это поле — адрес пира; в subnet это маска подсети. Две формы являются альтернативами, а не последовательностью.
Две формы рядом
В традиционном развёртывании net30 каждый клиент владеет блоком /30: адрес сети, два пригодных адреса и широковещательный адрес. ifconfig-push принимает адрес клиента и адрес пира, а пир — это второй пригодный адрес в том же блоке, используемый серверной стороной соединения точка-точка.
# net30: client address and its peer
ifconfig-push 10.99.0.6 10.99.0.5
# topology subnet: client address and the pool netmask
ifconfig-push 10.99.0.20 255.255.255.0
При topology subnet клиент делит одну подсеть с сервером, и та же директива принимает адрес и маску подсети. Собственный адрес сервера берётся из директивы server, а не из второго поля. Смешение форм даёт клиента, который считает, что находится в соединении точка-точка, тогда как сервер маршрутизирует его как хост подсети, или наоборот. Поэтому маску подсети никогда нельзя сочетать с net30.
Обе строки в блоке — отдельные строки для файла CCD. Один клиент получает ровно одну из них.
Прочитайте топологию, которую сервер действительно использует
Читайте работающую конфигурацию, а не значение по умолчанию из пакета, потому что топология могла быть задана годы назад и скопирована дальше. Ищите topology subnet или его отсутствие, затем проверьте, как строка server распределяет адреса. Конфигурация, которая вообще не упоминает топологию, не то же самое, что задающая subnet.
Затем прочитайте настройки, полученные клиентом. Адрес, маска и пир, которые он сообщает, показывают, какую интерпретацию применил сервер.
Держите фиксированный адрес вне динамического пула
Фиксированный адрес должен находиться вне динамического пула, иначе двум клиентам может достаться один и тот же адрес. При топологии subnet nopool в строке server подавляет автоматический пул, а явный диапазон ifconfig-pool определяет, что получают динамические клиенты.
dev tun
topology subnet
server 10.99.0.0 255.255.255.0 nopool
ifconfig-pool 10.99.0.100 10.99.0.210 255.255.255.0
client-config-dir /etc/openvpn/ccd
Сервер забирает 10.99.0.1 себе, а фиксированный адрес клиента находится вне диапазона пула. Файл CCD называется по действующему идентификатору клиента, а не по имени файла профиля, и не имеет дополнительного расширения. Если username-as-common-name активен, идентификатором для сопоставления служит аутентифицированное имя пользователя. Два устройства с одним идентификатором будут делить и фиксированный адрес, что является проблемой политики, а не маршрутизации.
Проверьте назначение, которое клиент действительно получил
Переподключите нужного клиента и подтвердите, какой файл CCD был выбран, прежде чем проверять что-либо ещё. Затем проверьте адрес, маску или пира и маршрут обратно к серверу. Клиент, показывающий адрес пира при развёртывании subnet, всё ещё использует неправильную форму.
Смена топологии затрагивает каждого клиента и каждое переопределение, поэтому относитесь к ней как к миграции, а не как к починке одного клиента. Исправление статической строки под уже используемую топологию обычно является меньшим изменением. Справочник server-options описывает помощник и переопределения для конкретных клиентов.