Primeiramente, não use ifconfig
e route
. Esses comandos são geralmente considerados obsoletos hoje em dia; eles foram escritos há muito tempo atrás quando o Linux tinha uma pilha de rede muito diferente, e foram corrigidos desde então. A própria idéia de aliases de interface (por exemplo, ethX: YY ) para ter vários endereços está obsoleta hoje, eles ainda existem principalmente para agradar ao ifconfig. Hoje, o comando ip
deve satisfazer todas as suas necessidades.
Agora, entenda sua situação original: Sua interface eth0 originalmente tinha dois escopos ativos: / 24 e / 27. 172.16.45.3 era o endereço principal para o escopo / 24, enquanto 172.16.45.21 era o endereço principal do escopo / 27 (porque é listado primeiro). Quando você emitiu o comando ifconfig para alterar o prefixo do primeiro endereço, ele foi excluído e reinserido como um endereço secundário no escopo / 27. Então agora você deve ter algo assim:
inet 172.16.45.21/27 brd 172.16.45.31 primary eth0:11
inet 172.16.45.22/27 brd 172.16.45.31 secondary eth0:12
inet 172.16.45.3/27 brd 172.16.45.31 secondary eth0
Não importa que a eth0 deva ser primária, ou que pareça que deve ser primária (outra razão para não usar o ifconfig). Foi inserido posteriormente no escopo / 27, portanto, é um endereço secundário. Isso também significa que os pacotes de saída serão endereçados 172.16.45.21, e que se você reduzir eth0: 11 usando ifconfig, all seus endereços serão removidos juntos. É assim que funciona.
A única maneira de corrigir isso é remover todos os endereços da interface e reinseri-los na ordem correta. Em seguida, o primeiro endereço adicionado (no escopo / 27) será o endereço principal nesse escopo, e os demais endereços serão secundários.
O endereçamento já estava quebrado desde o começo, não havia muito o que você poderia fazer nessa situação. Sua melhor solução é apenas reiniciar o serviço de rede.
Uma solução possível é alterar o endereço de roteamento de origem. Isso terá quase o mesmo efeito de alterar o endereço principal. No seu caso:
ip route change 172.16.45.0/27 dev eth0 src 172.16.45.3
Neste caso, os pacotes enviados para 172.16.45.0/27 terão o endereço de origem configurado para 172.16.45.3. Você precisará de outro comando se também quiser alterar a origem dos pacotes que passam pelo gateway.