Duas interfaces, dois endereços, dois gateways?

14

Eu tenho um sistema que tem duas interfaces de rede com endereços IP diferentes, ambos na faixa de endereços públicos (embora através do NAT no caso do primeiro) e ambos possuem diferentes gateways. (Longa história, é para fins de teste)

O problema é que, no momento, se eu tentar fazer o ping no endereço da segunda interface, a rota padrão indicará através da primeira interface - e nunca chegará corretamente.

É possível certificar-se de que as respostas sempre saiam na mesma interface de rede (e com o mesmo IP de origem) à medida que chegam? E se sim, como?

    
por Shadur 17.10.2011 / 15:58

2 respostas

13

Você está entendendo mal o problema. Nem todo pacote é uma resposta e nem todo pacote pode ser combinado com algum outro pacote de tal forma que "a mesma interface de rede em que eles entraram" faz sentido. O que você quer fazer é selecionar o gateway para um pacote baseado em seu endereço IP de origem.

Isso é chamado roteamento baseado em origem ou roteamento de política. Você pode fazer isso com uma regra simples de iptables , mas a melhor maneira é configurar duas tabelas de roteamento, uma para cada endereço de origem pública:

Primeiro, crie duas tabelas (Substitua < NAME1 > e < NAME2 > por nomes sensíveis para seus dois provedores, mesmo com IP1, DEV1 e assim por diante):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

Adicione um gateway a cada tabela de roteamento (se necessário):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

Em seguida, uma rota padrão:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

Em seguida, as regras para selecionar a tabela de rotas com base no endereço de origem:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

Consulte Roteamento para vários uplinks / provedores para obter mais detalhes.

    
por 17.10.2011 / 19:53
5

A resposta de David Schwartz é excelente, mas você pode simplificar um pouco as regras de roteamento tendo apenas uma tabela extra e usando a rota padrão para a outra. Eu tenho um servidor que está por trás de dois gateways NAT e recentemente passei pelo processo de recriar esse cenário entre um grupo de VMs. Meu /etc/network/interfaces é assim:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(isto é para uma configuração onde os dois ISPs são Optus e iiNet, daí o nome da tabela de 'optus')

Isso, mais a linha em /etc/iproute2/rt_tables criando a tabela, deve ser tudo que você precisa. Você terá dois endereços IP; o tráfego de 192.168.13.13 sairá através de 192.168.13.11, e o tráfego de 192.168.13.213 sairá através de 192.168.13.10. Configure esses dois gateways para fazer o seu encaminhamento de porta apropriadamente (192.168.13.11 encaminha o material para 192.168.13.13 e 192.168.13.10 encaminha o material para 192.168.13.213), e o restante deve cuidar de si mesmo.

Você pode precisar ajustar as coisas um pouco para sua situação, já que está usando IPs públicos diretamente, mas algo assim ainda deve funcionar. Além disso, é muito mais fácil fazer essas coisas em /etc/network/interfaces e depois gerenciar esse arquivo, em vez de tentar lembrar como você o configurou, dois anos depois, quando o sistema tiver que ser reinicializado!

    
por 08.02.2015 / 16:43