Os DVRs de automóveis têm sido um dos atributos obrigatórios para qualquer motorista. Pessoalmente, posso concluir sem exagero que não posso me sentir seguro ao volante sem um dispositivo tão simples. É claro que, nos últimos 10 anos, o progresso fez um progresso significativo: hoje já existem muitos fabricantes no mercado produzindo modelos decentes, e nós, os drivers, já temos muito por onde escolher.
Minha escolha recaiu sobre o registrador Neoline G-Tech X53 e houve várias razões para isso:
- está equipado com duas câmeras, uma das quais fornece uma imagem FullHD real,
- Ele foi projetado especificamente para instalação secreta,
- é totalmente controlado via Wi-Fi por meio do aplicativo no smartphone, o que é importante no contexto deste artigo e, entre outras coisas, possibilita a instalação realmente secreta sem a necessidade de subir ou remover periodicamente o bloco (por exemplo, para copiar um registro de uma unidade flash USB).
Então, como muitas vezes acontece, o apetite veio com a comida. Depois de instalar o gravador no carro, apreciei sua conveniência, experimentei e queria ter acesso a seus registros não apenas perto da máquina, onde seu sinal de WiFi é capturado, mas
geralmente em todos os lugares . Bem, ou pelo menos em casa, para começar.
Obviamente, na natureza, existem modelos de registradores que mesclam registros na nuvem sob comando, mas vinculam o usuário a essa nuvem e os forçam a pagar por ela, mas essa não é minha opção. Além disso, minha lista de desejos se sobrepunha bem aos planos de instalar um roteador WiFi com um modem no carro, portanto a tarefa parecia bastante viável.
É verdade que rapidamente ficou claro que o registrador não possui uma API documentada e o acesso a ela só pode ser obtido usando o aplicativo nativo para um smartphone. O aplicativo, por sua vez, acabou sendo muito extravagante - só funciona quando o telefone está conectado ao registrador de WiFi.
Ou seja, eu tinha que entender o que o aplicativo quer do WiFi e fazê-lo "ver" o registrador, localizado em um local completamente diferente, com a solução para todos os problemas técnicos relacionados - em geral, é assim que eu amo.
Como um roteador que distribui a Internet via Wi-Fi no carro, usei o Mikrotik RBmAP2nD (mAP) com um modem Huawei e3372h (se você conhece outras opções de orçamento nas quais é possível implementar as configurações descritas abaixo - escreva nos comentários). Como o registrador só pode distribuir seu WiFi e não pode se conectar a um ponto de acesso existente, eu tive que configurar o cliente de ponto de acesso, que deveria se conectar a ele. E logo ficou claro que o trabalho do Mikrotik como um AP e um cliente AP (na interface escrava) leva a uma distribuição instável de WiFi, por isso foi decidido emparelhar com o roteador principal outro - Mikrotik RBmAPL-2nD (mAP lite).
Aplicação de fraude
Para começar, fiz o aplicativo funcionar com o registrador por meio de uma rede WiFi completamente diferente, trabalhando na mesma máquina. Ao longo do caminho, consegui responder às perguntas - como o aplicativo reconhece a rede do registrador e como enganá-lo. Além disso, ao longo do caminho, foi possível obter uma conveniência ainda maior - agora, para trabalhar com o registrador no carro, você não precisa mudar para o Wi-Fi, no qual não há Internet.
Não descreverei detalhadamente dezenas de experimentos durante os quais cheguei a uma solução de trabalho, apenas descrevo essa solução. Portanto, o que é necessário para o aplicativo reconhecer o registrador de WiFi:
- O SSID deve se parecer com " G-Tech X5X-120 ... ", onde, em vez dos últimos pontos, existem dígitos arbitrários (letras minúsculas) no sistema numérico hexadecimal. Por exemplo, eu instalei o " G-Tech X5X-120aaa " e assim por diante. Talvez, em vez de "120", você também possa colocar algo de sua preferência, eu não tentei.
- O endereço do cliente deve ser obtido via DHCP, deve estar na sub-rede 192.168.100.0/24, o endereço do servidor (registrador) = 192.168.100.1.
O resto não é importante. Não tentei muitas outras coisas, mas sei com certeza que:
- O endereço MAC do AP e do servidor não importa.
- Se houver seções com uma MTU reduzida (por exemplo, túneis) ao longo da rota de tráfego, a conexão funcionará bem.
- A janela TCP é larga o suficiente para que o download de registros não diminua em pings, mesmo a 300ms ou mais.
Então, qual é o resultado final?
- O aplicativo deseja ter um endereço na rede 192.168.100.0/24 e conectar-se ao endereço 192.168.100.1.
- O endereço do registrador também é 192.168.100.1 e ele deseja que o cliente esteja na rede 192.168.100.0/24 (ele simplesmente não possui rotas para outras pessoas).
Isso não muda, mas queremos aprender como distribuir o aplicativo e o registrador. Portanto, você precisa atribuir o endereço 192.168.100.1 ao roteador que distribui o Wi-Fi e, para resolver os problemas com o roteamento de tráfego, é necessário inserir uma sub-rede de conexão e adicionar alguma mágica de rede. Por exemplo, assim:
Descrição:
- O aplicativo é executado em um smartphone conectado ao roteador R1. O smartphone recebe o endereço via DHCP, no nosso exemplo é 192.168.100.100.
- O endereço IP do R1 na interface WiFi é 192.168.100.1 (como o aplicativo deseja), na interface Ethernet é 192.168.99.1 (esta é uma sub-rede de encaixe).
- O endereço IP do R2 na interface Ethernet é 192.168.99.2, na interface WiFi é obtido via DHCP do registrador, em nosso exemplo é 192.168.100.150.
- Cada roteador executa DNAT na entrada e SNAT na saída, para que os pacotes em cada sub-rede tenham endereços de origem e destino que correspondam aos endereços dos roteadores de borda desta rede.
Como é a conexão:
- O aplicativo garante que ele esteja conectado ao WiFi do registrador e inicie uma conexão com o endereço 192.168.100.1, supondo que esse seja o endereço do registrador.
- R1 aceita a solicitação de conexão, executando na interface DNAT de entrada com a substituição do endereço de destino para 192.168.99.2 e na interface de saída - SNAT com a substituição do endereço de origem para 192.168.99.1.
- O R2 aceita a solicitação de conexão, executando na interface DNAT de entrada com a substituição do endereço de destino para 192.168.100.1, e na interface de saída - mascarada com a substituição do endereço de origem no endereço recebido via DHCP do registrador.
- O registrador aceita e processa a solicitação de conexão que veio do endereço emitido anteriormente via DHCP. O que foi necessário.
Um leitor atencioso já tem uma pergunta: para que tipo de tráfego eu redireciono? Começando com "todo o tráfego, exceto ssh" e ativando o log, percebi que era o
suficiente para redirecionar as portas TCP 7777, 7778 e 7779 . O aplicativo não precisa de mais nada para trabalhar com o registrador.
Passamos tráfego pela Internet
Aprendendo a enganar o aplicativo, removi o obstáculo mais difícil ao objetivo principal - organizar o acesso aos registros de qualquer lugar da Internet. Porém, para que o aplicativo em execução no telefone neste "qualquer momento" seja capaz de conectar-se ao registrador, para "enganar" é necessário cumprir todas as condições acima, e isso impõe algumas restrições. No entanto, em um endereço, os registros são necessários especialmente com frequência - eles estão em casa. Aqui começamos com um roteador doméstico.
Em casa, como você provavelmente já adivinhou, eu também tenho o Mikrotik. O roteador externo tem um endereço IP “branco” e eu usei isso para criar um túnel L2TP entre os roteadores de carro e doméstico e organizar outra sub-rede de acoplamento entre eles. Outro roteador foi adicionado ao circuito que descrevi acima e agora parece simplificado da seguinte forma:
Descrição:
- O aplicativo é executado em um smartphone conectado ao roteador doméstico R0. O smartphone recebe o endereço via DHCP, no nosso exemplo é 192.168.100.100.
- O endereço IP de R0 na interface WiFi é 192.168.100.1 (conforme o aplicativo desejar), na interface L2TP é 192.168.98.1 (sub-rede de encaixe 0).
- O endereço IP R1 na interface L2TP é 192.168.98.2, na interface Ethernet é 192.168.99.1 (sub-rede de conexão 1).
- O endereço IP do R2 na interface Ethernet é 192.168.99.2, na interface WiFi é obtido via DHCP do registrador, em nosso exemplo é 192.168.100.150.
- Cada roteador executa DNAT na entrada e SNAT na saída, para que os pacotes em cada sub-rede tenham endereços de origem e destino que correspondam aos endereços dos roteadores de borda desta rede.
Como é a conexão:
- O aplicativo garante que ele esteja conectado ao WiFi do registrador e inicie uma conexão com o endereço 192.168.100.1, supondo que esse seja o endereço do registrador.
- R0 aceita a solicitação de conexão, executando na interface DNAT de entrada com a substituição do endereço de destino para 192.168.98.2 e na interface de saída - SNAT com a substituição do endereço de origem para 192.168.98.1.
- R1 aceita a solicitação de conexão, executando na interface DNAT de entrada com a substituição do endereço de destino para 192.168.99.2 e na interface de saída - SNAT com a substituição do endereço de origem para 192.168.99.1.
- O R2 aceita a solicitação de conexão, executando na interface DNAT de entrada com a substituição do endereço de destino para 192.168.100.1, e na interface de saída - mascarada com a substituição do endereço de origem no endereço recebido via DHCP do registrador.
- O registrador aceita e processa a solicitação de conexão que veio do endereço emitido anteriormente via DHCP. O que foi necessário.
PS.Com o ponto 2, você pode facilitar um pouco se fizer DNAT imediatamente na 99ª, em vez da 98ª sub-rede, e adicionar a rota à 99ª sub-rede por meio de R1. Mas apenas descrevo a ideia geral e um exemplo de sua implementação, e há muitas maneiras de integrar tudo isso em uma rede existente.
De onde tiramos comida?
Roteadores e modem consomem um pouco, mas o suficiente para descarregar a bateria do carro para zero em 3-4 dias. Portanto, é melhor incluí-los sob demanda. E, para me encaixar no conceito de “acesso a qualquer momento”, aproveitei o fato de que o alarme Starline A96 instalado no meu carro possui, entre outras coisas, um módulo GSM, programou a inclusão de um canal adicional sob comando de um aplicativo de controle remoto ou smartphone e ligou o roteador mAP de um canal adicional e mAP lite - através de PoE desde o primeiro. Não falarei sobre isso em detalhes aqui, tudo isso é facilmente no Google, mas se estiver interessado, escreva nos comentários.
Sumário
Tendo feito tudo isso, tive a oportunidade não apenas de copiar os registros do gravador enquanto estava em casa, mas também de ver fotos das câmeras em tempo real. E tudo isso, independentemente de onde o carro esteja localizado, o principal é que seu roteador tenha uma conexão com a Internet. Isso não é perfeito?
E com um bônus agradável, obtive uma velocidade maior de copiar vídeos do que ficar sentado no carro: 1,2-1,5 mb / s contra 1 mb / s. Não sei porque.
Haverá configurações?
Sinceramente, não acho que alguém possa fazer exatamente o que está descrito. De qualquer forma, haverá alguma adaptação da solução ao que já está disponível. Mas se você realmente precisar - abaixo, você encontrará as regras nat, nas quais 99% de tudo o que foi discutido acima é implementado.
R0/ip firewall nat add action=src-nat chain=srcnat comment=AVR out-interface=l2tp-auto src-address=192.168.100.0/24 to-addresses=192.168.98.1 add action=dst-nat chain=dstnat comment=AVR dst-address=192.168.100.1 dst-port=7777,7778,7779 in-interface=wlan1 protocol=tcp to-addresses=192.168.98.2
R1 /ip firewall nat add action=masquerade chain=srcnat comment=AVR out-interface=l2tp-auto add action=masquerade chain=srcnat comment=AVR out-interface=ether2 add action=masquerade chain=srcnat comment=AVR out-interface=wlan1 add action=dst-nat chain=dstnat comment=AVR dst-port=7777,7778,7779 in-interface=l2tp-auto protocol=tcp to-addresses=192.168.99.2 add action=dst-nat chain=dstnat comment=AVR dst-port=7777,7778,7779 in-interface=wlan1 protocol=tcp to-addresses=192.168.99.2
R2 /ip firewall nat add action=dst-nat chain=dstnat comment=AVR dst-address=192.168.99.2 dst-port=7777,7778,7779 in-interface=ether1 protocol=tcp to-addresses=192.168.100.1 add action=masquerade chain=srcnat comment=AVR out-interface=wlan1