Vários endereços IP dentro da mesma sub-rede no mesmo host

7

É possível (bem, o texto real deve ser "É correto") ter vários endereços IP que pertençam à mesma sub-rede, no mesmo host?

Aqui está um exemplo:

#Host 1
eth0   -> 10.0.0.1/24
eth1   -> 10.0.0.2/24
eth1:1 -> 10.0.0.3/24

Tenho a intuição de que isso não funciona devido a problemas de roteamento, mas não consigo explicar por que penso assim.

Então este padrão está correto? Se sim, é comum? Quais podem ser os problemas relativos a tal configuração?

    
por ereOn 03.11.2010 / 16:16

8 respostas

5

Sim, claro, literalmente não há problema em fazer isso - pode ser necessário ter um pouco de cuidado com a configuração do seu gateway padrão, mas isso realmente não é um problema. Se o tempo real era quando você tinha que configurar servidores da Web com vários sites (estamos falando há muito tempo).

    
por 03.11.2010 / 16:20
4

Existe um problema comum entre as expectativas das pessoas nesse tipo de configuração. Com vários endereços atribuídos na mesma sub-rede, normalmente, todas as comunicações de saída parecerão vir de um único endereço.

Portanto, as respostas às conexões de entrada devem estar bem. As respostas devem vir do endereço para o qual a conexão de entrada foi feita. Mas se você espera algum processo, que será fazer conexões de saída, para usar um endereço específico diferente do primeiro, então você precisará certificar-se de que você pode configurar especificamente o IP para ligar também no aplicativo.

    
por 03.11.2010 / 17:24
3

Eu tenho uma configuração complicada em algum lugar que usa esse tipo de rede. Eu tenho duas interfaces internas e uma interface externa para a Internet. (isso está prestes a mudar para duas interfaces externas em sub-redes diferentes e na interface interna dividida em duas interfaces internas, mas seguindo o mesmo caminho) De qualquer forma - para a resposta!

digamos que você tenha duas interfaces internas em:

eth0 192.168.1.2
eth1 192.168.1.3

Você usa um uplink interno para a Internet (roteador) em 192.168.1.1

Assim, sua tabela de roteamento padrão será semelhante a (comando: netstat -rn )

Dest            Gw         Genmask   Flags  ... ... Iface

0.0.0.0     192.168.1.1    0.0.0.0    UG           eth0

192.168.1.0  0.0.0.0     255.255.255.0 U           eth0

192.168.1.0  0.0.0.0     255.255.255.0 U           eth1

Aqui está o seu problema, toda a saída irá via eth0 , porque é o primeiro hit na sua tabela de roteamento. Então, se você usar outro computador (ou mesmo esta mesma caixa) para pingar 192.168.1.3 ( eth1 ), você não receberá uma resposta? Por quê? Porque está vindo de 192.168.1.2 .

Você terá que usar iproute2 para configurar tabelas de roteamento individuais para cada dispositivo. Dessa forma, quando um dispositivo recebe algo na cadeia INPUT , ele responde por meio do mesmo dispositivo.

edite /etc/iproute2/rt_tables add:

1  my_eth0

2  my_eth1 

execute então o seguinte:

ip route add 192.168.1.0/24 dev eth0 table my_eth0

ip route add default via 192.168.1.1 dev eth0 table my_eth0

ip route add 192.168.1.0/24 dev eth1 table my_eth1

ip route add default via 192.168.1.1 dev eth1 table my_eth1

Agora adicione as regras para as tabelas a serem usadas executando:

ip rule add from 192.168.1.2 table my_eth0

ip rule add from 192.168.1.3 table my_eth1

Isso dirá ao seu sistema que, quando receber uma solicitação em eth0 , use a tabela de roteamento my_eth0 para responder. Quando receber uma solicitação em eth1 , responda usando a tabela de roteamento my_eth1 . Quando você obtiver os comandos trabalhando, coloque-os em seu arquivo /etc/rc.local e torne o rc.local executável executando sudo chmod u+x /etc/rc.local dessa maneira que suas rotas não são eliminadas quando você reinicializa. Divirta-se!

    
por 10.08.2013 / 08:47
2

Está perfeitamente bem, mas fazê-lo como você está - com mais de uma interface física na mesma sub-rede conectada ao mesmo switch - não é recomendado. O Linux geralmente lida bem com isso, mas alguns sistemas operacionais (por exemplo, Solaris) realmente não gostam disso.

Coloque todos os seus endereços em uma interface física (eth0, eth0: 0, eth0: 1, etc.) e conecte somente isso. Se você deseja conectar várias interfaces para desempenho, procure a ligação e, em seguida, sobrecarregue as conexões. interface (bond0, bond0: 0, bond0: 1 e assim por diante).

    
por 03.11.2010 / 17:02
2

Não, essa configuração não é recomendada apesar da crença popular.

Ter interfaces virtuais (por exemplo: eth1: 1) na mesma sub-rede que a física (por exemplo: eth1) é uma configuração muito comum e útil que não apresenta problemas.

No entanto, ter interface física diferente na mesma sub-rede (ou pior, em sub-redes diferentes, mas no mesmo domínio de broadcast) pode levar a problemas devido a entradas ARP não determinísticas. Isso se aplica pelo menos ao Solaris e ao Linux. Se, por algum motivo, você precisar fazer isso de qualquer maneira, é recomendável ou necessário ajustar o comportamento do ARP, ou seja, desabilitar o ARP em uma das interfaces ou configurar o ARP para limitar suas respostas de uma interface física aos seus endereços IP correspondentes. Procure por arp_filter no link . Outra maneira é definir a máscara de rede como / 24 em todas as interfaces, exceto uma.

No Solaris, uma maneira suportada de configurar várias interfaces na mesma sub-rede seria usar IPMP (multipathing IP).

Por fim, essa restrição não se aplica se as interfaces físicas não estiverem compartilhando a mesma pilha de IPs (por exemplo, zonas de IP exclusivas do Solaris) ou isoladas pela marcação de VLAN 802.1Q.

    
por 04.11.2010 / 00:21
1

É possível fazer isso. Eu usei isso antes.

Eu tenho um aplicativo que precisa usar diferentes endereços IP de origem ao se conectar a um servidor remoto. Isso é importante no meu caso para superar a limitação do número de conexões permitidas por IP que foi imposta pelo servidor remoto.

Eu configurei vários endereços IP na mesma interface e meu aplicativo foi configurado para usar esses IPs no modo round-robin.

    
por 03.11.2010 / 16:26
1

Sim, isso funcionará.

Como sugerido nas outras respostas, o propósito real de fazer isso é servir diferentes serviços nos diferentes endereços IP.

Se você tivesse o IIS e o Apache na mesma máquina e quisesse executá-los na porta 80, precisaria definir um no 10.0.0.1 e o outro no 10.0.0.2, pois os dois não poderiam ser exibidos porta 80 do mesmo endereço IP.

Realmente não é uma questão de roteamento, pois isso só entra em ação na máquina que chega à rede a partir de programas genéricos, como navegadores web, ping, etc. Nessas situações, sempre será usando o mesmo endereço da fonte.

Na tabela de roteamento, a rota especifica a interface a ser usada, de modo que qualquer endereço esteja vinculado à rota de qualificação.

    
por 03.11.2010 / 16:57
1

Vou jogar um pouco de uma advertência aqui. Ou seja, que as ferramentas usuais do Linux lhe darão problemas. Eles não lidam bem com as múltiplas interfaces. Para fazer isso, você terá que usar o iproute2 . Essa é uma ferramenta menos comum que o método usual ifconfig / route. Sem isso, você vai ver um comportamento estranho e incorreto, como um NIC respondendo ao tráfego dos outros.


- Christopher Karel

    
por 03.11.2010 / 18:06