Домашнее видеонаблюдение. Схема ведения видеоархива без домашнего регистратора

    Я уже довольно давно хотел написать статью о скрипте для работы с камерой через 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, так что нужно куда-то девать ресурсы), предоставляют гораздо меньше контроля, а так же не очень удовлетворительное качество.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 35

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

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

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

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

        Которая пишет на hdd, который стоит еще сколько-то, верно?
        А роутер и VPS уже были и стояли практически бесхозными.
        Я сэкономил 1400 рублей, на пару шоколадок хватит:)
          +1
          откинем регик, но ip камеры сами могут отправлять видео на ftp, на всех китайских камерах которые я встречал эта функция была и никаких туннелей даже не надо при динамическом белом ip. VPN я поднимал для управления реле, котлом и тд.
          Сейчас 8 камер для видео наблюдения частного дома не так уж и много.
            0

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

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

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

                    0

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

                      0

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

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

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

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

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

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

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

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


                    Но это же не интересно, так ничему не научишься. Про это не напишешь статью на хабр и не получишь интересное обсуждение, где кто-то расскажет свою историю, а кто-то предложит лучшие альтернативы.
                      0
                      Сейчас с белыми ip вообще проблема. У меня ростелеком выдает как динамический белый ip так и серый. С серым у борюсь с помощью скрипта, если выдается определенный ip из определенной под сети, то происходит разрыв соединения и снова подключение. Звонил в ростелеком, спрашивал насчет статического ip, они сказали что частным лицам теперь не выдают их.
                    +2
                    мы можем взять на место роутера TP-LINK 2 что-нибудь, поддерживающее 4G свисток

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

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

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

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

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

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

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

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

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

                            0
                              +1

                              Благодарю за развёрнутый ответ в виде отдельного поста.

                            0
                            Думается, после возникновения ситуации взлома/проникновения и т.д. очень важным будет история видеозаписи. И удобство работы с историей — быстрый поиск, экспорт ролика и т.д. При «колхозе» осуществить такое затруднительно, плюс, как уже говорилось, важна продолжительность наработки на отказ. Поэтому вендорный видеорегистратор кошернее всего, ИМХО. Алерты о состоянии железа, доступ из мобильных приложений и т.д, удобный поиск, экспорт данных…
                            Из своего опыта — из бросового компа с мамкой формфактора ITX был сделан видеорегистратор для строящегося частного дома — linux + сервер Ivideon с бесплатным тарифом + 3 IP камеры, все добро было уложено в картонную каробку и прицепленно внутри под крышу :) Когда достроится — все передет на брендовый.
                            P.S. и сложно сейчас найти камеру, которая не могла бы прокинуть поток в свое облако, чтобы можно было забрать его оттуда. А вот лет 5 назад, да, приходилось изгаляться через VPN или прокидыванием портов.
                              0
                              У меня видео, например, льется в приватную группу в вк (хотя с таким же успехом можно на гуглдиск, ядиск, в фейсбук, на ютуб или хранить на сервере. а можно все вместе сразу), разбивками на час с именем «YmdHis» начала записи. История записи в вк — сколько влезет. Я в лимит еще не упирался, но даже если это пусть 2000 записей на группу, то при 1 записи длинной час это почти 3 месяца. Мне кажется, что достаточно.

                              Поиск по времени — каждый из перечисленных сервисов имеет строку поиска, ввести туда 2019123118 и найти запись за нужный час — не проблема. Заливать параллельно еще ускоренную в 2-4-8-512 раз, для быстрого просмотра — тоже проще простого.
                              И скачать не сложно — кнопочкой «скачать».

                              А просмотр — тоже пожалуйста, зайти в вк или на гуглдиск можно хоть с утюга. Нужно в реальном времени — есть RTSP, клиентов под Android, iOs или вообще всё что угодно — пруд пруди. Решений для ретрансляции RTSP в web — море.

                              Алерты о состоянии железа?
                              if (!TcpSocket.connect('10.0.5.100:49153')) {
                                  // отправить на почту
                                  // отправить смску
                                  // позвонить через твиллио участковому и в мчс?
                              }

                              Ваше решение так может? :)

                              Конечно, я не говорю, что всем стоит бежать арендовать впс (на contabo конечно же — минутка рекламы) и, вооружившись моим гайдом, строить франкенштейнов. Это вообще не гайд, это история, байка. Но настаивать, что в частном случае мое решение может иметь смысл, я все же продолжу.

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

                              Да, полным полно. У каждого вендора свое облако, но не хочу:)
                              Может, потому что именно в этом месте у меня обостряется синдром NIH, не знаю. Но не хочу.
                                0
                                Простите, а где Вы физически запускаете?
                                if (!TcpSocket.connect('10.0.5.100:49153')) {
                                // отправить на почту
                                // отправить смску
                                // позвонить через твиллио участковому и в мчс?
                                }
                                  0
                                  На любом впс.
                                  Конечно, дисконнект или невозможность подключиться будут свидетельствовать о любом разрыве связи. В том числе и у хостера (но это маловероятно, в целом).
                                  Поэтому без резервного канала интернета и ИБП, МЧС с участковым, конечно, вызывать я бы не стал:) Но это же утрированный пример.

                                  В каких случаях камера пропадет из поля виденья: отключился свет, пропал интернет, проблемы с оборудованием. Или к нам лезут воры и они перерезали нам электрический кабель, оптоволокно и оторвали камеру.
                                  В первом случае можно просто зайти и посмотреть сохранившуюся запись — у меня скрипт зальет запись до момента отключения в удобное мне место, так что в качестве обработчика достаточно просто сообщения в телеграм, например. Можно, кстати, в телеграм и залить видеозапись сразу, например, последние 5 минут до обрыва.
                                  Если поставить ИБП и резервный канал связи, то, скорей всего, у нас уже второй случай и желательно более назойливое уведомление.

                                  А поскольку у нас полноценный сервер c полноценным linux на борту и характеристиками, близкими к домашнему пк (ну или что мы за сервер там держим) мы можем всё что угодно. Собрать td-lib и звонить самому себе в телеграм при подозрительных ситуациях, слать смски/звонки через twilio или любой другой сервис. На что фантазии хватит.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое