Алгоритм настройки OpenVPN на сервисных маршрутизаторах Eltex:
1) Для ОС Windows cкачаем с официального сайта дистрибутив клиента. Для ОС Linux устанавливаем пакет из репозитория разработчика дистрибутива.
Далее все примеры команд будут приведены для OC Windows, пути расположения файлов будут отличаться в зависимости от особенностей конкретного дистрибутива, информацию о расположении можно получить из соответствующих man страниц.
2) Устанавливаем программу. Нажимаем кнопку "Customize" и выбираем установку компонента.
EasyRSA Certificate Management Scripts (специально созданная программа по созданию ключей и сертификатов, которая использует openssl для выполнения действий с ключами и сертификатами) она нам понадобится для генерации ключей и сертификатов.
3) Указываем путь. В будущем он нам понадобится, поэтому запомните его. В нашем случае мы используем стандартный путь: C:\Program Files\OpenVPN.
4) После установки заходим в C:\Program files\OpenVPN\easy-rsa (путь, который указали в п. 3 \easy-rsa).
Открываем vars.example блокнотом и редактируем его (блокнот надо запустить с правами администратора, чтобы иметь права на запись в папку).
Редактируем строки
# set_var EASYRSA_REQ_COUNTRY "US"
# set_var EASYRSA_REQ_PROVINCE "California"
# set_var EASYRSA_REQ_CITY "San Francisco"
# set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
# set_var EASYRSA_REQ_EMAIL "me@example.net"
# set_var EASYRSA_REQ_OU "My Organizational Unit"
# set_var EASYRSA_CA_EXPIRE 3650
# set_var EASYRSA_CERT_EXPIRE 825
Убираем знак комментария в начале ( # ) и задаём требуемые значения:
- страна
- регион
- город
- организация
- почта администратора
- подразделение
- время действия корневого и пользовательских сертификатов в днях
Строку # set_var EASYRSA_OPENSSL приводим к виду:
set_var EASYRSA_OPENSSL "..bin/openssl.exe"
Сохраняем файл как vars (без расширения!).
5) Запускаем командную строку от имени администратора, не закрываем окно до конца процесса генерации сертификатов.
6) Поочерёдно выполняем следующие три команды
cd: C:\Program files\OpenVPN\easy-rsa (путь, который указали в п. 3 \easy-rsa).
EasyRSA-Start.bat
В итоге мы должны увидеть вот такое окно:
7) Инициализируем pki командой ./easyrsa init-pki
8) Генерируем ключ Диффи Хельмана - команда ./easyrsa gen-dh
Генерация займёт некоторое время. Дождитесь окончания.
9) Генерируем ключ центра сертификации (CA) - ./easyrsa build-ca nopass
На запросы ввода пароля
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
придумываем и запоминаем пароль, затем вводим его. На запрос
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
вводим enter
10) Генерируем сертификат сервера - команда ./easyrsa build-server-full ESR nopass
На запросы
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
придумываем и вводим пароль от сертификата, а на запрос
Enter pass phrase for c:/Program Files/OpenVPN/easy-rsa/pki/private/ca.key:
вводим пароль, использованный при генерации СА сертификата. При успешно выполнении увидим текст вида:
Write out database with 1 new entries
Data Base Updated
11) Генерируем сертификат клиента ./easyrsa build-client-full Alli nopass
Тут важно отметить, что имя сертификата (Alli в данном примере) должно совпадать с именем соответствующего пользователя в настройках OpenVPN сервера на ESR. Ответы на вопросы аналогичны предыдущему пункту. Если пользователей несколько - надо генерировать несколько клиентских сертификатов.
12) Выходим из оболочкие EasyRSA командой exit
Генерируем ключ для tls аутентификации:
..\bin\openvpn.exe --genkey secret ta.key
13) Генерация сертификатов окончена.
Сертификат СА.crt, ключ Диффи Хельмана dh.pem будут находиться в папке C:\Program files\OpenVPN\easy-rsa\pki. Сертификаты сервера и клиентов будут в папке C:\Program Files\OpenVPN\easy-rsa\pki\issued. А ключи - в папке C:\Program Files\OpenVPN\easy-rsa\pki\private. Ключ tls-auth ta.key в папке C:\Program Files\OpenVPN\easy-rsa.
14) Переходим к настройке ESR.
Загрузим сертификаты в маршрутизатор. Для этого воспользуемся TFTP сервером (также можно загружать сертификаты и через FTP/SCP либо USB/SD, 192.168.16.10 в данном примере—адрес АРМ с tftp сервером).
esr-200# copy tftp://192.168.16.10:/ca.crt certificate:ca/ca.crt
esr-200# copy tftp://192.168.16.10:/dh.pem certificate:dh/dh.pem
esr-200# copy tftp://192.168.16.10:/ESR.key certificate:server-key/ESR.key
esr-200# copy tftp://192.168.16.10:/ESR.crt certificate:server-crt/ESR.crt
esr-200# copy tftp://192.168.16.10:/ta.key certificate:ta/ta.key
Проверить, что загрузка прошла успешно можно командой
esr-200# sh crypto certificates
Type Total
------------ -------
ca 1
dh 1
server-key 2
server-crt 1
client-key 1
client-crt 1
ta 1
crl 0
Далее выполняем настройку:
esr-200# config
esr-200(config)# remote-access openvpn GenOffice // Создаем сервер и даем ему имя
esr-200(config-openvpn-server)# network 10.10.100.0/24 // Определяем сеть из которой будут выделяться адреса клиентам
esr-200(config-openvpn-server)# protocol tcp // Выбираем протокол по которому будет работать сервер (tcp/udp)
esr-200(config-openvpn-server)# tunnel ip // Выбираем на каком уровне будет работать (l2 ethetnet/l3 ip)
esr-200(config-openvpn-server)# encryption algorithm aes128 //Выбираем алгоритм шифрования
esr-200(config-openvpn-server)# authentication algorithm sha-256 //Алгоритм аутентификации
esr-200(config-openvpn-server)# certificate ca ca.crt //
esr-200(config-openvpn-server)# certificate dh dh.pem //
esr-200(config-openvpn-server)# certificate server-key ESR.key //Указываем загруженные ранее сертификаты
esr-200(config-openvpn-server)# certificate server-crt ESR.crt //
esr-200(config-openvpn-server)# certificate ta ta.key //
esr-200(config-openvpn-server)# security-zone trusted // Указываем зону безопасности
esr-200(config-openvpn-server)# route 192.168.1.0/24, 192.168.3.0/24
// Добавляем маршруты к сетям, которые будут доступны клиентам через удалённое соединение
esr-200(config-openvpn-server)# enable // Включаем сервер
Предположим что клиенту необходимо дать статический IP. Тогда для данного клиента (в примере используется имя сертификата Alli) необходимо произвести следующие настройки:
esr-200(config-openvpn-server)# username Alli
esr-200(config-openvpn-user)# ip address 10.10.100.202
esr-200(config-openvpn-user)# exit
Также, можно указать какую-либо удалённую сеть, находящуюся «за» удалённым клиентом, это делается командой:
esr-200(config-openvpn-user)# subnet 192.168.3.0/24
Даже если никаких специфических настроек для клиента не требуется, его всё равно необходимо завести в настройках сервера!
esr-200(config-openvpn-server)# username Alli
esr-200(config-openvpn-user)# exit
Если необходимо, что бы несколько клиентов подключались через один сертификат, то используем опцию duplicate-cn в настройках сервера:
esr-200(config-openvpn-server)# duplicate-cn
esr-200(config-openvpn-server)# exit
В случае, если на внешнем интерфейсе используется межсетевой экран, необходимо разрешить прохождение трафика из зоны внешнего интерфейса (пусть это будет untrusted) к зоне self, в нашем примере - протокол tcp и порт по умолчанию 1194:
esr-200(config)# object-group service OpenVPN
esr-200(config-object-group-service)# port-range 1194
esr-200(config-object-group-service)# exit
esr-200(config)# security zone-pair untrusted self
esr-200(config-zone-pair)# rule 100
esr-200(config-zone-pair-rule)# action permit
esr-200(config-zone-pair-rule)# match protocol tcp
esr-200(config-zone-pair-rule)# match destination-port OpenVPN
esr-200(config-zone-pair-rule)# enable
esr-200(config-zone-pair-rule)# end
esr-200# commit
esr-200# confirm
Для настройки клиента надо поместить файлы ca.crt, ta.key, и сертификат/ключ пользователя (в нашем примере Alli.crt, Alli.key) в папку OpenVPN\config\client, которая в windows по умолчанию находится в домашней папке пользователя (например для пользователя 123 путь будет C:\Users\123\OpenVPN\config\client) и создать там конфигурационный файл, например ESR-200.ovpn следующего содержания (в строчке remote X.X.X.X заменить на реальный адрес ESR:
client
dev tun
proto tcp
remote X.X.X.X
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
remote-cert-tls server
tls-auth ta.key 1
data-ciphers-fallback AES-128-CBC
data-ciphers AES-128-CBC
auth SHA256
cert Alli.crt
key Alli.key
После сохранения файла настроек в доке панели задач Windows найти значок OpenVPN, щёлкнув правой кнопкой мышки, выбрать нужный сервер (по имени конфигурационного файла, ESR-200 в нашем примере) и нажать подключиться.
Для настройки openvpn клиента на мобильных устройствах, например iOS, надо скачать клиента из AppStore, а конфигурационный файл привести к так называемому унифицированному формату, добавив в конец строки
<ca>
# #
</ca>
<cert>
# # # #
</cert>
<key>
# # # #
</key>
key-direction 1
<tls-auth>
# # #
</tls-auth>
вставив вместо # # # содержимое соответствующих сертификатов—ca.crt, Alli.crt, Alli.key, ta.key в нашем примере.
Также необходимо закомментировать (или убрать) строки с указанием сертификатов:
ca ca.crt
cert Alli.crt
key Alli.key
tls-auth ta.key 1
После этого, полученный файл надо передать на мобильное устройство (проще всего как почтовое вложение, или через iTunes) и открыть установленным OpenVPN клиентом.
Унифицированный формат файла можно использовать и для конфигурации настольного клиента.
На маршрутизаторе проверить, что клиент успешно подключен можно командой:
esr-200# sh remote-access status
User IP-address Server
---------------- --------------- --------------------------------------
Alli 192.168.86.2 openvpn(TulOffice)