OpenVPN для облачного видеонаблюдения

Как оказалось, PPTP не всегда будет работать из-за особенностей подключения клиента к интернет. Возможно, что канал PPTP просто не возможно создать. На замену PPTP можно использовать OpenVPN. Я расскажу о том, как я настроил всю инфраструктуру. Для начала исходные данные:

  1. Дома стоит роутер D-link DIR-825ac. Это роутер для раздачи интернет по дому. От него потребуется DMZ и статический адрес на второй (vpn server) роутер. Адресация домашней сети 192.168.0.0/30. Для второго роутера сделаем статический BIND to MAC (по маку второго роутера) и присвоим адрес: 192.168.0.15. Включаем DMZ на этот IP адрес. Таким образом второй роутер становится видим для интернет. Естественно у меня подключен статический IP адрес от провайдера. Без него я не смогу снаружи подключиться к создаваемому серверу.
  2. Второй роутер D-link DIR-632 с прошивкой DD-WRT VPN. Он подключен WAN портом к LAN порту основного домашнего роутера. Забинденный IP 192.168.0.15 будет WAN адресом второго роутера. Все запросы из интернет идут на WAN второго роутера.
  3. Внутренняя адресация второго роутера: 10.0.10.0/30 Именно этот роутер будет нашим OpenVPN сервером.
  4. Ко второму ротеру кабелем подключен по LAN видеорегистратор D-link DNR-322L. Это наш “облачный” видеорегистратор, на который будут записываться камеры удаленных клиентов.
  5. На даче стоит роутер Vigor FLY 210. В вигор воткнута Yota без статического адреса. Адресация локальной сети на даче – 192.168.0.0/30.
  6. К Vigor Fly по локальной сети подключен второй роутер Linksys E7200 с прошивкой DD-WRT VPN. LAN порт Vigor FLY является WAN портом Linksys. То есть для Linksys внешний адрес будет 192.168.0.7.
  7. Внутренняя (локальная) сеть на Linksys: 10.0.0.0/30.
  8. Именно к Linksys по WiFi подключены IP-камеры D-link DCS-942L. Камеры имеют IP адреса: 10.0.0.2 и 10.0.0.3.

Отобразим всю инфраструктуру графически:

Я хочу, чтобы видеорегистратор в домашней локальной сети обращался к камере на даче за видеопотоком. Что для этого надо сделать? Надо поднять тунель между сетями дома и дачи, настроить роутинг.

Последовательность настройки OpenVPN:

  1. Скачиваем на комп к себе openvpn и генерируем сертификаты сервера, клиента, тлс ключ и какой-то спец ключ. Этих инструкций в инете дофига. С этим проблем не возникает обычно. На выходе имеем:
    – Public Server Cert
    – CA Cert
    – Private Server Key
    – DH PEM
    – TLS Auth Key
  2. На роутере-сервере идем в Services-VPN-OpenVPN Server/Daemon и там же делаем настройки:
    Start Type – System

    Config as – Server

    Server mode – Router (TUN)
    Network – 10.1.1.0
    Netmask – 255.255.255.0
    Port – 1194
    Tunnel Protocol – TCP
    Encryption Cipher – Вариант 1 – Blowfish CBC, Вариант 2 – None (точно также на клиенте нужно будет делать. Разные настройки – ничего не заработает)
    Hash Algorithm – Вариант 1 – SHA1, Вариант 2 – None
    Advanced Options – Enable
    TLS Cipher – AES-256-SHA
    LZO Compression – Yes
    Redirect default Gateway – Disable
    Allow Client to Client – Enable
    Allow duplicate cn – Enable
    Tunnel MTU setting – 1500
    Tunnel UDP Fragment – (пусто)
    Tunnel UDP MSS-Fix – Disable
    CCD-Dir DEFAULT file – пусто
    Client connect script – пусто
    Static Key – пусто
    PKCS12 Key – пусто
    Public Server Cert – вставляем публичный сертификат сервер, начиная включительно со строки —–BEGIN CERTIFICATE—– и заканчивая включительно —–END CERTIFICATE—–
    CA Cert – вставляем сертификат удостоверяющего центра аналогично выше.
    Private Server Key – аналогично выше приватный ключ сервера
    DH PEM – некий ключ, чтобы трафик не расшифровали
    Additional Config – route 10.0.0.0 255.255.255.0 10.1.1.2     Это означает, что на сервере будет добавлен маршрут на подсеть 10.0.0.0 (дача) и весь трафик на нее будет идти через шлюз 10.1.1.2 – это ип, который получит клиент при подключении к впн серверу 10.1.1.1.
    TLS Auth Key – вставляем ключ —–BEGIN OpenVPN Static key V1—– из ta.key
    После этого нажимаем Save. Но это не все………. Самое хитрое впереди!
  3. Качаем в интернет программу putty и подключаемся по telnet к роутеру-серверу. Логинимся под админом (рутом). И делаем следующее:
    cd /tmp/openvpn/ccd
    vi user1
    вписываем в созданный файл текст:
    iroute 10.0.0.0 255.255.255.0
    push “route 10.0.10.0 255.255.255.0”
    Сохраняем файл. Имя файла – это имя клиента из сертификата клиента (name). То есть имя файла и имя клиента из сертификата – должны быть одинаковы. Роутер лезет за этим файлом после того, как получит от клиента клиентский сертификат.
    !!! UPD: Если файл после ребута стирается, то надо в Administration -> Commands ввести эту команду, а потом нажать “Save startup”:

    echo "iroute 10.0.0.0 255.255.255.0" > /tmp/openvpn/ccd/user1
    echo "push \"route 10.0.10.0 255.255.255.0\"" >> /tmp/openvpn/ccd/user1
  4. Ребутим роутер или на вебморде нажимаем Apply settings.
  5. Отключаем Файрвол или ищем в инете как править iptables.
  6. Идем на клиентский роутер, отключаем файрвол и идем Services-VPN. Далее на этой странице делаем:
    OpenVPN Client – Enable

    Server IP/Name – вводим статический IP адрес, выданный провайдером серверному роутеру.
    Port – 1194
    Tunnel Device – TUN
    Tunnel Protocol – TCP
    Encryption Cipher – ТАКЖЕ КАК НА РОУТЕРЕ-СЕРВЕРЕ
    Hash Algorithm – ТАКЖЕ КАК НА РОУТЕРЕ-СЕРВЕРЕ
    nsCertType verification – не отмечаем
    Advanced Options – Enable
    TLS Cipher – AES-256 SHA
    LZO Compression – YES
    NAT – Disable
    Bridge TAP to br0 – Disable
    IP Address – пусто
    Subnet Mask – пусто
    Tunnel MTU setting – 1500
    Tunnel UDP Fragment – пусто
    Tunnel UDP MSS-Fix – Disable
    TLS Auth Key – —–BEGIN OpenVPN Static key V1—– из сгенеренного файла
    Additional Config – topology subnet (хотя может это и не нужно)
    CA Cert – вставляем из файла
    Public Client Cert – вставляем из файла
    Private Client Key – вставляем из файла

    Нажимаем Apply settings

  7. Можно на компе где-ньть поставить Syslog сервер, чтобы детально смотреть, что происходит. Это очень помогает отловить ошибки. Я использовал для отладки: Kiwi Syslog Daemon.
  8. После установки соединения надо проверять пинги во все стороны со всех сторон. У меня в итоге все заработало.
  9. Теперь на видеорегистраторе я подключаю камеру по IP: 10.0.0.2 и получаю видео!

На возню со всем этим у меня ушло очень много времени… сначала с сертификатами и куда что вставлять. Потом с тунелем – обязательно создавать файл с iroute – без этого сети не видно. Обязательно topology subnet. И вообще все что выше сделано – это выстраданное решение.

Вопрос – а почему бы не купить готовое? А вы попробуйте!! Нифига дешевого нет, платить надо ежемесячно! Хранение 30 дней – 500 руб в месяц! А тут – делаешь все сам, контролируешь сам, архив – на очень много дней.

Вопрос – много роутеров! Ну можно оставить 2 роутера – сервер и клиент. Но мне нужно было сделать так, чтобы исходный интернет (роутер) не трогать. То есть вы приходите куда угодно, втыкаете клиент-роутер и камеры, которые уже на этот клиент-роутер настроены и ВСЕ! У вас все работает. Клиент-

2 thoughts on “OpenVPN для облачного видеонаблюдения

  1. Денис

    Для таких вещей использую mikrotik. Очень рекомендую. Надёжно и универсально. Можно писать скрипты…управлять питанием камеры (poe) и т.д. Есть порт для usb-модема.

    Reply
    1. admin Post author

      Да, на микротике удобнее значительно, пое есть. Но когда статью писал, что было под рукой, на том и делал… может и про него как-ньть напишу

      Reply

Leave a Reply

Your email address will not be published. Required fields are marked *