VPN-подключение IP-устройств
Содержание
Введение
В данной статье рассматриваются вопросы настройки VPN-подключения следующих IP-устройств:
Настройка VPN-подключения осуществляется через WEB-интерфейс устройств.
Устройство при этом выполняет роль VPN-клиента и подключается к удаленному VPN-серверу.
В настоящее время поддерживается работа следующих типов протоколов:
- PPPTP
- PPPoE
- а также технологии OpenVPN
Внимание! Обновление прошивок устройств с версий < x.50 с включенным VPN.
Для устройств КИО-2М, КИО-2МД, КУН-IPM всех модификаций (1.х, 2.x, 3.x) версий прошивок < x.50 не допускается обновление прошивки по VPN-интерфейсу.
Обновление устройства по VPN приведет к неработоспособности устройства. Восстановление будет возможно только в ремонтном отделе Текон-Автоматика.
Для обновления прошивки следует использовать только локальный интерфейс.
Если в настройках установлен флажок "Отключить локальный интерфейс (Входящие соединения разрешены только по VPN)", следует снять его, перезагрузить устройство, выполнить обновление прошивки по локальному интерфейсу.
PPTP
Настройка
В самом простом случае в WEB-интерфейсе устройства достаточно указать
- включить PPTP
- имя пользователя
- пароль
- IP-адрес сервера
- MTU = 1474
Будьте аккуратны с опцией Отключить локальный интерфейс - т.к. соединение будет разрешено только через защищенный канал. В противном случае доступ к устройству возможен и через VPN и по "исходному IP-адресу". Данную опцию рекомендуется включать после тестовой проверки VPN-подключения.
Настройка дополнительных параметров авторизации
В прошивках старых КИО и КУН-IPM (3.55, 3.76) по-умолчанию настроена авторизация через mppe.
Если вам необходмо использовать для авторизации другой механизм, например: chap, то вам следует вручную отредактировать конфигурационный файл
# vi /etc/ppp/peers/pptp
для поддержки авторизации по chap следует изменить строку
... refuse-chap
на
... require-chap
Редактирование файла pptp возможно путем подключения к устройству через ssh
Диагностика
Для диагностики подключения удобно использовать запрос log.cgi
В открывшемся логе нас интересуют только строки, содержащие pptp [xxx]:.
Корректное подключение может выглядеть, например следующим образом:
Jan 1 00:00:02 IPCUn daemon.notice pppd[68]: pppd 2.4.7 started by root, uid 0 Jan 1 00:00:02 IPCUn daemon.info pppd[68]: Using interface ppp0 Jan 1 00:00:02 IPCUn daemon.notice pppd[68]: Connect: ppp0 <--> /dev/pts/0 Jan 1 00:00:02 IPCUn daemon.notice pptp[74]: anon log[main:pptp.c:333]: The synchronous pptp option is NOT activated Jan 1 00:00:03 IPCUn daemon.notice pptp[97]: anon log[ctrlp_rep:pptp_ctrl.c:258]: Sent control packet type is 1 'Start-Control-Connection-Request' Jan 1 00:00:03 IPCUn daemon.notice pptp[97]: anon log[ctrlp_disp:pptp_ctrl.c:758]: Received Start Control Connection Reply Jan 1 00:00:03 IPCUn daemon.notice pptp[97]: anon log[ctrlp_disp:pptp_ctrl.c:792]: Client connection established. Jan 1 00:00:04 IPCUn daemon.notice pptp[97]: anon log[ctrlp_rep:pptp_ctrl.c:258]: Sent control packet type is 7 'Outgoing-Call-Request' Jan 1 00:00:04 IPCUn daemon.notice pptp[97]: anon log[ctrlp_disp:pptp_ctrl.c:877]: Received Outgoing Call Reply. Jan 1 00:00:04 IPCUn daemon.notice pptp[97]: anon log[ctrlp_disp:pptp_ctrl.c:916]: Outgoing call established (call ID 0, peer's call ID 17002). Jan 1 00:00:06 IPCUn daemon.notice pptp[97]: anon log[ctrlp_disp:pptp_ctrl.c:980]: PPTP_SET_LINK_INFO received from peer_callid 0 Jan 1 00:00:06 IPCUn daemon.notice pptp[97]: anon log[ctrlp_disp:pptp_ctrl.c:983]: send_accm is 00000000, recv_accm is FFFFFFFF J Jan 1 00:00:06 IPCUn daemon.warn pptp[97]: anon warn[ctrlp_disp:pptp_ctrl.c:986]: Non-zero Async Control Character Maps are not supported! Jan 1 00:00:06 IPCUn daemon.notice pppd[68]: CHAP authentication succeeded Jan 1 00:00:10 IPCUn daemon.notice pppd[68]: MPPE 128-bit stateless compression enabled Jan 1 00:00:11 IPCUn daemon.notice pppd[68]: local IP address 192.168.7.11 <<-------- 16 строка Jan 1 00:00:11 IPCUn daemon.notice pppd[68]: remote IP address 192.168.7.10 ... <<-------- 17 строка
Где,
- в 16 строке указан IP-адрес, полученный устройством
- в 17 - IP-адрес VPN-сервера, к которому было осуществлено подключение
И далее периодически в логе могут возникать сообщения
Jan 1 00:01:03 IPCUn daemon.notice pptp[97]: anon log[logecho:pptp_ctrl.c:696]: Echo Request received. Jan 1 00:01:03 IPCUn daemon.notice pptp[97]: anon log[ctrlp_rep:pptp_ctrl.c:258]: Sent control packet type is 6 'Echo-Reply' Jan 1 00:02:03 IPCUn daemon.notice pptp[97]: anon log[logecho:pptp_ctrl.c:696]: Echo Request received. Jan 1 00:02:03 IPCUn daemon.notice pptp[97]: anon log[ctrlp_rep:pptp_ctrl.c:258]: Sent control packet type is 6 'Echo-Reply ...
В случае проблем с подключением, будет отображена та или иная ошибка
Например:
May 23 14:33:16 unost pppd[165]: Using interface ppp0 May 23 14:33:16 unost pppd[165]: Connect: ppp0 <--> /dev/pts/0 May 23 14:33:16 unost pptp[303]: anon log[main:pptp.c:333]: The synchronous pptp option is NOT activated May 23 14:33:16 unost pptp[309]: anon log[ctrlp_rep:pptp_ctrl.c:258]: Sent control packet type is 1 'Start-Control-Connection-Request' May 23 14:33:16 unost pptp[309]: anon log[ctrlp_disp:pptp_ctrl.c:758]: Received Start Control Connection Reply May 23 14:33:16 unost pptp[309]: anon log[ctrlp_disp:pptp_ctrl.c:792]: Client connection established. May 23 14:33:17 unost pptp[309]: anon log[ctrlp_rep:pptp_ctrl.c:258]: Sent control packet type is 7 'Outgoing-Call-Request' May 23 14:33:17 unost pptp[309]: anon log[ctrlp_disp:pptp_ctrl.c:877]: Received Outgoing Call Reply. May 23 14:33:17 unost pptp[309]: anon log[ctrlp_disp:pptp_ctrl.c:916]: Outgoing call established (call ID 0, peer's call ID 0). May 23 14:33:11 unost pptp[220]: anon log[ctrlp_disp:pptp_ctrl.c:952]: Call disconnect notification received (call id 0) May 23 14:33:11 unost pptp[220]: anon log[ctrlp_error:pptp_ctrl.c:206]: Result code is 1 'Lost Carrier'. Error code is 0, Cause code is 0 May 23 14:33:11 unost pptp[220]: anon log[call_callback:pptp_callmgr.c:84]: Closing connection (call state) May 23 14:33:11 unost pppd[165]: Modem hangup May 23 14:33:11 unost pppd[165]: Connection terminated. ...
Для диагностики проблем подключений по PPTP для новый концентраторов КУН-IP8, КУН-IP4 (для КУН-IPM данный способ не работает) удобно поступать следующим образом:
- отключить опцию PPTP
- включить доступ по SHH в меню Контроль доступа
- перезагрузить устройство
- подключиться по SHH с помощью, например Putty
Далее в консоли набрать
$ pppd call pptp debug nodetach
И наблюдать более подробный лог, например:
using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/pts/1 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xe38a189e> <pcomp> <accomp>] Script pptp 185.41.42.22 --nolaunchpppd finished (pid 543), status = 0x0 Modem hangup Connection terminated.
- ошибка, приведенная в примере, связана с отсутствием прохождения GRE-пакетов на маршрутизаторе, за которым установлен КУН-IP.
Для остановки нажать Ctrl+z
Далее можно по необходимости (в зависимости от отображаемой ошибки) можно поменять параметры, например: логин/пароль в WEB-интерфейсе, нажать сохранить, и не перегружая устройства повторить ввод команды pppd call ...
Анализ возможных ошибок и их причины см. в статье:
- PPTP Client Diagnosis HOWTO http://pptpclient.sourceforge.net/howto-diagnosis.phtml
PPPoE
Настройка
В самом простом случае в WEB-интерфейсе устройства достаточно указать
- включить PPPoE
- имя пользователя
- пароль
- IP-адрес сервера
- MTU = 1492
Диагностика
Практического тестирование работы PPPoE подключений на объектах нашими специалистами на данный момент не проводилось.
Настройка OpenVPN 2.3.16 (устаревшая версия)
Внимание! Замечание от 2021 года.
Данная версия OpenVPN является устаревшей. В настоящее время следует устанавливать версию 2.5.х (см. описание ниже)
Руководство оставлено в качестве общей информации о настройке.
Проверено с концентраторами КУН-IP8, КУН-IP4 и контроллером КИО-2М, КИО-8(4)L.
Установка
Для начала нужно скачать программу OpenVPN версии 2.3.16-I001. Инструкция проверена только на данной версии.
В случае проблем с поиском на основном сайте загрузить указанную версию можно также с нашего сайта
Установочный файл запускаем от имени администратора. При установке ставим галочки на всех компонентах.
Далее указываем папку установки программы (рекомендуется оставить по умолчанию).
Нажимаем „install”. После программа установится, не потребовав перезагрузки.
Далее приступаем к подготовке OpenVPN-сервера для его настройки.
Настройка
Прежде всего нужно зайти в папку C:\OpenVPN:
- создать папку с названием ssl ,
- создать папку с названием tmp,
- создать текстовый файл verify.txt, следующего содержания
@echo off exit 0
Переименовать verify.txt в verify.bat
Далее переходим в папку C:\OpenVPN\easyrsa и переименовываем файл vars.bat.sample в vars.bat
Запускаем командную строку с правами администратора и вводим команду
cd c:\OpenVPN\easy-rsa
и нажимаем enter.
Далее вводим команду
vars.batи нажимаем enter
Далее запускаем
clean-all.bat
Запускаем
build-ca.batВо всех параметрах нажимаем enter, не вводя никаких значений.
Далее запускаем
build-dh.bat
Далее запускаем команду
build-key-server.bat vpn
, где vpn – это примитивное название нашего OpenVPN сервера.
Это же название нужно будет ввести в параметр "common name" и нажать enter, в остальных полях нажимать enter без ввода каких либо значений, а на два последних вопроса ответить yes. После выполненных команд в папке C:\OpenVPN\easy-rsa должна появится папка keys с созданными нами ключами сервера.Теперь приступаем к созданию клиентских ключей. Запускаем команду
buildkey.bat client1, где client1 — это логин нашего первого клиента. Параметр "common name" так же указываем, как client1. На последние два вопроса отвечаем так же yes
Аналогично добавляем client2, client3 и т.д.
Приступаем к конфигурации сервера OpenVPN. Заходим в папку key, копируем от туда файлы
- dh1024.pem,
- ca.crt,
- vpn.crt,
- vpn.key
в папку ssl.
Далее переходим в папку cofig и создаем там текстовый файл vpn.txt
Открываем этот файл и копируем в него следующий текст _
port 1194 proto udp dev tun dh C:\\OpenVPN\\ssl\\dh1024.pem ca C:\\OpenVPN\\ssl\\ca.crt cert C:\\OpenVPN\\ssl\\vpn.crt key C:\\OpenVPN\\ssl\\vpn.key server 10.0.0.0 255.255.255.0 ifconfig-pool-persist C:\\OpenVPN\\ipp.txt client-to-client keepalive 10 120 persist-key persist-tun status C:\\OpenVPN\\log\\openvpn-status.log log C:\\OpenVPN\\log\\openvpn.log verb 3 mssfix 1350 auth-user-pass-verify C:\\OpenVPN\\verify.bat via-file client-cert-not-required username-as-common-name t mp-dir C:\\OpenVPN\\tmp script-security 2
Сохраняем и переименовываем его в vpn.ovpn
Замечаение: в некоторых конфигурациях следует указывать строчку
auth-user-pass-verify C:\\OpenVPN\\verify.bat '''via-env '''
вместо via-file
Далее нам нужно, что бы сервер присваивал клиентам фиксированные ip-адреса, а не динамические, т.к. программа Scada не умеет работать по DHCP.
Пускай наша сеть будет 10.0.0.1-10.0.0.255.
Для совместимости с Windows, OpenVPN сервер работает по следующему принципу: сервер устанавливает соединение точка-точа с подключенным к нему клиентом и выделяет для этого пару адресов из подсети с префиксом /30, первый адрес он присваивает себе, а второй— клиенту.
Исходя из этого, имеем следующий список возможных пар клиентских адресов сети 10.0.0.0:
[ 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]
, где 5 и 6 — пара сети 10.0.0.4/30, которая может быть выделена, например: для подключения первого клиента — client1.
Для фиксирования IP-адреса за определенным клиентом, создаем в папке C:\OpenVPN текстовый ipp.txt
В этом файле мы пишем:
<логин клиента>,<ip-адрес-сети>.
Т.е. для нашего первого клиента запись будет выглядеть так
client1,10.0.0.4
Такая запись, с логином и соответствующим ему адресом, должна быть для каждого клиента, зарегистрированном в OpenVPN-сервере.
Пример файла ipp.txt
client1,10.0.0.4 client2,10.0.0.8 client3,10.0.0.12 client4,10.0.0.16 client5,10.0.0.20 client6,10.0.0.24 client7,10.0.0.28 client8,10.0.0.32 client9,10.0.0.36 client10,10.0.0.40
Конфигурационные файлы сервера готовы, теперь приступаем к запуску OpenVPN-сервера.
Запуск OpenVPN сервера
Для это нужно зайти в свойства ярлыка OpenVPN GUI и в параметре «объект» дописать --connect “vpn.ovpn”Нажимаем применить и запускаем ярлык с правами администратора. После этого в трее появляется значок OpenVPN GUI. Через несколько секунд он становиться зелёного цвета, это означает, что сервер запущен.
Настройка OpenVPN версии 2.5.3 (актуальная версия)
При подключении устройств с новыми прошивками к openvpn серверу верси 2.3.х могут возникнуть проблемы.
В таком случае рекомендуем настроить openvpn 2.5.3.
Скачиваем установочный файл с официального сайта - https://openvpn.net/community-downloads/.
Скачиваем утилиту esearsa 3.0.8 - https://github.com/OpenVPN/easy-rsa/releases.
Распаковывем архив куда-нибудь. И заходим в каталог EasyRSA-3.0.8.
Заускаем батник EasyRSA-Start.bat.
Откроится консольное окно.
Создаем СА сертифтикат:
./easyrsa init-pki ./easyrsa build-ca
Создаем пару ключей для севера:
./easyrsa gen-req server
Нужно ещё подписать req-файл сервера для корректного типа:
./easyrsa sign-req server server
После чего появится файл server.crt в папке \pki\issued.
Создаём ключ Диффи-Хельмана:
./easyrsa gen-dh
Содаём папку С:\ssl и копируем в неё из пакпки pki наши ключи ca.crt, dh.pem, server.key и server.crt.
Создаём в там же текстовый файл ipp.txt.
Создаём там же батник verify.bat:
@echo off exit 0
Создаём конфигурационный текстовый файл для сервера ovpnsrv.ovpn и копируем в него текст:
port 1194 proto udp4 dev tun topology subnet dh C:\\ssl\\dh.pem ca C:\\ssl\\ca.crt cert C:\\ssl\\server.crt key C:\\ssl\\server.key server 10.8.0.0 255.255.255.0 ifconfig-pool-persist C:\\ssl\\ipp.txt keepalive 10 120 keysize 128 client-to-client data-ciphers-fallback AES-256-CBC persist-key persist-tun verify-client-cert none auth-user-pass-verify C:\\ssl\\verify.bat via-file username-as-common-name script-security 2 verb 3Запускаем c рабочего стола OpenVPN GUI, в трее появится иконка:Нажимаем на неё правой кнопкой мыши и нажимаем "Импортировать конфигурацию". И выбираем файл конфигурации ovpnsrv.ovpn.
После чего нажимаем "Подключиться". Дальше openvpn спросит пароль ключа сервера. Тот пароль при котором создавалась его пара ключей.
После сервер должен запуститься и иконка станет зелёной.
Настройка концентраторов и/или контроллеров
Далее приступаем к настройке клиентов, в нашем случае это КУН-IP8 (КУН-IP4) или КИО-8(4)L.
Заходим в web-конфигуратор и переходим на страничку Конфигурация сети — OpenVPV.
Нас интересуют следующие поля:
- IP адрес сервера - это ,собственно, IP-адрес интерфейса Пульта ПК
- порт сервера - оставляем по умолчанию 1194
- имя пользователя - логин клиента(client1)
- пароль - пароль сервером проверяться не будет, но функции «пустого пароля» нет, по этому вводим любые значения, например 123, и подтверждаем
- подтверждение пароля - вводим тот же пароль
- CA сертификат - файл ca.crt. Открываем его блокнотом или иным текстовым редактором и копируем его содержимое в поле CA сертификат
Сохраняем изменения и перезагружаем устройство.
Просмотр лога соединений OpenVPN-сервера
В логах сервера можно посмотреть статистику подключения, в трее нужно кликнуть на значок OpenVPN GUI 2 раза левым кликом.
В логе видим, что с client1 установлено соединение через пару адресов 10.0.0.6, 10.0.0.5. Теперь устройство доступно по нашей vpn сети по адресу 10.0.0.6.Для нормальной работы OpenVPN-сервера в настройках брандмауэра Windows должны присутствовать исключения для OpenVPN Deamon и OpenVPN GUI.
Для автоматического запуска OpenVPN-сервера удобнее использовать службу OpenVPNService, которую необходимо настроить.
Заходим в меню Пуск - панель управления — Администрирование — Службы, выбираем OpenVPNService, открываем свойства и меняем тип запуска с «вручную» на «автоматически», при этом программа OpenVPN GUI работать не будет, так как одновременно не могут работать и служба и OpenVPN GUI.
Для просмотра состояния подключения OpenVPN-сервера в этом случае следует открыть текстовый файл openvpn.log ,находящийся в C:\OpenVPN\log.
Ошибка 10054
+ в лог-файле КУН-IP может отображаться сообщение: "нет файла ключа "dls.key"
Для устаранения ошибки, следует включить на АРМ штатный брандмауэр и создать правило разрешающее входящее подключение на порт UDP 1194.
Дополнительно
Для надёжности в настройках OpenVPN IP-устройств рекомендуется ставить галочку - Отключить локальный интерфейс: (Входящие соединения будут разрешены только по VPN!). После этого устройство будет доступно только по сети VPN.
Однако нужно иметь ввиду, что, если по какой-нибудь причине OpenVPN-сервер выйдет из строя и его настройки будут утеряны, то придётся вручную сбрасывать на заводские настройки каждое устройство vpn сети.