Se o endereço de rede e as máscaras de sub-rede das duas redes separadas forem idênticos, sua rede será configurada incorretamente de forma a invalidar a intenção básica do roteamento IP.
Eu renumeraria uma das redes.
Eu tenho uma caixa Linux com duas placas de rede diferentes conectadas a duas redes diferentes, mas elas compartilham o mesmo intervalo de IP (10.0.0.x). Minha primeira idéia foi usar virtualização para isso (ou seja, Xen), mas parece-me um exagero, pois quero usar os mesmos programas sem conflitos devido ao roteamento.
Eu estava vagando se houvesse uma maneira de confinar um NIC para algo como uma sessão de shell, então todos os programas lançados de lá usam apenas esse NIC, como o lançamento de uma sessão bash que só vê eth1, mas não eth0.
edit: Eu acho que estou procurando algo parecido com as cadeias do FreeBSD, mas para Linux
Se o endereço de rede e as máscaras de sub-rede das duas redes separadas forem idênticos, sua rede será configurada incorretamente de forma a invalidar a intenção básica do roteamento IP.
Eu renumeraria uma das redes.
Hmm, parece que não estou descrevendo bem o meu problema. - @Darth Android Na melhor das hipóteses, 'mal configurado' é infortunado para descrever a situação: você está certo de que este cenário gera um conflito na tabela de roteamento, mas estou tentando encontrar uma solução para isso tendo duas rotas isoladas um do outro. A outra solução seria usar um proxy NAT, mas me parece muito mais complicado do que apenas rodar o Linux virtualizado dentro de uma VM, como o Xen. - @RedGrittyBrick Eu não estou tentando ligar duas redes separadas, estou tentando acessar dois netowrks separados que usam o mesmo bloco de IP.
Eu encontrei dois equivalentes de jail para Linux que fazem isolamento de rede , parece que eles farão um truque:
Linux-VServer: link
LXC: link
A sua pergunta parece ser um trabalho para os namespaces de rede (o URL está relacionado, não é oficial). Usando esta tecnologia parece ser relativamente novo a partir desta escrita e eu estou encontrando bastante difícil encontrar HOWTOs concisos que também explicam o que realmente está acontecendo com cada comando. Pesquisando "ip netns" (com e sem as aspas) provavelmente iria fazer com que você melhor começasse a juntar peças .
Como afirmado pelo Ikraav, esse é um trabalho para namespaces de rede.
Vamos chamar as interfaces às quais suas duas NICs estão conectadas eth-a
e eth-b
.
# Create the network namespaces
ip netns add net-a
ip netns add net-b
# Take interfaces up
ip netns exec net-a ip link set eth-a up
ip netns exec net-b ip link set eth-b up
# Assign the interfaces to the network namespaces
ip link set eth-a netns net-a
ip link set eth-b netns net-b
# Assign an address and network to the interfaces
# Assume IP is 10.0.0.1 for eth-a and 10.0.0.2 for eth-b
# The two can be set equal, if you want them to
ip netns exec net-a ip address add 10.0.0.1/8 dev eth-a
ip netns exec net-b ip address add 10.0.0.2/8 dev eth-b
# Packets to 10.0.0.3 going through eth-a, with a source of 10.0.0.1
ip netns exec net-a ping 10.0.0.3
# Or through eth-b, with a source of 10.0.0.2
ip netns exec net-b ping 10.0.0.3
Se você preferir ter uma interface que é a saída padrão para programas que não são executados dentro de um namespace de rede, apenas deixe-a atribuída ao namespace de rede e não prefixe nenhum comando relacionado a ela com ip netns exec net-*