
У меня есть сервер OpenVPN, работающий на Linux Ubuntu box. К этому серверу подключается несколько клиентов (более 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-адреса находятся в указанном мной диапазоне, но я не могу их использовать.
Есть ли способ исключить их из моего пула?
Или мне нужно изменить настройки?
решение1
Использование нескольких диапазонов 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
как файл конфигурации, доступный только для чтения.
Создайте файл /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>
выберите то, что никогда не будет использоваться ни в одном клиентском сертификате.
Как указано на странице руководства OpenVPN, это не гарантируется всегда:
Обратите внимание, что записи в этом файле рассматриваются OpenVPN только как предложения, основанные на прошлых ассоциациях между общим именем и IP-адресом. Они не гарантируют, что данное общее имя всегда получит данный IP-адрес. Если вы хотите гарантированное назначение, используйте
--ifconfig-push
Режим DHCP-прокси
Так как вы используетеКРАНнастройка, это может быть лучшим решением. Это позволяет использовать полнофункциональный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
и равномерно распределять их по всем экземплярам
Это решение может иметь преимущества в производительности, как объясненоздесь.