- Исходные данные
~# cat /etc/os-release ... Ubuntu 16.04.3 LTS ...
- Установка.
# apt-get install easy-rsa # apt-get install openvpn
- Создание центра сертификации.
Создаем шаблонную директорию easy-rsa в директории /etc/openvpn с помощью команды make-cadir:# make-cadir /etc/openvpn/easy-rsa
Необходимо зайти в эту директорию:# cd /etc/openvpn/easy-rsa
Все дальнейшие команды запускаем в этой директории.
Редактируем файл /etc/openvpn/easy-rsa/vars. Ищем поля, на основании которых генерируются клиентские сертификаты и меняем значения на свои:export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit"
Затем, задаем KEY-NAME:export KEY_NAME="server"
Далее, создаем центр сертификации:# source vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys # ./clean-all # ./build-ca
- Создание сертификата, ключа и файлов шифрования для сервера.
# ./build-key-server server
Внимание! Во время создания ключей, не задавайте challenge password!
Генерируем сильные ключи протокола Диффи-Хеллмана, используемые при обмене ключами:# ./build-dh
Генерируем подпись HMAC для дополнительной проверки сервером целостности TSL:# openvpn --genkey --secret keys/ta.key
- Настройка openvpn сервера.
Копируем файлы ca.crt ca.key server.crt server.key ta.key dh2048.pem из /etc/openvpn/easy-rsa в /etc/openvpn
Распаковываем файл конфигурации из директории с примерами:# cd /etc/openvpn # cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz ./ # gunzip server.conf.gz
В итоге получаем файл /etc/openvpn/server.conf
Редактируем этот файл.
Ищем в файле строчку с tls-auth. Раскомментируем её (убрать ; в начале строки). Ниже добавляем строчку key-direction 0:tls-auth ta.key 0 # This file is secret key-direction 0
Далее, ищем строки с cipher. Раскомментируем cipher AES-128-CBC, остальные должны остаться закомментрованными. Ниже добавляем строку auth SHA512.cipher AES-128-CBC auth SHA512
Ищем user и group и раскомментируем:user nobody group nogroup
Задаем директорию для клиентских файлов:client-config-dir /etc/openvpn/ccd
Опционально, можно поменять порт и протокол:port 1194 proto TCP
- Настройка сервера для перенаправления трафика.
Редактируем /etc/sysctl.confnet.ipv4.ip_forward=1
Применяем настройки:# sysctl -p
Если нужен выход в интернет для клиентов, то необходимо настроить NAT.iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
Правила для iptables:-A INPUT -i tun0 -j ACCEPT -A INPUT -p tcp -m tcp --dport 1194 -j ACCEPT -A FORWARD -i tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT -A FORWARD -i tun0 -o eth0 -j ACCEPT # disable from external to vpn clients #-A FORWARD -i eth0 -o tun0 -j REJECT --reject-with icmp-host-prohibited
Здесь приведена не полная настройка iptables, а лишь необходимые для работы openvpn правила.
- Запуск сервера
# systemctl start openvpn@server
Проверяем:# systemctl status openvpn@server # netstat -tuwpan
- Создание клиентского сертификата и пары ключей.
Данная операция производится каждый раз, когда необходимо завести клиента.
В данном примере в качестве имени клиента используем client1.# cd /etc/openvpn/easy-rsa # source vars # ./build-key client1
Не забывайте, что challenge password задавать НЕ НУЖНО!
- Отзыв клиентского сертификата.
Для прекращения доступа клиента к openvpn серверу, необходимо отозвать его сертификат.# cd /etc/openvpn/easy-rsa # source vars # ./revoke-full client1
Выполнение этой команды будет заканчиваться ошибкой 23 и созданием файла /etc/openvpn/easy-rsa/keys/crl.pem. Копируем этот файл в директорию сервера:# cp /etc/openvpn/easy-rsa/keys/crl.pem /etc/openvpn/crl.pem
После этого в конец /etc/openvpn/server.conf добавляем строку, чтобы сервер проверял отозванные сертификаты:crl-verify crl.pem
И перезапускам openvpn сервер:# systemctl restart openvpn@server
Для отзыва сертификатов других клиентов (например, client2), необходимо повторить все операции, за исключением добавления строки в server.conf:# cd /etc/openvpn/easy-rsa # source vars # ./revoke-full client2 # cp /etc/openvpn/easy-rsa/keys/crl.pem /etc/openvpn/crl.pem # systemctl restart openvpn@server
Список всех выпущенных клиентских сертификатов, в том числе отозванных, можно посмотреть в файле /etc/openvpn/easy-rsa/keys/index.txt. Для отозванных сертификатов в начале строки стоит буква R.
- Создаем скрипты для создания клиентского файла с настройками
Для облегчения жизни системного администратора, напишем скрипт, который будет создавать файл с настройками для клиентов.# mkdir -p /etc/openvpn/client-configs/files # chmod 700 /etc/openvpn/client-configs/files # cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client-configs/base.conf
Редактируем файл /etc/openvpn/client-configs/base.conf# задаем ip и порт как у сервера remote IP 1194 # протокол как у сервера (/etc/openvpn/server.conf) proto TCP # директивы ниже должны быть закомментированы или удалены ;ca ca.crt ;cert client.crt ;key client.key # настройки cipher и auth как в /etc/openvpn/server.conf cipher AES-128-CBC auth SHA512 # у сервера этот параметр = 0, у клиента = 1 ! key-direction 1
В итоге должно получиться следующее:client dev tun proto tcp remote XXX.XXX.XXX.XXX 1194 nobind user nobody group nogroup persist-key persist-tun key-direction 1 cipher AES-128-CBC auth SHA512 comp-lzo verb 1
Далее, создаем файл /etc/openvpn/client-configs/make_config.sh и пишем туда следующее:#!/bin/bash # First argument: Client identifier KEY_DIR=/etc/openvpn/easy-rsa/keys OUTPUT_DIR=/etc/openvpn/client-config/files BASE_CONFIG=/etc/openvpn/client-config/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>\n<tls-auth>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-auth>') \ > ${OUTPUT_DIR}/${1}.ovpn
Файл запускать только после создания ключей клиента, в качестве параметра передается имя клиента:/etc/openvpn/client-config/make_config.sh client1
На выходе получится файл /etc/openvpn/client-config/files/client1.ovpn внутри которого будут настройки, а также клиентский сертификат и все необходимые ключи. Этот файл нужно отдать клиенту.
- Постоянные ip для клиентов.
Бывает необходимость в выдаче одних и тех же ip одним и тем же клиентам. Это делается очень просто: в файл клиента (например, /etc/openvpn/ccd/client1) записывается директива:ifconfig-push 10.0.11.253 10.0.11.254
Первый ip (10.0.11.253) - это адрес клиента, второй ip (10.0.11.254) адрес шлюза для клиента.
После добавления адресов необходимо перезагрузить openvpn server:# systemctl restart openvpn@server
В 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]
- Клиенты openvpn для network manager в Ubuntu
KDE# apt-get install network-manager-openvpn-kde
Gnome# apt-get install network-manager-openvpn-gnome
Статья опубликована: 2018-02-22 17:36:07
Последние правки: 2019-05-30 12:59:35
Настраиваем собственный VPN для выхода через него в интернет.