Vigilância por vídeo residencial. Esquema para manter um arquivo de vídeo sem gravador doméstico

Já faz algum tempo que desejo escrever um artigo sobre um script para trabalhar com uma câmera via protocolo DVRIP, mas a discussão está relacionada às notícias recentes sobre Xiaomi me levou a falar primeiro sobre como configuro a vigilância por vídeo em casa e depois passar para os scripts e outras coisas.

Tínhamos 2 pacotes... Então, espere, essa não é a mesma história.
Tínhamos 2 roteadores da TP-LINK, acesso à Internet atrás do provedor NAT, uma câmera de vigilância Partizan não me lembro qual modelo (qualquer câmera IP que suporte RSTP sobre TCP ou DVRIP serve) e um VPS barato por 4 euros com o características: CPU de 2 núcleos de 2.4 GHz, 4 GB de RAM, HDD de 300 GB, porta de 100 Mbit/s. E também a relutância em comprar qualquer coisa além disso que custasse mais do que um patch cord.

Prefácio

Por motivos óbvios, não podemos simplesmente encaminhar as portas das câmeras do roteador e aproveitar a vida, além disso, mesmo que pudéssemos, não deveríamos fazer isso.

Ouvi do nada que existem algumas opções de tunelamento IPv6, onde parece que tudo pode ser feito para que todos os dispositivos da rede recebam um endereço IPv6 externo, e isso simplificaria um pouco as coisas, embora ainda deixe a segurança deste evento em questão, e o suporte para este milagre no firmware padrão TP-LINK é um tanto estranho. Embora exista a possibilidade de que na frase anterior eu esteja falando um absurdo completo, não preste atenção nisso.

Mas, felizmente para nós, quase qualquer firmware para qualquer roteador (na verdade, uma afirmação bastante infundada) contém um cliente PPTP/L2TP ou a capacidade de instalar firmware personalizado com ele. E a partir disso já podemos construir algum tipo de estratégia de comportamento.

Topologia

Num ataque de febre, meu cérebro deu à luz algo parecido com este diagrama de fiação:

e durante outro ataque desenhei para postar no HabrVigilância por vídeo residencial. Esquema para manter um arquivo de vídeo sem gravador doméstico

O endereço 169.178.59.82 foi gerado aleatoriamente e serve apenas como exemplo

Bem, ou se em palavras, então:

  • Router TP-LINK 1 (192.168.1.1), no qual é inserido um cabo que sai da parede. Um leitor curioso adivinhará que este é o cabo provedor através do qual acesso a Internet. Vários dispositivos domésticos estão conectados a este roteador via patch cord ou Wi-Fi. Esta é a rede 192.168.1.0
  • Router TP-LINK 2 (192.168.0.1, 192.168.1.200), no qual é inserido um cabo que sai do roteador TP-LINK 1. Graças a este cabo, o roteador TP-LINK 2, bem como os dispositivos a ele conectados, também têm acesso à Internet. Este roteador está configurado com uma conexão PPTP (10.0.5.100) ao servidor 169.178.59.82. A câmera IP 192.168.0.200 também está conectada a este roteador e as seguintes portas são encaminhadas
    • 192.168.0.200:80 -> 49151 (webmord)
    • 192.168.0.200:34567 -> 49152 (DVRIP)
    • 192.168.0.200:554 -> 49153 (RTSP)
  • Servidor (169.178.59.82, 10.0.5.1), ao qual está conectado o roteador TP-LINK 2. O servidor roda pptpd, shadowocks e 3proxy, através dos quais você pode acessar dispositivos da rede 10.0.5.0 e assim ter acesso ao roteador TP-LINK 2.

Assim, todos os dispositivos domésticos da rede 192.168.1.0 têm acesso à câmera via TP-LINK 2 em 192.168.1.200, e todos os demais podem se conectar via pptp, shadowsocks ou meias5 e acessar 10.0.5.100.

Fixação

O primeiro passo é conectar todos os dispositivos conforme diagrama da figura acima.

  • A configuração do roteador TP-LINK 1 se resume a reservar o endereço 192.168.1.200 para o TP-LINK 2. Opcional se você precisar de um endereço fixo para acesso da rede 192.168.1.0. E, se desejar, você pode reservar de 10 a 20 Mbit para isso (10 é suficiente para um stream de vídeo 1080).
  • Você precisa instalar e configurar o pptpd no servidor. Tenho Ubuntu 18.04 e os passos foram aproximadamente os seguintes (o doador foi um exemplo blog.xenot.ru/bystraya-nastrojka-vpn-servera-pptp-na-ubuntu-server-18-04-lts.fuck):
    • Instale os pacotes necessários:
      sudo apt install pptpd iptables-persistent
    • Trazemos para o seguinte formato

      /etc/pptpd.conf

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

    • Nós editamos

      /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
      
    • Adicionando credenciais a

      /etc/ppp/chap-secrets

      # Secrets for authentication using CHAP
      # client	server	secret			IP addresses
      username pptpd password *
    • adicionar à

      /etc/sysctl.conf

      net.ipv4.ip_forward=1

      e recarregue o sysctl

      sudo sysctl -p
    • Reinicie o pptpd e adicione-o à inicialização
      sudo service pptpd restart
      sudo systemctl enable pptpd
    • Nós editamos

      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

      E salve

      sudo netfilter-persistent save
      sudo netfilter-persistent reload
      
  • Configurando TP-LINK 2
    • Reservamos o endereço 192.168.0.200 para nossa câmera:

      DHCP -> Reserva de endereço — Endereço MAC — MAC da câmera, pode ser visualizado em DHCP -> Lista de clientes DHCP
      — Endereço IP reservado — 192.168.0.200

    • Portas de encaminhamento:
      Redirecionamento -> Servidores Virtuais — Porta de serviço: 49151, Porta interna: 80, Endereço IP: 192.168.0.200, Protocolo: TCP
      — Porta de serviço: 49152, Porta interna: 34567, Endereço IP: 192.168.0.200, Protocolo: TCP
      — Porta de serviço: 49153, Porta interna: 554, Endereço IP: 192.168.0.200, Protocolo: TCP
    • Configurando uma conexão VPN:

      Rede -> WAN — Tipo de conexão WAN: PPTP
      — Nome de usuário: nome de usuário (veja /etc/ppp/chap-secrets)
      — Senha: senha (veja /etc/ppp/chap-secrets)
      — Confirme a senha: senha (veja /etc/ppp/chap-secrets)
      - IP Dinâmico
      — Endereço IP/Nome do servidor: 169.178.59.82 (obviamente, o IP externo do seu servidor)
      — Modo de conexão: Conecte-se automaticamente

    • Opcionalmente, permitimos acesso remoto ao web face do roteador
      Segurança -> Gerenciamento Remoto Porta de gerenciamento da Web: 80
      — Endereço IP de gerenciamento remoto: 255.255.255.255
    • Reinicie o roteador TP-LINK 2

Em vez de PPTP, você pode usar L2TP ou, se tiver firmware personalizado, o que seu coração desejar. Escolhi o PPTP, pois esse esquema não foi construído por motivos de segurança, e o pptpd, na minha experiência, é o servidor VPN mais rápido. Além disso, eu realmente não queria instalar firmware personalizado, o que significava que tinha que escolher entre PPTP e L2TP.

Se eu não cometi nenhum erro no manual e você fez tudo certo e teve sorte, depois de todas essas manipulações

  • em primeiro lugar
    ifconfig

    mostrará a interface ppp0 inet 10.0.5.1 netmask 255.255.255.255 destination 10.0.5.100,

  • em segundo lugar, 10.0.5.100 deve fazer ping,
  • e em terceiro lugar
    ffprobe -rtsp_transport tcp "rtsp://10.0.5.100:49153/user=admin&password=password&channel=1&stream=0.sdp"

    Deve detectar o fluxo.
    Você pode encontrar a porta rtsp, login e senha na documentação da sua câmera

Conclusão

Em princípio, isso não é ruim, há acesso ao RTSP, se o software proprietário funcionar via DVRIP, você poderá usá-lo. Você pode salvar o stream usando ffmpeg, acelerar o vídeo 2-3-5 vezes, dividi-lo em pedaços de uma hora, enviar tudo para o Google Drive ou redes sociais e muito, muito mais.

Não gostei de RTSP sobre TCP, porque não funcionava muito estável, mas sobre UDP, pelos motivos que não podemos (ou podemos, mas não quero) encaminhar o intervalo de portas através do qual o RTSP enviará o stream de vídeo, não funcionará, escrevi um script que arrasta um stream sobre TCP via DVRIP. Acabou sendo mais estável.

Uma das vantagens da abordagem é que podemos pegar algo que suporte um apito 2G no lugar do roteador TP-LINK 4, alimentar tudo junto com a câmera de um UPS (que sem dúvida precisará de um com muito menos capacidade do que quando usando um gravador), além disso, a gravação é transmitida quase instantaneamente para o servidor, portanto, mesmo que invasores entrem, eles não conseguirão capturar o vídeo. Em geral, há margem de manobra e tudo depende apenas da sua imaginação.

PS: Eu sei que muitos fabricantes oferecem soluções de nuvem prontas, mas no preço elas custam quase o dobro do meu VPS (do qual já tenho 3, então preciso alocar recursos em algum lugar), fornecem muito menos controle, e também não qualidade muito satisfatória.

Fonte: habr.com

Adicionar um comentário