Ligação à interface não existente

1

Acabei de notar a situação muito estranha para a qual não tenho uma boa explicação.

A máquina (debian) tem uma interface com um endereço IP atribuído:

# ifconfig vmbr0 |grep inet
inet addr:192.168.1.26  Bcast:192.168.1.255  Mask:255.255.255.0

Nas configurações de alguns softwares (powerdns recursor, se necessário), é especificado que seu daemon se liga às seguintes interfaces:

local-address=127.0.0.1 192.168.1.24

Como você deve ter notado, foi um erro cometido no valor do endereço IP, mas a coisa é - daemon vinculado a ele com sucesso:

# netstat -nlp | grep 1.24 | grep 53
tcp        0      0 192.168.1.24:53         0.0.0.0:*               LISTEN      328862/pdns_recurso
udp        0      0 192.168.1.24:53         0.0.0.0:*                           328862/pdns_recurso

E o que é mais surpreendente - o switch rotear com sucesso o tráfego para esta máquina (não há outros 192.168.1.24 na LAN, portanto, nenhum endereço IP entra em conflito).

Então, alguém poderia explicar por que isso é possível e funciona?

Eu achei que o kernel só aceita pacotes IP que tenham o destino correto e descartem todos os outros.

    
por zerkms 28.09.2014 / 21:55

1 resposta

3

Como indicado nos comentários, o endereço (192.168.1.24) está realmente presente no host, mas devido a limitações no utilitário ifconfig , ele não é mostrado. Em vez disso, você deve usar o utilitário Iproute2 ip e não ifconfig . O ifconfig foi preterido no Linux há vários anos e não tem muita funcionalidade. O bit específico de funcionalidade que afeta o seu caso é a capacidade de adicionar / mostrar vários endereços IP em uma única interface (sem criar aliases de interface).

O método de adicionar vários endereços IP a uma interface com ifconfig é criar aliases de interface ( eth0 - > eth0:0 eth0:1 etc). No entanto, você só pode ter 255 aliases em uma única interface, portanto, para algumas configurações corporativas, essa é uma limitação significativa. Com o utilitário Iproute2 ip , você pode adicionar um número ilimitado de endereços a uma única interface.

Por exemplo:

$ ip addr add 169.254.0.1 dev eth0
$ ip addr add 169.254.0.2 dev eth0

$ ifconfig eth0 | grep '\<inet\>'
        inet 192.168.0.20  netmask 255.255.255.0  broadcast 192.168.0.255

$ ip addr show dev eth0 | grep '\<inet\>'
    inet 192.168.0.20/24 brd 192.168.0.255 scope global eth0
    inet 169.254.0.1/32 scope global eth0
    inet 169.254.0.2/32 scope global eth0

Portanto, observe como ifconfig está exibindo apenas um endereço, enquanto ip addr está exibindo todos eles.

    
por 28.09.2014 / 22:29