FreeBSD: Назначение статических IP-адресов клиентам OpenVPN

OpenVPN Данная заметка является дополнением к статье Настройка OpenVPN с использованием сертификатов X.509 и описывает назначение статических IP-адресов клиентам OpenVPN. Этот вопрос уже обсуждался в комментариях к вышеназванной статье, однако, посетители сайта не перестают задавать его.

Назначение статических IP-адресов клиентам OpenVPN облегчает организацию систем учета трафика и упрощает настройку брандмауэра сервера OpenVPN как в направлении ограничения прав доступа к сетевым службам, так и в направлении управления полосой пропускания.
Назначение статических IP-адресов клиентам OpenVPN описано в HOWTO, не представляет каких-либо сложностей и не требует изменения файлов конфигурации клиентского программного обеспечения. Процедура назначения статических IP-адресов клиентам OpenVPN состоит в добавлении строки ifconfig-push <IP-адрес клиента> <IP-адрес сервера> в файлы конфигурации клиентов, которые содержат команды, выполняемые сервером при подключении клиентов, и находятся в папке /usr/local/etc/openvpn/ccd (определяется параметром client-config-dir файла конфигурации сервера OpenVPN). Выбранные пары IP-адресов, во-первых, должны быть уникальными, во-вторых, должны входить в состав последовательных подсетей, ограниченных маской /30 (255.255.255.252), и, в-третьих, должны находиться в пределах пула IP-адресов, выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). С учетом перечисленных условий для клиентов и сервера подойдут пары IP-адресов со следующими парами последних октетов:

[  1,  2]   [  5,  6]   [  9, 10]   [ 13, 14]   [ 17, 18]   [ 21, 22]   [ 25, 26]   [ 29, 30]   [ 33, 34]   [ 37, 38] 
[ 41, 42]   [ 45, 46]   [ 49, 50]   [ 53, 54]   [ 57, 58]   [ 61, 62]   [ 65, 66]   [ 69, 70]   [ 73, 74]   [ 77, 78] 
[ 81, 82]   [ 85, 86]   [ 89, 90]   [ 93, 94]   [ 97, 98]   [101,102]   [105,106]   [109,110]   [113,114]   [117,118] 
[121,122]   [125,126]   [129,130]   [133,134]   [137,138]   [141,142]   [145,146]   [149,150]   [153,154]   [157,158] 
[161,162]   [165,166]   [169,170]   [173,174]   [177,178]   [181,182]   [185,186]   [189,190]   [193,194]   [197,198] 
[201,202]   [205,206]   [209,210]   [213,214]   [217,218]   [221,222]   [225,226]   [229,230]   [233,234]   [237,238] 
[241,242]   [245,246]   [249,250]   [253,254] 

Рассмотрим процедуру назначения статических IP-адресов клиентам OpenVPN на примере виртуальной частной сети, которая была описана в статье Настройка OpenVPN с использованием сертификатов X.509:

Схема виртуальной частной сети

Для назначения филиалу №1 статического адреса 10.0.0.1 необходимо добавить в файл /usr/local/etc/ccd/client1 строку:

ifconfig-push 10.0.0.1 10.0.0.2

Для назначения филиалу №2 статического адреса 10.0.0.5 необходимо добавить в файл /usr/local/etc/ccd/client2 строку:

ifconfig-push 10.0.0.5 10.0.0.6

Для назначения сисадмину статического адреса 10.0.0.9 необходимо добавить в файл /usr/local/etc/ccd/client3 строку:

ifconfig-push 10.0.0.9 10.0.0.10

После редактирования файлов конфигурации клиентов необходимо перезапустить сервер OpenVPN командой /usr/local/etc/rc.d/openvpn restart. При этом произойдет переподключение всех активных клиентов и назначение им IP-адресов, которые были заданы выше.

Понравилась статья?

Подпишитесь на RSS или почтовую рассылку;

Присоединяйтесь в Twitter, Facebook, Google+, VK;

Поделитесь ссылкой в социальной сети или блоге:

13 комментариев к “FreeBSD: Назначение статических IP-адресов клиентам OpenVPN

  1. нагляднее получается, если в файле server.conf вставить строку

    ifconfig-pool-persist /usr/local/etc/openvpn/ipp.txt 0

    и в файле написать

    имя_сертификата,(!)адрес
    samara1,10.6.63.6
    samara2,10.6.63.10
    samara3,10.6.63.14
    samara4,10.6.63.18
    samara5,10.6.63.22
    samara6,10.6.63.26

      • Я только не указал, что использую сертификаты .p12 (PKCS12 — это архив из трех сертификатов. На FreeBSD они создаются командой build-key-pkcs12). Например:

        build-key-pkcs12 samara1

        у клиента в файле client.ovpn пишу:

        pkcs12 vds\\samara1.p12

        • Я привык делать по-страринке. Обязательно попробую настроить следующую VPN с помощью этих скриптов.

  2. Sergey, спасибо за примечание, попробовал вчера у себя — работает.
    SergeySL, почитал только что man , там пишут что параметр, рекомендуемый Sergey’ем не гарантирует получение одного и того же адреса конкретному клиенту. И советуют пользоваться именно вашим методом, «по-старинке». Вот такие дела.

    • Обычно я отказываюсь от «старинки» только тогда, когда ее функционал перестает устраивать, и обновление решает эту проблему. В случае OpenVPN пока все устраивает, поэтому я все еще не добрался до скриптов автоматической генерации сертификатов.

  3. Добрый!
    Обратная ситуация — нужно выдать динамические IP-адреса клиентам. Со статикой всё работает.
    Убираю в /ccd/client строку ifconfig-push 10.0.0.5 10.0.0.6, и всё равно выдаётся 10.0.0.5.

    Подскажите, что делать?

    • Разобрался, нужно было в openvpn.conf добавить строку duplicate-cn — позволяет соединиться многочисленным клиентам с одним и тем же именем, сертификатом и ключом.

  4. Здравствуйте!
    Прошу вашей помощи в таком вопросе. Сервер openvpn на ОС centos. Стоит задача закрыть доступ в сеть бывшему сотруднику, у которого имеются дома все сертификаты. Есть множество рабочих станций, то есть перебивать всем сертификаты нереально. Подскажите, что можно сделать.

  5. Недавно перенастраивал OpenVPN на рабочем сервере и обратил внимание на такую особенность назначения статических адресов для клиентов:
    Синтаксис директивы ifconfig-push зависит от используемого параметра topology. По умолчанию в последних версиях используется, как я понимаю, topology subnet, а для неё в клиентском файле указывается директива в форме ifconfig-push адрес маска-подсети (например, ifconfig-push 10.0.0.5 255.255.255.224).

    Для успешного использовании рекомендованных у вас директив формата ifconfig-push адрес адрес необходимо указать конкретное значение topology (отличное от subnet) в конфигурации сервера server.conf (для нынешней версии OpenVPN 2.4.4). В противном случае сервер будет молчаливо применять topology subnet и при вашей конфигурации клиента пропихивать клиенту команду типа ifconfig tun0 inet 10.0.0.5 netmask 10.0.0.6, что приведет к нерабочему соединению на компьютере или отсутствию соединения на DD-WRT.

    (Впрочем, на клиентской стороне мне удалось это дело исправить простым вводом нужной команды ifconfig tun0 inet 10.0.0.5 netmask 255.255.255.0, после чего смог залогиниться на сервер по адресу 10.0.0.1 и исправить клиентские файлы. Сервер для ЭТОГО перезапускать не понадобилось, так как топология меня устраивала и такая.)

    • Добрый день!
      В настоящее время я использую OpenVPN 2.4.0 (смогу обновить не раньше начала следующего года). Версия 2.4.0 поддерживает опцию topology subnet, но она не задана по умолчанию, поэтому пока все работает. Я не знаю, как ведут себя более свежие версии OpenVPN, поэтому Ваш комментарий очень даже кстати. Спасибо за полезную информацию!
      P.S.: Если получится, после замены сервера и установки актуальных версий программного обеспечения напишу еще одну статью про OpenVPN, учитывающую создание сертификатов с помощью easy-rsa, применение актуальных алгоритмов шифрования и прочие изменения, произошедшие за последние годы.

Оставить комментарий