É possível ter uma caixa Linux com 2 adaptadores Ethernet, conectados a 2 redes com o mesmo intervalo IP (não é necessário roteamento)?

1

Carregue comigo. Isso está relacionado a esta pergunta sobre estouro de pilha .

Minha coisa do Linux (na verdade, um BeagleBoard) tem duas interfaces, eth0 e eth1. Ele precisa se conectar à rede de um cliente na eth0 (faixa de endereços desconhecida, pode ser DHCP, provavelmente 192.168.0.x). Meu software também precisa se conectar a outro dispositivo na eth1 por meio de um link privado (ou seja, apenas dispositivo para dispositivo). Eu quero manter a rede privada totalmente separada - não deve ser visível na rede principal. Apenas meu próprio código no Beagle estará falando com o dispositivo na eth1.

Eu descobri como fazer meu código C ligar um soquete a uma interface específica, bem como a um endereço IP. Eu também posso colocar o link privado em uma sub-rede separada para a rede principal e tudo fica feliz.

No entanto, como não sei o intervalo de endereços da rede principal e desejo usar endereços IP fixos para meu link privado (por simplicidade), como posso garantir que os intervalos de endereços não colidam? Eu tentei colocar o dispositivo privado no mesmo endereço IP como algo na rede principal (para um teste), o que causou problemas de roteamento.

É possível configurar roteamento para que endereços IP duplicados (na rede principal e em minha rede privada) funcionem (já que posso especificar a interface e o endereço IP)? Ou essa conversa maluca? Eu não preciso realmente "encaminhar" qualquer coisa entre as redes e meu dispositivo privado não precisa ver a rede principal. Eu só preciso que funcione mesmo se os endereços IP forem iguais.

Como alternativa, posso usar um dos intervalos de endereços IP reservados no meu particular para que eu saiba que ele não entrará em conflito com a rede principal?

Eu tenho procurado muito por uma resposta para isso, mas parece uma coisa incomum de se fazer e todas as respostas assumem que as duas interfaces Ethernet se conectarão a diferentes sub-redes.

Alguma ideia? Incluindo fazer de outra maneira ... Obrigado!

    
por Jeremy 29.08.2013 / 04:15

1 resposta

2

Duas partes; Primeiro o lado específico do Linux:

Crie sua interface sendo muito cuidadosa para que sua interface interna não afete a tabela de roteamento linux. Os comandos netstat e ip devem ser seus amigos na análise das informações da rota.

Uma vez que sua interface não é globalmente roteável, vá em frente e ligue-se a essa interface usando setsockopt depois de criar o soquete. Estas são as duas opções que você provavelmente precisará:

SO_BINDTODEVICE
SO_DONTROUTE

Veja também linux / if.h.

Mais fácil, mas não uma resposta completa à sua pergunta; Use o IPv6.

    
por 16.01.2014 / 16:24