Como eu crio regras de roteamento baseadas em políticas persistentes do CentOS 7?

0

Eu tenho 2 interfaces de rede na minha caixa "CentOS 7 Minimal". Eu preciso configurar o roteamento baseado em política, para que, se uma solicitação chegar em uma interface, a resposta seja enviada para a mesma interface. Fazer isso com o iproute2 de maneira não persistente não é muito difícil:

echo '200 isp2' >> /etc/iproute2/rt_tables
ip route add default via 1.1.1.1 table isp2
ip rule add from 192.168.1.50 table isp2

Onde 1.1.1.1 é o meu roteador, e 192.168.1.50 é o IP do meu linux. O problema é tornar isso persistente.

Pelo que eu li, não há nenhum arquivo de persistência iproute2 - a maneira de tornar as coisas persistentes é adicioná-los aos seus scripts de inicialização de rede.

Normalmente, a RedHat recomenda a criação do arquivo / etc / sysconfig / network-scripts / route-ethX para adicionar rotas, mas isso não parece ser capaz de adicionar rotas a uma tabela de roteamento secundária.

A solução parece ser adicionar as linhas "ip route" e "ip rule" de cima para / etc / sysconfig / network. Isso quase funciona, exceto por uma coisa: toda vez que a rede é reiniciada, ela continua adicionando regras de "regra ip" duplicadas, dezenas de cada vez.

Depois de reiniciar minha rede 2 ou 3 vezes com "systemctl restart network", minha saída ip rule é assim:

0: from all lookup local
32670: from 192.168.1.50 lookup isp2
32671: from 192.168.1.50 lookup isp2
...
32764: from 192.168.1.50 lookup isp2
32765: from 192.168.1.50 lookup isp2
32766: from all lookup main
32767: from all lookup default

Qual é a maneira correta de adicionar regras de roteamento baseadas em políticas persistentes no CentOS 7?

PS. O comando ip route list table isp2 mostra uma única entrada, como esperado, então isso não é um problema.

Editar: de acordo com o manual do RedHat 7:

in Red Hat Enterprise Linux the use of the global /etc/sysconfig/network file is deprecated

Isso é a favor de arquivos de configuração específicos da interface, que não parecem ser capazes de adicionar rotas a uma tabela de roteamento diferente, e não podem adicionar ip rule regras.

    
por Tal 30.03.2017 / 17:09

2 respostas

0

Instalar o NetworkManager-config-routing-rules e ativar o NetworkManager-dispatcher parece tê-lo corrigido:

$ sudo yum install NetworkManager-config-routing-rules
$ sudo systemctl enable NetworkManager-dispatcher.service
$ sudo systemctl start NetworkManager-dispatcher.service

Agora eu posso ter isso em meu / etc / sysconfig / network-scripts / route-ethX:

default via 1.1.1.1 table isp2

E isso no meu / etc / sysconfig / network / scripts / regra-ethX:

from 192.168.1.50 table isp2

E uma definição para o isp2 no meu / etc / iproute2 / rt_tables:

200 isp2

Reiniciar o serviço de rede não cria mais entradas duplicadas.

    
por 30.03.2017 / 23:51
0

Dada a leitura de /etc/sysconfig/network-scripts/ifup-routes , as linhas de route-(interface) são analisadas como em ip route add , portanto, para adicionar as rotas em uma determinada tabela, basta adicionar table XXX à linha. No entanto, talvez seja necessário recorrer ao número da tabela em vez do nome de rt_tables para adicionar a rota com êxito.

Com regras, você pode usar o arquivo rule-(interface) e, na verdade, a versão atual de ifup-routes e ifdown-routes processa esses arquivos como arquivos de rota. Isso pode não ser o caso com seu conjunto de scripts, para verificar a execução grep rule /etc/sysconfig/network-scripts/ifup-routes .

Seu principal problema, na verdade, surge da origem de /etc/sysconfig/network por cada um dos scripts ifup e ifdown, portanto, cada comando nesse arquivo é executado uma vez por up / down de cada interface. Isso, por sua vez, faz com que seu sistema adicione as interfaces 2 * (incluindo lo ) às adições de regra de IP por reinicialização de rede.

PS: Eu desinstalei o gerenciador de rede do CentOS, então tudo é feito com scripts ifup / ifdown, e testei tudo isso antes de postar esta resposta.

    
por 11.01.2018 / 14:00