Я уже не раз рассказывал как сконфигурировать собственный OpenVPN сервер. Пользователи подключаются по сертификатам и им динамически выдаются свободные ip-адреса из заданного диапазона. Встала задача выдавать некоторым клиентам постоянные ip-адреса, чтобы была возможность подключаться к ним тоже.
Собственно, решается это довольно просто, если знать как. В файл конфигурации сервера OpenVPN нужно добавить буквально пару строк:
- client-to-client — разрешаем клиентам видеть друг-друга в сети
- ifconfig-pool-persist ipp.txt — наличие этой строки указывает, что перед тем как выдать клиенту свободный адрес из пула, сервер должен свериться с файлом ipp.txt, в котором прописывается привязка имени пользователя к ip-адресу.
Файл ipp.txt должен иметь следующий формат:
username1, username2 и username3 соотвествуют именам выданных сертификатов пользователей.
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.
Комментариев: 4
- 2019-05-07 в 08:36:26 | vladimir
Это все хорошо и правильно. Только не забывайте, что перед редактированием ipp.txt надо остановить сервис service openvpn stop , а после редактирования не забыть service openvpn start. Попытка отредактировать при запущенном сервисе приводит к тому, что на экране все красиво, но после openvpn restart все возвращается на круги своя со старым ipp.txt. 🙂
Не работает почему-то. После включения сервера, он снова назначает адреса какие ему вдумается и перезаписывает ipp.txt, причем не теми адресами которые он назначил. В общем бред какой-то. в чем смысл тогда
Подтверждаю — не работает. OpenVPN 2.4.7. Присваивает адреса какие попало, явочным порядком. ipp.txt вообще вычищает, только название остается. Есть и другие способы зафиксировать адреса клиентов, и они точно так же не работают. Смиритесь. Что-то OpenVPN делает хорошо, а что-то он не будет делать никогда.
Вру. Всё-таки сработал способ через параметр
Объявляете эту директорию в конфиге сервера, а потому в эту директорию помещаете конфигурационные файлы клиентов. Но не те, которые на самих клиентах должны быть, а специальные. Например, имя файла «Client», расширения нет, внутри:
ifconfig-push 192.168.4.10 192.168.4.9
iroute 192.168.0.0 255.255.255.0
Имя файла совпадает с именем клиента, как указывал автор статьи. Ну и кладется этот файл в директорию, которую объявили в конфиге сервера. У меня не сразу, но сработало.
Зачастую требуется, чтобы удаленные клиенты, подключаясь к VPN-серверу (будь то openvpn, IPSec или что-то еще) постоянно получали одни и те же адреса внутри туннеля. Такая потребность возникает когда нужно обеспечить непрерывный мониторинг клиентских ПК, если эти клиентские ПК, например, являются платежными терминалами, с установленными Windows Embedded. Благодаря подобной привязке можно в том же Nagios указать, что 10.10.220.10 — это адрес платежного терминала расположенного по адресу Пушкинская, д.20, а 10.10.220.15 — терминала, расположенного на Некрасова, д.14.
Итак, в OpenVPN за назначение адресов клиентам, равно как и самому серверу, отвечает следующая строчка файла server.conf:
server 10.10.220.0 255.255.255.0
Так, сервер получит первый адрес подсети, 10.10.220.1, а клиенты — свободные адреса из пула. При использовании tun-интерфейса клиенты будут получать адреса 10.10.220.4, 10.200.220.8, 10.200.220.12 и т.д.
Нужно, чтобы Клиент_1 всегда получал адрес 10.10.220.12, а Клиент_2 всегда получал адрес 10.10.220.16. Для этого в server.conf OpenVPN есть/должна быть такая строчка:
ifconfig-pool-persist ipp.txt
Она указывает, что прежде чем раздавать клиентам свободные адреса из пула, сервер должен заглянуть в файл ipp.txt и посмотреть, нет ли для того или иного клиента привязки его имени к IP-адресу. Если такая привязка есть — нужно взять адрес из этого (ipp.txt) файла и назначить его клиенту.
Так как взаимная аутентификация сервера и клиента осуществляется по 802.1x серификатам, целесообразно привязывать IP адрес к сертификату. Для привязки сертификата берется атрибут CN (common name) поля Subject сертификата клиента. Т.е., если в сертификате клиента поле Subject выглядит так:
E = admin@sommail.ru
CN =Client_01
OU = somedep
O = SomeOrg Inc.
L = Saint-Petersburg
C = RU
то запись для Клиента_1 в файле ipp.txt будет выглядеть так: Client_01,10.10.220.12
Соответственно, весь файл для обозначенной задачи будет содержать две строчки:
Client_01,10.10.220.12
Client_01,10.10.220.16
На самом деле, в данном случае, т.к. клиенты представляют собой терминалы на Windows Embedded и используется технология net30, они (клиенты) получат в последнем октете не 12 и 16, а 14 и 18 соответственно, но на практике это не принципиально, т.к. важно то, что (14 и 18) адреса клиенты будут получать постоянно.
Здравствуйте! Товарищ просит помощи, я ничего не понял.
Конфиг OpenVPN -сервера, работает под Windows Server 2012R2.
Файл ipp.txt примерно такой, там еще 15 филиалов
Проблема в том, что спустя какое-то время в этот файл в рандомное место (. ) дублируются те же филиалы, но с другими IP адресами, старые при этом не удаляются (. ). В итоге ломается весь обмен через веб-сервисы, потому что в главном координаторе прописаны адреса филиалов.
Конфиг клиента:
В чем может быть причина?
- Вопрос задан более трёх лет назад
- 1183 просмотра
На моей памяти ifconfig-pool-persist ipp.txt изначально задуман для того, чтобы раздавать айпишники из пула аналогично dhcp без обязательных привязок, и по истечению какого-то таймаута считает айпишник свободным и может его раздать.
Если вам именно статично назначать, может проще и лучше через ccd(client-config-dir) сделать отдельные статические настройки на каждого клиента — они точно не меняются софтом?
Либо если вам пул мил и дорог — у него есть третий параметр — число секунд. Ставите 0 — и openvpn не будет его обновлять.
Однако, в оф.мануале никто не гарантирует что openvpn обязан руководствоваться этим файлом, он их как предложения рассматривает.
Note that the entries in this file are treated by OpenVPN as suggestions only, based on past associations between a common name and IP address. They do not guarantee that the given common name will always receive the given IP address. If you want guaranteed assignment, use —ifconfig-push