Qual é a melhor maneira de acomodar vários dispositivos que desejam usar o mesmo endereço IP fixo na mesma LAN?

6

Suponha que eu tenha um dispositivo compatível com ethernet que tenha um endereço IP codificado nele. Eu tenho um software que funciona com o dispositivo, que pode ser configurado para funcionar com praticamente qualquer endereço IP para o dispositivo, mas como dito, o dispositivo sempre vem com o mesmo endereço fixo.

Agora, eis o problema: suponha que eu queira usar mais de um desses dispositivos na minha rede. Um exemplo de dois é suficiente para ilustrar o problema. Obviamente, há um conflito imediato de IP. Eu poderia executar duas instâncias do software, mas não há como diferenciar qual instância do software deve ser associada a qual dispositivo.

Eu acho que o que pode funcionar é usar um dispositivo capaz de camada 3 essencialmente para fazer a tradução de endereços de rede, mas eu não preciso de uma LAN inteira, como a maioria dos roteadores de commodities parece projetada para fazer. O que eu realmente gostaria de fazer é aplicar o NAT estático em uma base por porta. Eu gostaria de dizer ao roteador (?), "Você vê este dispositivo plugado na porta 2, que acha que é 10.1.1.1? Faça parecer 192.168.1.2, e este outro plugado na porta 3, que também pensa que é 10.1.1.1 - faça aquele um parecido com 192.168.1.3 ".. e assim por diante. (assumindo, claro, que o resto da minha LAN é 192.168.1 / 24)

Eu trabalhei com um 'switch' que faz VLANs e domínios de roteamento, mas não parece ter a capacidade de traduzir endereços entre as VLANs. As restrições de espaço e custo impedem a dedicação de um roteador com capacidade de NAT inteiro para cada dispositivo.

Então, esse tipo de coisa é possível? Em caso afirmativo, que tipo de dispositivo é necessário para obtê-lo? Heck, talvez o switch que eu estou trabalhando com o can faça isso, eu simplesmente não sei exatamente o que procurar e não o reconheci! Mas se simplesmente não for feito, eu gostaria alternadamente de saber porque não, para descobrir onde a falha em meu pensamento seria. Não parece impossível, no entanto.

    
por JustJeff 15.05.2012 / 18:09

4 respostas

3

Isso pode ser feito. Na verdade, eu mesmo fiz isso no ano passado.

3 unidades Airco com monitoramento de LAN que cada uma insistiu em ser 10.0.0.2 e esperam que o gateway padrão seja 10.0.0.1 e a sub-rede 255.0.0.0. Pode ser alterado, mas apenas pelo fabricante que não está mais no negócio.

Comprar novos não era uma opção: unidades industriais com cerca de US $ 100.000 por peça.

O pior: a comunicação tinha que ser bidirecional: acesso remoto à interface web no dispositivo e precisava ser capaz de enviar mensagens syslog por conta própria.

O truque é que você precisa de vários roteadores NAT para que isso funcione. Um único roteador simplesmente não pode lidar com a LAN downstream tendo a mesma sub-rede ip. (Pelo menos, nenhum equipamento que eu já vi ...)

O que eu fiz foi comprar 3 barato dos roteadores de prateleira (D-Link DIR-615). Coloque cada uma das unidades atrás do seu próprio roteador. Configure cada roteador para ser 10.0.0.1 no lado da LAN e faça o encaminhamento de porta para HTTP para o endereço 10.0.0.2. O lado de WAN de cada roteador foi na LAN regular onde cada um tem seu próprio endereço IP normal.

Para se conectar a uma unidade, simplesmente aponto um navegador da Web para o WAN-ip do roteador e o encaminhamento de porta faz o resto. Mensagens syslog (de saída) dos dispositivos obtêm NATted e parecem vir dos 3 roteadores.

A única desvantagem é que, para reconfigurar os D-Links, preciso conectar um PC ao lado da LAN de cada um, para poder acessar a interface de gerenciamento baseada na Web do roteador. (O D-link pode, na verdade, executá-lo na interface de gerenciamento no lado da WAN, mas até onde eu poderia dizer apenas na porta 80, o que teria interferido no encaminhamento da porta.)

    
por 15.05.2012 / 20:54
3

Como todos os dispositivos terão o mesmo IP real, você precisará fazer algum tipo de mascaramento ou NAT estático.

Uma solução seria colocar cada dispositivo (switchport) em uma VLAN separada e rotear entre as redes. O switch precisaria ser capaz de fazer nat estático em uma base por porta.

Outra solução pode ser fazer uma máquina linux em um membro de porta de todas as VLANs e utilizar IPs virtuais e fazer a parte de roteamento / nat no linux. Iptables podem fazer NAT.

    
por 15.05.2012 / 19:46
1

Se o endereço IP fixo não se sobrepor a um host válido em seu segmento, eu simplesmente os conectaria e configuraria endereços falsos para eles no host executando o software de gerenciamento. Basta adicionar uma entrada arp estática ao endereço mac dos dispositivos específicos e agora você pode tê-los no segmento "usando" endereços diferentes.

Eu consideraria isso um hack, mas desde que você sugeriu outras razões pelas quais você não poderia resolver o problema diretamente, isso pode se encaixar.

    
por 29.05.2012 / 08:00
0

Eu acredito que há uma solução muito mais simples do que as propostas aqui.

Requisitos: seus dispositivos, 1 switch (capaz de acesso e acesso VLAN, presumo cisco para simplificar), 1 PC linux. Eu suponho que o endereço IP de onde esses dispositivos são alcançados não importa (se isso acontecer, isso se torna ainda mais "divertido").

Assumo que todos os dispositivos de destino são executados no static 10.0.0.2 , gateway 10.0.0.1 , máscara 255.255.255.0 (veja outra resposta aqui).

No switch, conecte a porta 1 ao primeiro dispositivo:

interface Gi0/1
  switchport mode access
  switchport access vlan 10

No switch, conecte a porta 2 ao segundo dispositivo:

interface Gi0/2
  switchport mode access
  switchport access vlan 20

No switch, conecte a porta 3 ao PC que controlará:

interface Gi0/2
  switchport mode trunk
  switchport trunk allowed vlan 10,20

Agora já temos uma separação de camada de link, mas infelizmente isso não termina aqui.

No seu PC linux, configure 2 interfaces virtuais. Os comandos exatos para fazer isso são incluídos mais abaixo.

endereço IP eth0.10 10.0.10.1 255.255.255.0 eth0.20 endereço ip 10.0.20.1 255.255.255.0

E agora vem a diversão, como muita diversão. NICs virtuais, VRF, iptables e muitas rotas!

# First create 2 vrf for both devices
ip link add device1 type vrf table 1
ip link add device2 type vrf table 2
ip link set dev vrfdevice1 up
ip link set dev vrfdevice2 up

# Second, create vlan device
ip link add link eth0 name eth0.10 type vlan id 10
ip link add link eth0 name eth0.20 type vlan id 20

# Add the vlan to the correct vrf
ip link set eth0.10 master vrfdevice1
ip link set eth0.20 master vrfdevice2

# Assign them proper IP address (unique)
ip addr add 10.0.10.1/24 dev eth0.10
ip addr add 10.0.20.1/24 dev eth0.20

# Add the route in the **normal** route table to these devices (so normal kernel can work with it)
ip route add 10.0.10.0/24 dev eth0.10
ip route add 10.0.20.0/24 dev eth0.20

# Add the route to the targets on both VRF
ip route add 10.0.0.0/24 dev eth0.10 table 1
ip route add 10.0.0.0/24 dev eth0.20 table 2

# Verify your routes in the tables!
ip -br route show table 1
  10.0.0.0/24 dev eth0.10 scope link
  10.0.10.0/24 dev eth0.10 proto kernel scope link src 10.0.10.1
ip -br route show table 2
  10.0.0.0/24 dev eth0.20 scope link
  10.0.20.0/24 dev eth0.20 proto kernel scope link src 10.0.20.1

Agora vem a diversão real , tabelas ip!

iptables -t nat -A OUTPUT --destination 10.0.10.2 -j DNAT --to-destination 10.0.0.2 --out-interface vrfdevice1
iptables -t nat -A OUTPUT --destination 10.0.20.2 -j DNAT --to-destination 10.0.0.2 --out-interface vrfdevice2

E é isso! Eu acho que. Eu verifiquei isso com o wireshark que funciona ...

Comando dado: telnet 10.0.10.2

Saída Wireshark: ARP: Quem tem 10.0.0.2? Informe 10.0.10.1

E novamente: telnet 10.0.20.2

Saída Wireshark: ARP: Quem tem 10.0.0.2? Informe 10.0.20.2

Este tem sido um esforço bastante grande, se alguma coisa te ajudou, por favor me avise e revele a resposta. Na verdade, não precisamos de muitos roteadores caros, o VRF pode consertar a maior parte disso, especialmente em combinação com interfaces virtuais! A diversão é que agora tudo isso pode ser executado dentro do Linux, coisas legais

    
por 27.11.2018 / 14:55