Múltiplas NICs no Linux: como retornar a rota estabelecida?

Múltiplas NICs no Linux: como retornar a rota estabelecida?

Se houver um host Linux com duas interfaces em duas redes diferentes (a rede primária e a rede de gerenciamento fora de banda, chame-as de "primária" e "mgmt"), como o tráfego de retorno pode ser roteado de volta através da mesma interface de de onde veio?

Em outras palavras: de onde estou, passo por um roteador para acessar as interfaces primária ou de gerenciamento da máquina. Quando faço ssh para a interface primária, não há problema. Quando faço ssh para a interface mgmt, meu pacote chega ao servidor, mas o servidor envia sua resposta de volta através do gateway padrão que está na interface primária. Portanto, minha conexão não foi estabelecida. Como posso fazer com que o servidor responda às solicitações através da rede mgmt, que foram recebidas na rede mgmt?

Responder1

Encontrei a maior parte da resposta aqui:https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming

Mais informações aqui:http://linux-ip.net/html/routing-tables.html

Além disso, obrigado a Tom Yan, por fornecer uma resposta que continha a maioria das peças necessárias. Mas estou postando esta resposta porque nenhuma das outras é realmente completa, totalmente precisa ou fácil de seguir.

O processo a seguir funciona para mim no Centos 7. Não consegui fazê-lo funcionar com o NetworkManager, porque o NetworkManager não lê /etc/sysconfig/network-scripts/rule-*e route-*e não consegui encontrar um nmclicomando equivalente para tornar essas alterações persistentes. Se alguém tiver tal comando, por favor compartilhe. Portanto, a primeira etapa necessária é desabilitar o NetworkManager:

systemctl disable NetworkManager
systemctl enable network
systemctl stop NetworkManager
systemctl start network

Os kernels Linux 2.2 e 2.4 suportam múltiplas tabelas de roteamento, cada uma numerada de 0 a 255. As duas tabelas de roteamento normalmente empregadas são local(tabela de roteamento 255) e main(tabela de roteamento 254). Eles estão listados em /etc/iproute2/rt_tables. Você pode criar uma nova tabela de roteamento escolhendo um número não utilizado (procure em /etc/iproute2/rt_tables) e adicionando-o a /etc/iproute2/rt_tables.

No meu caso, a interface "primária" é eth0192.168.20.20 com gateway 192.168.20.1, e a interface "mgmt" é eth1192.168.5.5 com gateway 192.168.5.1.

Estou escolhendo o novo número da tabela de roteamento 200 e o novo nome da tabela de roteamento mgmt.

echo "200 mgmt" >> /etc/iproute2/rt_tables

Em seguida, você precisa criar uma regra para usar a nova tabela de roteamento para o tráfego recebido na interface mgmt. Outros recursos na internet dizem que você só precisa fazer isso para uma interface, mas você realmente precisa fazer isso em ambas, pelo seguinte motivo: Observe, se você abrir apenas uma interface, essa interface será capaz de responder ao ping, mas se você ativar as duas interfaces, a que você criou primeiro responderá ao ping e a segunda não. Isso significa que, se você abrir mgmtprimeiro a interface e depois a interface primária, a primária não responderá. Portanto, é uma boa prática definir as regras em ambas as interfaces.

Isso pode ser feito uma única vez (não persistente) da seguinte maneira:

ip rule add from 192.168.20.20 table main
ip route add default via 192.168.20.1 dev eth0 table main

ip rule add from 192.168.5.5 table mgmt
ip route add default via 192.168.5.1 dev eth1 table mgmt

Neste ponto, ambas as interfaces devem estar respondendo. Agora, para torná-lo persistente, observe, se você ler /etc/sysconfig/network-scripts/ifup-routes, ele analisará todos os arquivos rule-*e route-*e passará cada linha como um argumento para ip rule addou ip route addde acordo. Portanto, crie quatro novos arquivos, como segue:

echo "from 192.168.20.20 table main" > /etc/sysconfig/network-scripts/rule-eth0
echo "default via 192.168.20.1 dev eth0 table main" > /etc/sysconfig/network-scripts/route-eth0

echo "from 192.168.5.5 table mgmt" > /etc/sysconfig/network-scripts/rule-eth1
echo "default via 192.168.5.1 dev eth1 table mgmt" > /etc/sysconfig/network-scripts/route-eth1

Após a reinicialização, você descobrirá que ambas as interfaces funcionam por padrão.

Responder2

Roteamento baseado em origem / ip rule.

Suponha primaryque has 1.2.3.4e mgmthas 2.3.4.5(e seus gateways padrão sejam 1.2.3.1e 2.3.4.1respectivamente):

ip rule add from 1.2.3.4 table 234
ip route add default via 1.2.3.1 dev primary table 234

(o acima deve ser opcional)

ip rule add from 2.3.4.5 table 345
ip route add default via 2.3.4.1 dev mgmt table 345

informação relacionada