Openvpn исключает ip в пуле

У меня есть сервер OpenVPN, работающий в Linux Ubuntu. Несколько клиентов подключаются к этому серверу (500+), и именно поэтому я устанавливаю параметр server-bridge следующим образом:

server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.210.254 

Это прекрасно работает. Клиенты получают динамический IP-адрес, и он переходит от блока 200 к блоку 201, когда число клиентов превышает 255.

У меня есть внутреннее приложение, которое подключается к этим клиентам, но это приложение выходит из строя на IP-адресах 10.0.200.255 и 10.0.201.0.

Эти IP-адреса находятся в диапазоне, который я поставил, но я не могу их использовать.

Есть ли способ исключить их из моего пула?

Или мне нужно изменить настройки?

Использование нескольких диапазонов IP-адресов или исключение определенных IP-адресов напрямую невозможно с помощью встроенного DHCP-сервера OpenVPN с использованием одного файла конфигурации.

Я предлагаю 3 возможных решения:

  • Обходной путь , но не гарантированный
  • Режим DHCP-прокси , простой, чистый и множество других опций
  • Несколько экземпляров , более сложных, могут иметь преимущества в производительности

Однако я рекомендую исправить основную причину проблемы, внутреннее приложение, которое является ошибочным.

Временное решение

В файле конфигурации сервера добавьте:

 server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.210.254 ifconfig-pool-persist ipp.txt 0 

0 в конце директивы ifconfig-pool-persist ipp.txt рассматривает ipp.txt как файл конфигурации только для чтения.

Создайте файл /etc/openvpn/ipp.txt :

 reserved-not-used-cn-1,10.0.200.255 reserved-not-used-cn-2,10.0.201.0 reserved-not-used-cn-3,10.0.201.255 ... 

Добавьте все зарезервированные IP-адреса в этот файл, отформатированные как <Common-Name>,<IP-address> . Для значения в поле <Common-Name> выберите то, что никогда не будет использоваться в любом клиентском сертификате.

Это не гарантируется всегда, как указано в man-странице OpenVPN:

Обратите внимание, что записи в этом файле обрабатываются OpenVPN только в качестве предложений только на основе прошлых ассоциаций между общим именем и IP-адресом. Они не гарантируют, что данное общее имя всегда будет получать данный IP-адрес. Если вам требуется гарантированное задание, используйте --ifconfig-push

Режим DHCP-прокси

Поскольку вы используете настройку TAP , это может быть лучшим решением. Он позволяет использовать полнофункциональный DHCP-сервер в подсети на стороне сервера или на самом сервере, в зависимости от конфигурации. Чтобы настроить Ethernet-мосты, вы должны сначала использовать возможности моста вашей ОС для соединения интерфейса TAP с другим интерфейсом.

Конфигурация сервера OpenVPN :

 server-bridge 

Эта директива расширяется следующим образом:

 mode server tls-server push "route-gateway dhcp" 

Конфигурация сервера DHCPD :

 subnet 10.0.100.1 netmask 255.255.0.0 { range 10.0.200.1 10.0.200.254; range 10.0.201.1 10.0.201.254; range 10.0.202.1 10.0.202.254; range 10.0.203.1 10.0.203.254; ... } 

Несколько экземпляров

Альтернативой было бы создать отдельный экземпляр openvpn для каждой /24 подсети, используя несколько файлов конфигурации. Но для этого требуется использовать другой порт для каждого экземпляра.

Файл конфигурации экземпляра 1:

 port 11941 server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.200.254 

Файл конфигурации экземпляра 2:

 port 11942 server-bridge 10.0.100.1 255.255.0.0 10.0.201.1 10.0.201.254 

Это потребует:

  • либо специфичные для IP-конфигурации клиента с соответствующими номерами портов,
  • или, например, использовать балансировку нагрузки iptables для входящих соединений на порте 1194 и равномерно распределять их по всем экземплярам

Это решение может иметь преимущества в производительности, как описано здесь .