várias interfaces físicas com IPs na mesma sub-rede

11

Eu tenho uma caixa Linux com 9 NICs e desejo que oito deles tenham endereços exclusivos na mesma sub-rede, por exemplo:

ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0

O comportamento padrão do ARP é extremamente contraproducente neste caso, uma vez que resulta em todo o tráfego para todos os IPs que passam exclusivamente pelo eth1 , o que é exatamente o oposto do que eu quero.

Então eu vasculhei e acabei fazendo algumas mudanças no sysctl como esta:

net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Isso impediu que eth1 representasse todos os outros, mas eu ainda não consigo pingar nada além do endereço eth1 com sucesso. (por exemplo, de um segundo computador no mesmo comutador, apenas 192.168.123.1 responde ao ping)

Eu estou supondo que eu preciso fazer algo com arptables ou iproute ou ALGUMA COISA, mas estou perdido no mar neste campo.

Pontos de Bônus: A solução deve ser compatível com o Linux 2.6.27.27. (Mais especificamente, Slax 6.1.2)

    
por frustrated_tester 08.08.2012 / 01:33

4 respostas

15

Você precisa de um modelo de sistema strong . O Linux é fundamentalmente construído em torno de um modelo de sistema de envio fraco, por isso não é uma boa opção de SO para esta aplicação.

Você terá que fingir cada parte do comportamento de que precisa, do ARP ao roteamento de políticas para a seleção de endereços de origem. Você também precisará de filtros para evitar que os pacotes sejam aceitos se eles chegarem na interface errada.

Os passos necessários são:

  1. Configure arp_filter = 1 e arp_ignore = 2 em todas as interfaces.

  2. Adicione roteamento baseado em origem e por interface para o tráfego de saída. (A interface de destino deve ser escolhida com base no endereço de origem).

  3. Adicione a filtragem de ingresso por interface para descartar silenciosamente os pacotes recebidos na interface errada. (Pacotes com um endereço de destino atribuído a outra interface.)

Infelizmente, não há consenso sobre se essas três etapas são necessárias. O modelo de sistema de extremidade fraca está embutido em toda a pilha TCP / IP do Linux, e não está claro o que pode dar errado com problemas sutis como multicast.

Não está claro como você escolheria a interface de saída para transmissões, por exemplo. Deveria sair todos eles? Talvez. Qual é o comportamento correto se a pilha receber uma transmissão de saída com um endereço de origem não atribuído a uma das interfaces?

Novamente, você escolheu a ferramenta errada para o trabalho.

    
por 09.08.2012 / 02:48
6

É mais provável que você queira criar uma ponte com as interfaces 8/9 e, em seguida, atribuir um endereço IP a essa ponte (pacote bridge-utils, comando 'brctl add').

Desta forma, a bridge funcionará como um switch e pode ter um endereço IP na sua sub-rede.

    
por 12.05.2015 / 15:40
4

Eu recomendaria ligar as interfaces físicas e configurar todos os endereços na interface única de ligação.

Você também precisará de suporte no switch.

Aqui está um minitutorial que você pode usar para começar.

    
por 09.08.2012 / 03:23
4

Parece que você quer um ambiente de teste equivalente a 9 máquinas separadas e acredita que 9 interfaces em uma máquina poderiam emular isso. No Linux, isso simplesmente não pode ser feito através de uma única pilha, por motivos descritos por David Schwartz. BTDT e tem as cicatrizes. Já era ruim o suficiente com 2 interfaces.

Uma solução melhor pode ser executar 8 ou 9 máquinas virtuais discretas em um host único e fazer a ponte entre as interfaces 8 ou 9 para essas máquinas virtuais.

    
por 09.08.2012 / 03:27