VPN-подключение IP-устройств
Введение
В данной статье рассматриваются вопросы настройки VPN-подключения следующих IP-устройств:
Настройка VPN-подключения осуществляется через WEB-интерфейс устройств.
Устройство при этом выполняет роль VPN-клиента и подключается к удаленному VPN-серверу.
В настоящее время поддерживается работа следующих типов протоколов:
- PPPTP
- PPPoE
- а также технологии OpenVPN
PPTP
Настройка
В самом простом случае в WEB-интерфейсе устройства достаточно указать
- включить PPTP
- имя пользователя
- пароль
- IP-адрес сервера
- MTU = 1474
Будьте аккуратны с опцией Отключить локальный интерфейс - т.к. соединение будет разрешено только через защищенный канал. В противном случае доступ к устройству возможен и через VPN и по "исходному IP-адресу". Данную опцию рекомендуется включать после тестовой проверки VPN-подключения.
Диагностика
Для диагностики подключения удобно использовать запрос 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
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
Jan 1 00:00:11 IPCUn daemon.notice pppd[68]: remote IP address 192.168.7.10
...
Где,
- в 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
Проверено с концентраторами КУН-IP8, КУН-IP4 и контроллером КИО-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 в папку sll.
Далее переходим в папку 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 tmp-dir C:\\OpenVPN\\tmp script-security 2
Сохраняем и переименовываем его в vpn.ovpn
Далее нам нужно, что бы сервер присваивал клиентам фиксированные ip-адреса, а не динамические, т.к. программа Scada не умеет работать по DHCP.
Пускай наша сеть будет 10.0.0.1-10.0.0.255.
Для совместимости с Windows, OpenVPN сервер работает по следующему принципу: сервер устанавливает соединение точка-точа с подключенным к нему клиентом и выделяет для этого пару адресов из подсети с префиксом /30, первый адрес он присваивает себе, а последний — клиенту.
Исходя из этого, имеем следующий список возможных пар клиентских адресов сети 10.0.0.0: