Por que a remoção de um endereço IP não utilizado de uma interface mata conexões não relacionadas a esse endereço


35

Ontem fiz uma reinstalação rápida de um servidor (físico) no datacenter e, como estava com pouco tempo e sem acesso fácil ao nosso banco de dados, acabei de atribuir um IP que eu sabia que estava disponível e que me permitiria acessar mais tarde para atribuir o endereço correto e continue provisionando de um local mais quente.

Hoje eu entrei no servidor (em 172.16.130.10/22) e fiz o seguinte:

ip addr add 172.16.128.67/22 dev eth0

Em um terminal na minha estação de trabalho local, verifiquei se ele respondia ao ping no novo endereço e fazia o login através dele:

$ ping 172.16.128.67
PING 172.16.128.67 (172.16.128.67) 56(84) bytes of data.
64 bytes from 172.16.128.67: icmp_req=2 ttl=62 time=3.61 ms
64 bytes from 172.16.128.67: icmp_req=3 ttl=62 time=4.87 ms
^C
$ ssh 172.16.128.67

Até aí tudo bem, eu estava conectado através do novo endereço IP e o antigo não era mais necessário. Fui em frente e removi:

ip addr del 172.16.130.10/22 dev eth0

Mas assim que eu atingi Enterminha sessão SSH congelou e não consegui mais me conectar. Eu tive que solicitar um operador no local para reiniciar o servidor para mim.

Onde é que eu me enganei? Por que remover esse endereço mataria minha conexão?


2
Além da excelente resposta do Mathews: Em muitos sistemas Unix (e similares ao Unix), qualquer alteração no (s) endereço (s) IP (s) vinculado (s) desconectará brevemente todas as sessões abertas dessa interface (mesmo as que usam outro endereço). Isso o expulsaria da sua sessão SSH, mas você poderá se reconectar imediatamente nesse caso.
quer

Eu acredito que esse problema só existe com o IPv4. Acho que não teria acontecido se você estivesse usando o IPv6.
kasperd

Respostas:


53

No linux, os endereços IP têm uma noção de endereços 'primário' e 'secundário'. O principal geralmente é o primeiro endereço que você adiciona ao sistema. A remoção do endereço primário também tem a operação implícita de liberar a lista inteira de endereços secundários.

Você pode evitar esse comportamento definindo o sysctl net.ipv4.conf.all.promote_secondariescomo 1 da seguinte maneira:

sysctl -w net.ipv4.conf.all.promote_secondaries=1

Isso altera o comportamento de forma que, quando um IP primário é removido, ele não libera os endereços restantes e, em vez disso, promove um novo endereço IP como principal.


6
Obrigado! Eu também vim através disso :An IP address becomes secondary if another address within the same prefix (network) already exists. The first address within the prefix is primary and is the tag address for the group of all the secondary addresses. When the primary address is deleted all of the secondaries are purged too.
GnP 05/08
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.