Como posso definir um IP estático no meu dispositivo IoT e ter se trabalhar em qualquer rede automaticamente

0

Estou a construir um dispositivo de IoT em casa e quero poder enviar este dispositivo para qualquer pessoa que tenha definido previamente um IP estático e tudo o que teria de fazer é ligar à Internet e estar pronto para o fazer. Estarei executando um servidor localmente para monitorar cada robô, então pensei em definir um IP estático em cada RPi e, uma vez entregue ao cliente, eles simplesmente precisam obter seu RPi em sua rede e fazer algum encaminhamento de porta. Então eles iriam baixar o aplicativo e emitir comandos para o robô (estou usando suas informações de login para saber qual RPi controlar). A questão é que, se o IP mudar, perderia as comunicações para esse dispositivo remoto. Em outras palavras, existe uma maneira de conectar meu servidor local a todos os dispositivos remotos?

Eu tenho uma experiência muito limitada com networking, estou invadindo meu caminho e posso estar olhando para isso da maneira errada. Qualquer ajuda é muito apreciada!

    
por Melomaniac 18.01.2017 / 02:19

3 respostas

1

Você precisa implementar um esquema onde seu RPi seja um cliente para seu servidor.
O que você realmente precisa - é um IP estático em sua casa / empresa ou qualquer VPS ou DDNS (serviço de DNS dinâmico) barato. Dessa forma, ao enviar seu RPi para seus clientes, configure-os para configurar o IP automaticamente por meio do DHCP e adicione para iniciar um comando que se conecte ao servidor via SSH (preferencialmente usando autenticação de chave pública) com configuração SSH invertida. Desta forma, você pode se conectar a qualquer um dos seus RPis na porta reversa em seu próprio servidor. Independentemente de onde o seu RPi está localizado, você sempre poderá acessá-los (é claro, se eles não estiverem atrás de firewalls profissionais que restringem conexões de saída da LAN sem autenticação).

    
por 18.01.2017 / 03:25
0

O IPv4 externo de uma rede doméstica está sob o controle de seu ISP e pode mudar a qualquer momento se ele for dinâmico, o que é a maioria das conexões residenciais com a Internet.

Existem vários provedores de provedores "DNS Dinâmico" (como NoIP) que permitem que você crie uma conta, escolha um nome de domínio DNS em uma lista e permita que um "Cliente de Atualização Dinâmica" se conecte a ele e atualize o registro DNS. Seu dispositivo IoT teria que executar este cliente.

Esses provedores geralmente têm um nível gratuito que oferece um ou dois nomes gratuitamente, exigindo que você pague se quiser mais nomes. Honestamente, isso não é terrivelmente escalável para mais do que alguns dispositivos.

Se essa for uma implantação grande de dispositivos, a melhor coisa a fazer se você quiser que seus dispositivos "plug and play" realmente projetem seus dispositivos para que eles iniciem a conexão com um servidor central em vez de confiar no servidor e mova seu servidor para um serviço de hospedagem não residencial ou provedor de nuvem VPS, como Amazon, Azure, etc.

    
por 18.01.2017 / 02:35
0

Aqui está uma atualização, caso alguém tenha o mesmo problema. Conforme recomendado, os RPis são configurados como clientes. Acabei usando o pacote de nó ip para atualizar o ip de cada robô no meu banco de dados. Cada cliente, em seguida, puxa o ip do banco de dados para se conectar.

Aqui está um trecho do meu código. O servidor é disparado em boot .

var ip = require('ip');
var mongo = require('mongodb')
var MongoClient = mongo.MongoClient

var url = 'your_url'
var name = "example"
function updateIP() { // update ip if need be
  var my_ip = ip.address()
  console.log(my_ip)
  MongoClient.connect(url, function(err, db){
    console.log(err)
    var robots = db.collection('robots')
    robots.findAndModify(
       {name: name},
       [['name', 1]],
       {$set: {ip: my_ip}},
       {update: true})
  })
}
    
por 27.11.2017 / 22:18