Вопрос или проблема
У меня есть пара OPNSense с серверами OpenVPN, настроенными для высокой доступности с DUO. Система и ее компоненты обновлены на сегодняшний день.
Каждый раз, когда я быстро отключаюсь и подключаюсь к Wi-Fi, имитируя достаточные потери пакетов, что также происходит с нашими клиентами с нестабильным интернет-соединением, я получаю новый IP-адрес, а старый все еще остается в системе. Не нужно объяснять, что для большего числа пользователей /24 сеть, которую я настроил для VPN подсети, быстро исчерпывается.
Я пытался добавить следующее по одному и все сразу в файл клиента ovpn: ip-win32 dynamic 10
(10 секунд только для отладки), persist-local-ip
, persist-remote-ip
, explicit-exit-notify 3
, также установил persist-remote-ip
в конфигурации сервера.
Может ли сервер быть настроен на освобождение неиспользуемых IP-адресов, если они больше не используются? Или на восстановление ранее использованного IP в случае отключения / повторного подключения, если он все еще доступен? Разве один из вариантов, которые я пробовал и упомянул выше, не должен был делать что-то подобное?
Или единственное решение здесь — настроить более крупную сеть, например, /16? Максимальное количество пользователей может достигать 100 одновременно. Даже если они теряют несколько пакетов, пул IP адресов исчерпается быстрее, чем освободится.
Дополнительная информация о сервере, которую я только что оформил в код: TUN type, subnet topology, /24 network for the clients, split tunnel, reneg time 72000
(мы не хотим блокировок DUO), duplicate-cn, persist-remote-ip, route-nopull, UDP
. Я могу предоставить больше информации или деталей файла ovpn тоже. Ничего слишком специфичного, конечно.
Что ж. После того как моя (левая) рука не знала, что делает правая рука (мой коллега), и пройдя через настройки сервера, я понял, что теперь есть опция, которой не было, когда я изначально настраивал сервер, а именно “Username as CN
“, которая позволяет использовать уникальный CN, и клиент не будет отправлять CN из сертификата. Я не проверял это раньше, потому что этого не было, так что моим решением было разрешить “duplicate-cn
“.
Суть в том, что отметив “Username as CN
” (видно только в расширенном режиме), удалив “duplicate-cn
“, и добавив “persist-remote-ip
” в выпадающем меню “Options”, все заработало. Независимо от того, прерывается ли соединение резко, неожиданно или с помощью кнопки отключения, клиент не получит совершенно новый и все еще свободный IP-адрес, а вернет свой старый. Недостатком является то, что одновременно может подключаться только одно устройство на пользователя. Что вполне устраивает в моей среде.
Ответ или решение
Как освобождать неиспользуемые IP-адреса в OpenVPN Connect
Ваша проблема с исчерпанием IP-адресов в OpenVPN решается несколькими способами, и вы уже приближаетесь к решению. Давайте рассмотрим подходы для управления использованием IP-адресов в вашей конфигурации OpenVPN.
1. Опции для управления IP-адресами
-
Опция
persist-remote-ip
: Эта опция помогает сохранить IP-адреса за клиентами при переподключении. Убедитесь, что она включена как на сервере, так и на клиенте. -
Опция
duplicate-cn
: Если включена, это позволяет нескольким клиентам использовать один и тот же CN. Это может привести к исчерпанию IP-адресов, особенно если у вас много клиентов. Вы решили эту проблему, отключивduplicate-cn
и воспользовавшись опцией "Username as CN". Это подходящий шаг, поскольку теперь каждый клиент получает уникальный IP. -
Опция
persist-local-ip
: Непосредственно не решает проблему, но может быть полезной в некоторых сценариях. Эта опция позволяет клиенту сохранить свой локальный IP при переподключении. -
Опция
explicit-exit-notify
: Эта опция может помочь при отключении клиентов, тем самым позволяя серверу быстрее освобождать IP-адреса.
2. Настройка сервера
Для вашего случая оптимальными будут следующие настройки:
-
Проверьте опцию "Username as CN" (доступна в расширенном режиме) и убедитесь, что она включена. Это позволяет уникально идентифицировать каждого пользователя, предотвращая конфликты.
-
Установите регистр IP-адресов, чтобы отслеживать использование IP-адресов. Это позволит вам определить, сколько адресов находится "в свободном доступе".
-
Периодически проверяйте конфигурацию сервера на наличие утечек памяти или зависаний, которые могут приводить к задержке освобождения адресов.
3. Увеличение диапазона IP-адресов
Если даже после всех корректировок вы сталкиваетесь с нехваткой адресов, рассмотрите возможность увеличения подсети, например, до /24 или /16, чтобы обеспечить большее количество доступных IP-адресов.
4. Мониторинг и диагностика
Регулярный мониторинг сети и зарегистрированных IP-адресов может помочь выявить, какие клиенты остаются подключенными дольше. Это поможет вам определить, действительно ли ваши настройки решают проблему.
Заключение
Надеюсь, приведенные рекомендации помогут вам оптимизировать использование IP-адресов в OpenVPN. Ваша конфигурация с "Username as CN" и отключение duplicate-cn
— это правильный шаг. Убедитесь, что ваши клиенты настроены должным образом, и контролируйте использование IP-адресов для последующей оптимизации сети. Если ваши требования увеличатся, не стесняйтесь рассмотреть увеличение подсети в соответствии с вашим реальным трафиком.