1

Тема: Управление OpenVPN сертификатами в консоли

Управление OpenVPN сертификатами через консоль

Предположим что у вас уже есть сервер на котором запущена услуга по выдачи VPN на базе OpenVPN, но нет панели управления сертификатами.

Создание клиента и выдачи сертификатов OpenVPN

В самом начале нам конечно потребуется создать клиентов, но в будущем можно будет только отзывать и выдавать новые сертификаты минуя эти действия.

1. Добавляем нового клиента:

cd /etc/openvpn/easy-rsa/2.0/
./build-key client1
./build-key client2
./build-key client3

и т.д.

2. Приводим /etc/openvpn/openvpn.conf к такому виду:

dev tun
server 10.8.0.0 255.255.255.0
client-config-dir /etc/openvpn/ccd
#ifconfig-pool-persist ipp.txt
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
push "route 10.8.0.0 255.255.255.0"
push "redirect-gateway"
comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
group nobody
daemon

3. в папке /etc/openvpn/ccd клиентские конфиги для разных ip

например:

[root@serv ccd]# cat client1
ifconfig-push 10.8.0.9 10.8.0.10
iroute 10.8.0.0 255.255.255.0
[root@serv ccd]# cat client2
ifconfig-push 10.8.0.5 10.8.0.6
iroute 10.8.0.0 255.255.255.0
[root@serv ccd]# cat client3
ifconfig-push 10.8.0.13 10.8.0.14
iroute 10.8.0.0 255.255.255.0
[root@serv ccd]# cat client4
ifconfig-push 10.8.0.17 10.8.0.18
iroute 10.8.0.0 255.255.255.0

Выбранные пары 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]

именно поэтому 10.8.0.9 10.8.0.10, 10.8.0.13 10.8.0.14 и так далее

Ну и после добавления в клиентский конфиг ip добавляем правило iptables:

iptables -t nat -A POSTROUTING -s 10.8.0.9 -o venet0 -j SNAT --to-source 77.79.14.162, то есть client1(конфиг:

[root@serv ccd]# cat client1
ifconfig-push 10.8.0.9 10.8.0.10
iroute 10.8.0.0 255.255.255.0)
при коннекте получит внутренний локальный ip 10.8.0.9, который iptables будет редиректить на 77.79.14.162 на выходе

ну и так далее:

iptables -t nat -A POSTROUTING -s 10.8.0.17 -o venet0 -j SNAT --to-source 77.79.14.165
iptables -t nat -A POSTROUTING -s 10.8.0.21 -o venet0 -j SNAT --to-source 77.79.14.166
iptables -t nat -A POSTROUTING -s 10.8.0.25 -o venet0 -j SNAT --to-source 77.79.14.167
iptables -t nat -A POSTROUTING -s 10.8.0.29 -o venet0 -j SNAT --to-source 77.79.14.168
iptables -t nat -A POSTROUTING -s 10.8.0.33 -o venet0 -j SNAT --to-source 77.79.14.169
iptables -t nat -A POSTROUTING -s 10.8.0.37 -o venet0 -j SNAT --to-source 77.79.14.170
iptables -t nat -A POSTROUTING -s 10.8.0.41 -o venet0 -j SNAT --to-source 77.79.14.171
iptables -t nat -A POSTROUTING -s 10.8.0.45 -o venet0 -j SNAT --to-source 77.79.14.172

Для клиента в итоге конфиг ovpn-файла будет выглядеть так:

client
remote 77.79.14.161 1194
dev tun
comp-lzo
ca ca.crt
cert client1.crt
key client1.key
route-delay 2
route-method exe
redirect-gateway def1
dhcp-option DNS 8.8.8.8
verb 3

где 77.79.14.161, IP адрес сервера на котором установлен VPN

4. Для полноценной работы необходимы следующие файлы:

ca.crt ca.key client.crt client.csr client.key $HOSTNAME.ovpn

где client имя клиента из пункта генерации.(место нахождения /etc/openvpn/easy-rsa/2.0/;)

5. Сохраняем правила iptables:

iptables-save > rules.ipt

после ребута рестор правил:

iptables-restore < rules.ipt

6. Сгенерированные сертификаты для удобства скопируем в отдельную директорию каждому клиенту, пример:

cp /etc/openvpn/easy-rsa/2.0/keys/ca.key /root/clients/client1
cp /etc/openvpn/easy-rsa/2.0/keys/client1.crt /root/clients/client1
cp /etc/openvpn/easy-rsa/2.0/keys/client1.csr /root/clients/client1
cp /etc/openvpn/easy-rsa/2.0/keys/client1.key /root/clients/client1
cp /etc/openvpn/easy-rsa/2.0/keys/serv.buxar-host.eu.ovpn /root/clients/client1

,где serv.buxar-host.eu.ovpn конфиг файл вашего сервере ($HOSTNAME.ovpn)

7. Архивируем сертификаты и конфиг в архив:

Перед этим переходим в нужную директорию: cd /root/clients/

7.1. Если только нужно для одного клиента добавить в архив то по команде:

tar czf vpn_client1.tgz client1/

7.2. Если нужно сразу для всех клиентов сертификаты добавить каждый в отдельный архив то по команде:

for i in *; do tar czf vpn_$i.tgz $i; done

8. Скачиваем сертификаты себе на компьютер:

scp root@IP_сервера:/root/clients/vpn_client1.tgz /home/user/Загрузки/VPN/

9. Пересылаем сертификат клиенту.


Отзыв сертификатов

Отозвать сертификат очень просто, выполняем:

cd /etc/openvpn/easy-rsa/2.0/
source ./vars
./revoke-full client1


Генерация нового сертификата

После отзыва сертификата вам не нужно повторять полностью процедуру описанную в начале статьи по созданию клиента. Если вы хотите выдать новый сертификат с тем же IP адресом, вам достаточно выполнить эти действия:

cd /etc/openvpn/easy-rsa/2.0/
source ./vars
./build-key client1

Далее выполняем пункты 6-9 из выше описанной инструкции.

Автор: BuxarNET  для IntFAQ.ru

2

Re: Управление OpenVPN сертификатами в консоли

linuxMir, Вы бы ещё указали, как "подсунуть" openvpn файл с отозванными сертификатами, причём, желательно, на примере Keenetic

Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn...
Keenetic Giga & WD Mybook Live user

3

Re: Управление OpenVPN сертификатами в консоли

Быстрое развертывание и удобное управление OpenVPN на CentOS: https://sites.google.com/site/smkuzmin/home/openvpn

4

Re: Управление OpenVPN сертификатами в консоли

Если не изменяет память, то отозванные сертификаты записываются в файл crl.pem

в конфиге сервера это выглядит так crl-verify /<path>/crl.pem