Домашнє відеоспостереження. Схема ведення відеоархіву без домашнього реєстратора

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

У нас було 2 пакети. Так, стоп, це не та історія.
У нас було 2 роутери фірми TP-LINK, вихід в інтернет за провайдерським NAT, камера спостереження Partizan вже не пам'ятаю якої моделі (зійде будь-яка IP-камера, що підтримує RSTP over TCP або DVRIP) та дешевий VPS за 4 євро з характеристиками: 2 core CPU 2.4GHz, 4GB RAM, 300GB 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 свисток, спробувати це все разом з камерою від ДБЖ (який знадобиться набагато менш ємний, ніж при використанні реєстратора), крім того запис практично миттєво передається на сервер, так що навіть якщо до вас проникнуть зловмисники, вилучити відео у них не вийде. Загалом, простір для маневрів є і все залежить тільки від вашої фантазії.

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

Джерело: habr.com

Додати коментар або відгук