Rede com Múltiplas Nics

16

Eu tenho um servidor Ubuntu 12.04 com 4 adaptadores de rede nele. Eu preciso usar cada NIC para uma função separada. Aqui está uma descrição da minha configuração:

etho = 10.234.0.2 netmask = 255.255.255.252 gw = 10.234.0.1 This is on vlan 234
eth1 = 10.235.0.2 netmask = 255.255.255.252 gw = 10.235.0.1 This is on vlan 235
eth2 = 10.236.0.2 netmask = 255.255.255.252 gw = 10.236.0.1 This is on vlan 236
eth3 = 10.237.0.2 netmask = 255.255.255.252 gw = 10.237.0.1 This is on vlan 237

Eu preciso direcionar o tráfego de e para os endereços IP individuais para serviços da web separados. ie 10.235.0.2 é um site, 10.236.0.2 é um site diferente, e 10.237.0.2 é um terceiro site. O primeiro IP é para gerenciamento do servidor.

Eu acho que o problema é um problema de roteamento, mas eu sou novo o suficiente para o Linux não ter uma compreensão completa dos detalhes das capacidades de roteamento.

Aqui está o que está no meu arquivo /etc/network/interfaces :

auto lo
iface lo inet loopback

# WWW Management
auto eth0
iface eth0 inet static
address 10.234.0.2
netmask 255.255.255.252
gateway 10.234.0.1
nameseervers 10.230.1.103, 10.230.70.70

# WWW
auto eth1
iface eth1 inet static
address 10.235.0.2
netmask 255.255.255.252
gateway 10.235.0.1

# WTB
#auto eth2
#iface eth2 inet static
#address 10.236.0.2
#netmask 255.255.255.252
#gateway 10.236.0.1

# Moodle
#auto eth3
#iface eth3 inet static
#address 10.237.0.2
#netmask 255.255.255.252
#gateway 10.237.0.1

Desativei as duas últimas redes apenas para facilitar a confusão.

Agradecemos antecipadamente por toda a ajuda, comentários e sugestões.

    
por user168645 20.06.2013 / 01:27

1 resposta

15

Depois de fazer uma configuração normal de apenas eth0, voltei e adicionei a configuração para eth1. Com apenas eth0 up, a tabela de rotas era:

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

Mas uma vez que eu indiquei eth1, a ordem das instruções de rota padrão determinou qual interface era sempre usada. Como mostrado abaixo, acontece de escolher a rota eth1 para o gateway 192.168.1.65.

# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100

apenas uma instrução de gateway

O primeiro problema pode ser a rota padrão 'via 192.168.1.65' adicional. Ele aparece lá se a definição de eth1 em / etc / network / interfaces tiver uma instrução "gateway 192.168.1.65". Portanto, remova qualquer instrução de gateway extra e salte a interface:

# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

configura a nova tabela de roteamento

Crie uma nova tabela de roteamento separada contendo uma rota padrão apropriada para todo o tráfego que sai da eth1. O número da mesa aqui não é importante; 101 simplesmente não é a tabela de roteamento principal. Faça isso com um comando 'post-up' na configuração eth1 em / etc / network / interfaces. Adicione apenas um post-up em eth1; Não o adicione a qualquer uma das subinterfaces eth1:

post-up ip route add default via 192.168.1.65 dev eth1 table 101

Saltar eth1. A tabela de roteamento principal é inalterada, e a tabela 101 conterá a rota padrão via 192.168.1.65 se eth1 estiver ativo.

# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101   (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100

# ip route show table 101
default via 192.168.1.65 dev eth1

nova regra de roteamento

Adicione uma regra de roteamento para usar a tabela 101 para selecionar uma rota padrão para os pacotes que devem sair da eth1.

# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0:     from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default

Adicione também a regra ao arquivo /etc/network/interfaces :

post-up ip rule add from 192.168.1.64/27 lookup 101

Agora, adicione a limpeza para remover a rota e a regra quando a interface ficar inativa:

post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101

[EDIT para o Ubuntu 16.04+] Como indicado aqui e do teste que eu fiz desta ajuda, ip route2 mudou sua estrutura de comandos. Para fazer o trabalho você terá que se adaptar um pouco para fazer na ordem como os man ip apontam .

up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65

Ou você terminará após um comando ifdown - ifup com um comando de mensagem de erro @ifdown (mensagem padrão para dizer que os periféricos não estão configurados corretamente) e @ifup a ausência de uma rota na tabela 101.

    
por Craig Constantine 20.06.2013 / 13:39