Я уже довольно давно хотел написать статью о скрипте для работы с камерой через DVRIP протокол, но обсуждение к недавней новости о Xiaomi побудило меня сначала рассказать о том, как я устроил видеонаблюдение у себя, а потом уже перейти к скриптам и прочему.

У нас было 2 пакета... Так, стоп, это не та история.
У нас было 2 роутера фирмы TP-LINK, выход в интернет за провайдерским NAT, камера наблюдения Partizan уже не помню какой модели (сойдет любая IP-камера, поддерживающая RTSP over TCP или DVRIP) и дешевый VPS за 4 евро с характеристиками: 2 core CPU 2.4GHz, 4GB RAM, 300 GB HDD, 100 Mbit/s port. А еще нежелание докупать к этому ничего, что стоило бы дороже патчкорда.

Предисловие


По очевидным причинам мы не можем просто пробросить порты камеры на роутере и наслаждаться жизнью, кроме того, даже если бы и могли, то так делать не стоит.

Краем уха я слышал, что есть какие-то варианты с IPv6 tunneling, где вроде бы можно сделать все так, что все устройства в сети получат внешний IPv6 адрес, и это немного упростило бы дело, правда, по прежнему оставив безопасность данного мероприятия под вопросом, а еще поддержка в стандартной прошивке TP-LINK этого чуда какая-то странная. Хотя есть вероятность, что в предыдущем предложении я несу полную чушь, так что вовсе не обращайте на него свое внимание.

Но, к нашему счастью, практически любая прошивка под любой роутер (довольно голословное утверждение на самом деле) содержит PPTP/L2TP клиент или возможность установить кастомную прошивку с его наличием. И от этого мы уже можем строить какую-то стратегию поведения.

Топология


В приступе горячки мой мозг родил примерно такую схему подключения,

а во время другого приступа нарисовал, чтоб выложить на хабр


Адрес 169.178.59.82 сгенерирован случайно и служит только для примера

Ну или если на словах, то:

  • Роутер TP-LINK 1 (192.168.1.1), в который вставлен кабель, что торчит из стены. Пытливый читатель догадается, что это провайдерский кабель, по которому я получаю доступ в интернет. К этому роутеру подключены посредством патчкорда или Wi-Fi разнообразные домашние устройста. Это сеть 192.168.1.0
  • Роутер TP-LINK 2 (192.168.0.1, 192.168.1.200), в который вставлен кабель, что торчит из роутера TP-LINK 1. Благодаря этому кабелю роутер TP-LINK 2, а так же подключенный к нему устройства, тоже имеют доступ к интернету. На этом роутере настроено PPTP подключение (10.0.5.100) к серверу 169.178.59.82. Так же к этому роутеру подключена IP-Камера 192.168.0.200 и проброшены следующие порты
    • 192.168.0.200:80 -> 49151 (вебморда)
    • 192.168.0.200:34567 -> 49152 (DVRIP)
    • 192.168.0.200:554 -> 49153 (RTSP)
  • Сервер (169.178.59.82, 10.0.5.1), к которому подключен роутер TP-LINK 2. На сервере крутится pptpd, shadowsocks и 3proxy, через которые можно обращаться к устройствам сети 10.0.5.0 и таким образом иметь доступ к роутеру TP-LINK 2.

Таким образом все домашние устройства в сети 192.168.1.0 имеют доступ к камере через TP-LINK 2 по адресу 192.168.1.200, а все остальные могут подключиться через pptp, shadowsocks или socks5 и обратиться к 10.0.5.100.

Настройка


Первым делом стоит подключить все устройства согласно схеме на рисунке выше.

  • Настройка роутера TP-LINK 1 сводится к резервированию адреса 192.168.1.200 для TP-LINK 2. Опционально, если нужен фиксированный адрес для доступа из сети 192.168.1.0. И, по желанию, можно зарезервировать для него 10-20Мбит (10 хватит на один видеопоток в 1080 с головой).
  • На сервере необходимо установить и настроить pptpd. У меня Ubuntu 18.04 и действия были примерно следующие (донором послужил пример blog.xenot.ru/bystraya-nastrojka-vpn-servera-pptp-na-ubuntu-server-18-04-lts.fuck):
    • Устанавливаем необходимые пакеты:

      sudo apt install pptpd iptables-persistent
    • Приводим к следующему виду

      /etc/pptpd.conf
      option /etc/ppp/pptpd-options
      bcrelay eth0 # Интерфейс, через который ваш сервер ходит в интернеты
      logwtmp
      localip 10.0.5.1
      remoteip 10.0.5.100-200

    • Правим

      /etc/ppp/pptpd-options
      novj
      novjccomp
      nologfd
      
      name pptpd
      refuse-pap
      refuse-chap
      refuse-mschap
      require-mschap-v2
      #require-mppe-128 # Можно раскомментировать, но мой TP-LINK c ним не дружит
      
      ms-dns 8.8.8.8
      ms-dns 1.1.1.1
      ms-dns  77.88.8.8
      ms-dns 8.8.4.4
      ms-dns 1.0.0.1
      ms-dns  77.88.8.1
      
      proxyarp
      nodefaultroute
      lock
      nobsdcomp
      
    • Добавляем учетные данные в

      /etc/ppp/chap-secrets
      # Secrets for authentication using CHAP
      # client	server	secret			IP addresses
      username pptpd password *
    • Добавляем в

      /etc/sysctl.conf
      net.ipv4.ip_forward=1

      и релоадим sysctl

      sudo sysctl -p
    • Перезагружаем pptpd и добавляем его в автозагрузку

      sudo service pptpd restart
      sudo systemctl enable pptpd
    • Правим

      iptables
      sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
      sudo iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
      sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      sudo iptables --table nat --append POSTROUTING --out-interface ppp+ -j MASQUERADE
      sudo iptables -I INPUT -s 10.0.5.0/24 -i ppp+ -j ACCEPT
      sudo iptables --append FORWARD --in-interface eth0 -j ACCEPT

      И сохраняем

      sudo netfilter-persistent save
      sudo netfilter-persistent reload
      
  • Настраиваем TP-LINK 2
    • Резервируем адрес 192.168.0.200 для нашей камеры:

      DHCP -> Резервирование адресов
      — MAC-адрес — MAC камеры, можно посмотреть в DHCP -> Список клиентов DHCP
      — Зарезервированный IP-адрес — 192.168.0.200
    • Пробрасываем порты:
      Переадресация -> Виртуальные серверы
      — Порт сервиса: 49151, Внутренний порт: 80, IP-адрес: 192.168.0.200, Протокол: TCP
      — Порт сервиса: 49152, Внутренний порт: 34567, IP-адрес: 192.168.0.200, Протокол: TCP
      — Порт сервиса: 49153, Внутренний порт: 554, IP-адрес: 192.168.0.200, Протокол: TCP
    • Настраиваем подключение к VPN:

      Сеть -> WAN
      — Тип подключения WAN: PPTP
      — Имя пользователя: username (смотри /etc/ppp/chap-secrets)
      — Пароль: password (смотри /etc/ppp/chap-secrets)
      — Подтвердить пароль: password (смотри /etc/ppp/chap-secrets)
      — Динамический IP
      — IP-адрес/Имя сервера: 169.178.59.82 (очевидно, внешний IP вашего сервера)
      — Режим соединения: Подключить автоматически
    • Опционально разрешаем удаленный доступ к вебморде роутера
      Безопасность -> Удаленное управление
      — Порт веб-управления: 80
      — IP-адрес удаленного управления: 255.255.255.255
    • Перезагружаем роутер TP-LINK 2


Вместо PPTP можно использовать L2TP или, если у вас кастомная прошивка, то все что вашей душе угодно. Я выбрал PPTP, так как эта схема строилась не из соображения секьюрности, а pptpd по моему опыту самый быстрый VPN сервер. Тем более что очень не хотелось ставить кастомные прошивки, а значит и выбирать приходилось между PPTP и L2TP.

Если я нигде не ошибся в руководстве, а вы все сделали правильно и вам сопутствовала удача, то после всех этих манипуляций
  • во-первых

    ifconfig

    покажет интерфейс ppp0 inet 10.0.5.1 netmask 255.255.255.255 destination 10.0.5.100,
  • во-вторых 10.0.5.100 должен пинговаться,
  • а в третьих

    ffprobe -rtsp_transport tcp "rtsp://10.0.5.100:49153/user=admin&password=password&channel=1&stream=0.sdp"

    Должен обнаружить стрим.
    порт rtsp, логин и пароль вы можете узнать в документации к вашей камере


Заключение


В принципе уже неплохо, есть доступ к RTSP, если фирменный софт работает через DVRIP, то можно воспользоваться и им. Можно сохранять стрим с помощью ffmpeg, ускорять видео в 2-3-5 раз, разбивать на куски по часу, заливать это все на гуглдиск или в социальные сети и еще много-много чего.

Мне RTSP over TCP не понравился, потому что работал как-то не очень стабильно, а over UDP, по причинам того, что мы не можем (или можем, но я не хочу этим заниматься) пробросить диапазон портов, по которым RTSP будет пихать видеопоток, использовать не получится, я написал скриптик, который тащит поток over TCP по DVRIP. Получилось вроде стабильней.

Из плюсов подхода — мы можем взять на место роутера TP-LINK 2 что-нибудь, поддерживающее 4G свисток, запитать это все вместе с камерой от ИБП (который потребуется несомненно гораздо менее емкий, нежели при использовании регистратора), кроме того запись практически мгновенно передается на сервер, так что даже если к вам проникнут злоумышленники, то изъять видео у них не получится. В общем пространство для маневров есть и все зависит только от вашей фантазии.

P.S.: Я знаю, что многие производители предлагают готовые облачные решения, но по цене они превосходят стоимость моего впс практически вдвое (которых у меня и так 3, так что нужно куда-то девать ресурсы), предоставляют гораздо меньше контроля, а так же не очень удовлетворительное качество.

Комментарии (29)


  1. Nikopol25
    05.01.2020 04:20

    С 8 камерами канал 4g забьется полностью при постоянном потоке видео. Плата видео наблюдения на 8 каналов для ip камер стоит 1400, спрятать ее в доме проблем нету.
    Делал резервирование видеонаблюдение с двумя mikrotik l2tp. В городе динамический белый ip использую ddns mikrotik бесплатно. Дома стоит компьютер с поднятым FTP, при движении на камерах регистратор отправляет видео на FTP сервер. Плюс еще в доме стоит управляемое через web интерфейс 16 канальное реле.


    1. NiceDay Автор
      05.01.2020 04:45

      Вы поймите меня правильно — я не призываю к действию, а рассказываю историю:)
      Ну и это не полноценная статья, а предисловие к статье об одном PHP-скрипте.

      С 8 камерами канал 4g забьется полностью при постоянном потоке видео.

      У меня пока одна и планируется еще одна — смотреть как соседские коты на участке гадят.
      8 камер это немало. Само собой что под такие случаи есть более подходящие решения.
      Тем более что 4g это только предлагаемый резервный канал, если это резервирование вообще нужно в конкретной ситуации. В моей, например, не критично.

      Плата видео наблюдения на 8 каналов для ip камер стоит 1400, спрятать ее в доме проблем нету.

      Которая пишет на hdd, который стоит еще сколько-то, верно?
      А роутер и VPS уже были и стояли практически бесхозными.
      Я сэкономил 1400 рублей, на пару шоколадок хватит:)


      1. Nikopol25
        05.01.2020 05:09

        откинем регик, но ip камеры сами могут отправлять видео на ftp, на всех китайских камерах которые я встречал эта функция была и никаких туннелей даже не надо при динамическом белом ip. VPN я поднимал для управления реле, котлом и тд.
        Сейчас 8 камер для видео наблюдения частного дома не так уж и много.


        1. NiceDay Автор
          05.01.2020 07:59

          Теоретически и моя может, но моим методом еще можно смотреть видео онлайн хоть с телефона, хоть с пк, абы на устройстве была поддержка впн и rtsp плеер)


        1. NiceDay Автор
          05.01.2020 17:20

          Я, как обычно, крепок задним умом — фтп не секьюрный протокол, а меня написать статью побудило как раз обсуждение вопросов безопасности камер и т.д. в умном доме:)


          1. Nikopol25
            05.01.2020 17:27

            Вы же используете протокол PPTP он не безопасен, информация в нем не шифруется. Я же на микротике настроил l2tp ipsec и через него идет FTP это по любому безопаснее.


            1. CherryPah
              05.01.2020 22:43
              +1

              Стоит уточнить что за микрот, например я постоянно сталкиваюсь с затыками по процу на микроте (crs328) при попытке прогнать на нем чуть больше одного туннеля


              1. Nikopol25
                06.01.2020 02:45

                MIKROTIK RB952UI-5AC2ND и 951. Затычок никаких не наблюдал.
                На работе такой MIKROTIK CCR1009-7G-1C-1S+ стоит, 6 офисов site to site.


              1. Timag
                07.01.2020 17:08

                Так crs это же коммутаторы, хоть на них и может работать RouterOS. И не в количестве туннелей дело, а в суммарном трафике, который нужно шифровать. Базовые железки от микротик, как и коммутаторы, до нескольких десятков Мбит ipsec протянут. Для большего, есть модели с аппаратным ускорением ipsec.


            1. NiceDay Автор
              06.01.2020 05:23

              Убедили)
              Ну у меня pptp по другим причинам, а так аналогично можно хоть openvpn прикрутить, была бы поддержка на стороне роутера.


  1. kilgur
    05.01.2020 09:52
    +1

    Подскажите, где взять “дешевый VPS за 4 евро с характеристиками: 2 core CPU 2.4GHz, 4GB RAM, 300 GB HDD"?
    У меня в хетцнере — 1/2/20 за 3 евро — прочитав про вашу, моё земноводное проснулось и мешает мне дышать :-) в scaleway — аналогичные ценники, российские хостинги предлагают дороже...


    1. ivanbolhovitinov
      05.01.2020 10:23
      +1

      Похоже на contabo.com/?show=vps


      1. kilgur
        05.01.2020 10:54
        +1

        Похоже, да. Спасибо. Пойду пробовать.


      1. NiceDay Автор
        05.01.2020 14:00
        +1

        да, он самый.


  1. Nomad1
    05.01.2020 12:03

    А еще нежелание докупать к этому ничего, что стоило бы дороже патчкорда.

    Каждый раз, когда вижу подобное высказывание, а затем десяток страниц собственных решений (включая пайку устройств, настройку нескольких серверов, пересборку ядра и патчинг софта), задаюсь вопросом — неужели ваше время на эти эксперименты стоило меньше китайского регистратора за 1500р?


    1. drWhy
      05.01.2020 12:25

      Но опыт, сын ошибок трудных, чего-то да стоит.
      У меня другой вопрос: есть множество стандартных протоколов для передачи видеопотока без задержек. Как же получается, что самопальный скриптик может давать более стабильный результат, чем стандартная прошивка, растиражированная на тысячах устройств?


      1. Nomad1
        05.01.2020 12:33
        +1

        Как же получается, что самопальный скриптик может давать более стабильный результат, чем стандартная прошивка, растиражированная на тысячах устройств?
        Стандартная прошивка рассчитана под максимально широкие запросы и усредненные цели всех возможных пользователей — локальный архив разумного размера, поддержка 16+ устройств, h.265 кодек для экономии трафика, захват видео с не самых адекватных камер по RTSP c UDP Multicast потоком и т.д. Самопальный скрипт же ставит во главе угла какую-то одну задачу — максимально быстро отфорвардить чистый RTSP поток по TCP без перекодировки с нормальной камеры и без локального хранилища.
        Примерно, как костюм, сшитый в ателье провинциального городка может на вас сидеть в разы лучше, чем модный Армани, но под универсальную фигуру.


      1. NiceDay Автор
        05.01.2020 16:51

        Так протокол не мой же, просто проприетарный и очень мало реализаций в свободном доступе.
        И все из них оверкилл или делают немного не то, что мне хотелось.


        1. drWhy
          06.01.2020 11:45

          Скрипту — хвала, как и вашим желанию и способности довести до ума функциональность чужого продукта. Производителю, соответственно, хула за эту самую недоведённость, ведь допиливание функциональности прошивки продукта — и способ привлечения потребителей к продукции торговой марки, и, в некотором роде, обязательство перед покупателями устройств.


          1. NiceDay Автор
            07.01.2020 04:36

            Та софта у них хватает, и под linux тоже, но насколько я щупал — все под десктоп, с гуем.
            Есть у них и своё облачное решение, где камера сама будет лить в их облако, все настраивается "далее — далее — готово", да и стоит, ну да, дороже моего решения, но я б не сказал что вот прям критично.
            Но мне больше контроля хотелось, лить это все куда-то в своё облако или куда захочу. Да хоть себе на гуглдиск или в вк. Можно дублировать поток, гнать через ffmpeg и создать, например, версию со скоростью 20х и версию, со скоростью 1х. В общем, простор для извращений гораздо шире получается:)


    1. NiceDay Автор
      05.01.2020 17:03

      Наверное, главное в таких историях это желание реализовать придуманную схему или провернуть какой-то интересный для себя трюк, а не погоня за экономией все же.
      Мало кто будет заниматься такими извращениями, не получая от этого хоть какой-то компенсации (морального удовлетворения, опыта), окромя той толики сэкономленных денег.

      Я практически уверен, что мой провайдер бесплатно или за символическую сумму предоставил бы мне белый ip, стоило только попросить. И вся эта история свелась бы к пробросу портов на роутере и установке пароля чуть сложнее, чем 123456, что вполне соответствуют моему представлению о секьюрности тех данных, которые я передаю

      смотреть как соседские коты на участке гадят.


      Но это же не интересно, так ничему не научишься. Про это не напишешь статью на хабр и не получишь интересное обсуждение, где кто-то расскажет свою историю, а кто-то предложит лучшие альтернативы.


      1. Nikopol25
        06.01.2020 12:32

        Сейчас с белыми ip вообще проблема. У меня ростелеком выдает как динамический белый ip так и серый. С серым у борюсь с помощью скрипта, если выдается определенный ip из определенной под сети, то происходит разрыв соединения и снова подключение. Звонил в ростелеком, спрашивал насчет статического ip, они сказали что частным лицам теперь не выдают их.


  1. iDm1
    05.01.2020 21:53
    +2

    мы можем взять на место роутера TP-LINK 2 что-нибудь, поддерживающее 4G свисток

    Если TP-Link с USB, то можно прошить в него OpenWrt и поддержка 3G/4G появится. А если этот TP-Link еще и с производительным процессором, 8 и более мегабайтами flash, 64 и более мегабайтами оперативной памяти, то в теории всё можно реализовать на нём, в том числе и запись. Получится DIY IP-видеорегистратор.
    Хотя готовые коммерческие решения от тех же Hikvision или Dahua все равно сравнимы по цене и предпочтительнее по удобству, функционалу и надежности.


  1. kbaa
    06.01.2020 03:04

    нежелание докупать к этому ничего, что стоило бы дороже патчкорда

    ух как же я запарился в своё время объяснять людям, что камеры по 1000р с алика и домашний тп/д-линк — это далеко не самая лучшая основа для надежного видеонаблюдения
    ЗЫ: посмотрел что за Partizan, и очень оно похоже на типовой китайский ноунейм с шильдиком под заказчика. Как выше написали, решения от тех же Hikvision или Dahua стоят сопоставимо, но там и гарантия, и поддержка, и (не уверен насчет dahua, но у хика — точно) неплохой форум с дельными советами и кастомными прошивками


    1. NiceDay Автор
      06.01.2020 05:59

      камеры по 1000р с алика

      Ну у меня не совсем за 1000р и не не то, что бы с алика.
      По отзывам и ценам что-то примерно сопоставимое с теми же Hikvision и Dahua.

      домашний тп/д-линк

      Не знаю на счет D-Link вообще, но TP-Link бывает разный. да и если от него не требуется ничего, кроме как пакеты по сети гонять, как в моем случае.

      У меня ситуация, когда мне не очень нужна надежность. Поэтому pptp, tp-link, partizan.
      Но, окей, давайте представим, что мы берем не TP-LINK и Partizan, а Cisco или Mikrotik и хваленый Hikvision. А вместо PPTP какой-нибудь IKEv2 или OpenVPN.
      Чем схема из поста хуже, чем стационарный регистратор или отправка видео по фтп на удаленный сервер?


      1. kbaa
        06.01.2020 16:34

        именно надежностью и хуже
        когда один раз для себя сделал — оно может не так заметно, если работает, чем когда занимаешься этим постоянно и видишь статистику отказа разного железа. лично я в итоге выбрал чуть мЕньшую прибыль на чуть более дорогом оборудовании, но зато намного бОльшую вероятность, что клиент позвонит не с тем, что «у нас тут что-то не работает, приезжайте почините», а сделать следующий заказ


        1. NiceDay Автор
          07.01.2020 04:51

          Так я вам и говорю — а что, если взять нормальное, качественное оборудование, но на нем сделать то, что описано в посте — будет ли эта схема хуже классических вариантов?


  1. Rim13
    06.01.2020 10:03

    А код самого скрипта можно увидеть?


    1. NiceDay Автор
      07.01.2020 04:53

      Да, я на днях причешу более-менее и постараюсь написать статью.