Хочу рассказать об одной возможности openvpn’a, а именно о возможности назначения определённым клиентам свой IP. Делается это с помощью опции конфига
client-config-dir PATH_TO_DIR
где PATH_TO_DIR путь к папке, где храняться настройки для клиентов.
Эта директория состоит из из файлов, имено которых совпадают с именами ключей. В этих файлах можно переопределять некоторые опции, для каждого клиента свои. Когда клиент подключается, сервер просматривает эту папку на предмет наличия файла конфига для клиента. Если таков есть – значение в нём переопределяются. Если нет – используются те, которые заданы в конфиге сервера.
В этой же статье мы поговорим лишь о назначении конкретного IP-адреса. И так, создаём папку, указанную в конфиге сервера (PATH_TO_DIR). Здесь очень важно выставить права на папку. Обычно, сервер openvpn запускается от имени юзера nobody. А директория с конфигом сервера имеет права 0600 и владельцем root:wheel, поэтому, юзеру nobody в эту папку недостучаться. В связи с этим, папку можно создать, например, в /usr/local/etc и назвать её ccd. Права здесь нужно выставить такие, что бы юзер nobody мог к ней достучаться, а так же к файлам в ней. Обычно хватает 0755. Владелец при таких разрешениях неважен.
В этой папку создаём файл с именем клиента и такой строчкой в нём:
ifconfig-push 10.0.11.101 10.0.11.102
где строка означает, что назначить клиенту адрес 10.0.11.101, а 10.0.11.102 будет шлюзом для него. Вот и всё. Теперь перечитываем конфиг сервера (у меня почему-то он после перечитывания просто падал, поэтому я делал рестарт) и смотрим в логи на предмет наличия таких строк:
Wed Aug 26 11:44:31 2009 client_vpn/120.120.120.120:4739 OPTIONS IMPORT: reading client specific options from: /usr/local/etc/ccd/client_vpn
Wed Aug 26 11:44:31 2009 client_vpn/120.120.120.120:4739 MULTI: Learn:10.0.11.101 -> client_vpn/120.120.120.120:4739
Wed Aug 26 11:44:31 2009 client_vpn/120.120.120.120:4739 MULTI: primary virtual IP for client_vpn/120.120.120.120:4739: 10.0.11.101
Wed Aug 26 11:44:32 2009 client_vpn/120.120.120.120:4739 SENT CONTROL : 'PUSH_REPLY,route 10.0.11.0 255.255.255.0,route 10.0.10.0 255.255.255.0,dhcp-option DNS 10.0.10.1,redirect-gateway,route 10.0.11.0 255.255.255.0,ping 10,ping-restart 120,ifconfig 10.0.11.101 10.0.11.102' (status=1)
Жирным отчётливо видим, что клиенту выдался нужный IP.
Примечание.
В openvpn нельзя просто так назначать какие захочешь адреса. В openvpn адреса разбиты на подсети из 4-ох адресов: network, IP, gateway, broadcast. Поэтому, что бы знать, какие адреса можно было бы выделять, а какие нельзя, приведу таблицу, которая разбита на пары, которые можно выделять клиентам. Первый 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]
2 коментарі “openvpn: каждому клиенту свой IP”
Спасибо, но что делать если клиентов больше чем 63 ?
Брать больше диапазон, например, /23 или /22. Или использовать topology subnet