Rede com várias placas de rede


16

Eu tenho um servidor Ubuntu 12.04 com 4 adaptadores de rede. 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 ser capaz de direcionar o tráfego de e para os endereços IP individuais para serviços Web separados. ou seja, 10.235.0.2 é um site, 10.236.0.2 é um site diferente e 10.237.0.2 é um terceiro site. O 1º IP é para gerenciamento do servidor.

Acho que o problema é de roteamento, mas sou novo o suficiente para o Linux não ter um entendimento completo dos meandros dos recursos de roteamento.

Aqui está o que está no meu /etc/network/interfacesarquivo:

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.

Respostas:


15

Depois de fazer uma configuração normal de apenas eth0, voltei e adicionei a configuração para eth1. Com apenas eth0 ativo, 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 trouxe o eth1, a ordem das instruções de rota padrão determinou qual interface sempre foi 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 extra 'via 192.168.1.65'. Aparece lá se a definição eth1 em / etc / network / interfaces tiver uma instrução "gateway 192.168.1.65". Portanto, remova qualquer declaração extra de gateway 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

configurar nova tabela de roteamento

Crie uma nova tabela de roteamento separada contendo uma rota padrão apropriada para todo o tráfego que sai do eth1. O número da tabela 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 no eth1; Não o adicione a nenhuma das subinterfaces eth1:.

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

Bounce eth1. A tabela de roteamento principal não é alterada e a tabela 101 conterá a rota padrão via 192.168.1.65 se eth1 estiver ativado.

# 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 pacotes que devem sair 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 a regra ao /etc/network/interfacesarquivo também:

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

Agora certifique-se de adicionar limpeza para remover a rota e governar 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 ubuntu 16.04+] Como indicado aqui e no teste que fiz desta ajuda, o ip route2 mudou sua estrutura de comandos. Para fazer o trabalho, você terá que se adaptar um pouco para fazer na ordem de como os man ip pontos .

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 uma mensagem de erro @ifdown (mensagem padrão para dizer que os periféricos não estão configurados corretamente) e @ifup pela ausência de uma rota na tabela 101.


Bom, mas eu não gosto de usar rc.local .. procurando uma etapa final mais elegante ..
drAlberT

Foi editado, suponho :) ..
drAlberT 10/01

Existe realmente um arquivo / etc / interfaces, ou é um erro de digitação?
User100464

@ user100464/etc/network/interfaces
Zenexer

Há um ref para o primeiro na resposta. Não consigo editar.
User100464
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.