Estou usando um programa que define os parâmetros do etcd que são expandidos para chamadas para "ip route add ..." e preciso que essas chamadas sejam bem-sucedidas sem erros. O modelo usa um formato como:
ip route add < route > [ via < gateway > ] dev < interface >
Recebi respostas como esta:
# ip route show
169.254.0.0/16 dev ens192 scope link metric 1002
172.16.25.64/26 dev ens192 proto kernel scope link src 172.16.25.115
254.146.247.0/24 dev ens224 scope link
# ip route add 10.20.30.0/24 via 172.16.25.124 dev ens192
# ip route delete 10.20.30.0/24 via 172.16.25.124 dev ens192
# ip route add 10.20.31.0/24 via 172.16.25.124 dev ens224
RTNETLINK answers: Network is unreachable
# ip route add 10.20.31.0/24 via 254.146.247.1 dev ens224
# ip route delete 10.20.31.0/24 via 254.146.247.1 dev ens224
# ip route add 10.20.30.0/24 via 254.146.247.1 dev ens192
RTNETLINK answers: Network is unreachable
# ping -c 1 172.16.25.124
PING 172.16.25.124 (172.16.25.124) 56(84) bytes of data.
64 bytes from 172.16.25.124: icmp_seq=1 ttl=64 time=0.294 ms
--- 172.16.25.124 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.294/0.294/0.294/0.000 ms
# ping -c 1 254.146.247.1
PING 254.146.247.1 (254.146.247.1) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
--- 254.146.247.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
Estou usando o Python para coletar parâmetros a serem armazenados em um banco de dados do etcd para executar um modelo preenchido com "ip route add ..." quando o serviço que usa o arquivo de configuração preenchido é reiniciado. O que estou procurando é uma maneira de verificar os valores a serem usados para rota, gateway e interface, de modo que quando os "add ip route" sejam eventualmente chamados, eles não falharão. Em particular, do exemplo acima, eu preciso saber que o endereço IP do gateway 254.146.247.1 não pode ser acessado pela interface ens192.
Não consigo usar o ping como mostra o exemplo acima. 172.16.25.124 é pingável AND pode ser usado como um gateway para a interface ens192, mas não para o ens224. 254.146.247.1 NÃO é pingável, mas pode ser usado como um gateway para a interface ens224, mas não para o ens192.
Qualquer ajuda seria muito apreciada.