나는 방금 설명할 수 없는 매우 이상한 상황을 발견했습니다.
머신(debian)에는 IP 주소가 할당된 인터페이스가 있습니다.
# ifconfig vmbr0 |grep inet
inet addr:192.168.1.26 Bcast:192.168.1.255 Mask:255.255.255.0
일부 소프트웨어 설정(필요한 경우 powerdns 반복자)에서 해당 데몬이 다음 인터페이스에 바인딩되도록 지정합니다.
local-address=127.0.0.1 192.168.1.24
이것이 IP 주소 값의 오류라는 것을 알아차렸을 수도 있지만 문제는 데몬이 성공적으로 바인딩된다는 것입니다.
# 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
192.168.1.24
더욱 놀라운 점은 스위치가 성공적으로 트래픽을 이 시스템으로 라우팅한다는 것입니다(LAN에 다른 시스템이 없으므로 IP 주소 충돌이 없습니다).
그렇다면 이것이 왜 가능하고 작동하는지 설명할 수 있는 사람이 있나요?
내 생각에 커널은 올바른 대상이 있는 IP 패킷만 받아들이고 다른 모든 패킷은 삭제합니다.
답변1
주석에서 지적한 대로 주소(192.168.1.24)는 실제로 호스트에 존재하지만 유틸리티 ifconfig
제한으로 인해 표시되지 않습니다. 대신에 다음을 사용해야 합니다.루트 2실용적 ip
이지 않습니다 ifconfig
. ifconfig
Linux에서는 수년 동안 더 이상 사용되지 않으며 많은 기능이 누락되었습니다. 귀하의 사례에 영향을 미치는 특정 기능은 인터페이스 별칭을 생성하지 않고 단일 인터페이스에 여러 IP 주소를 추가/표시하는 기능입니다.
인터페이스에 여러 IP 주소를 추가하는 방법은 인터페이스 별칭( -> 등) ifconfig
을 만드는 것입니다 . 그러나 단일 인터페이스에는 255개의 별칭만 있을 수 있으므로 이는 일부 기업 설정에 있어서 상당한 제한 사항입니다. Iproute2 유틸리티를 사용하면 단일 인터페이스에 주소를 무제한으로 추가할 수 있습니다.eth0
eth0:0
eth0:1
ip
예를 들어:
$ 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
따라서 ifconfig
하나의 주소만 표시되는 반면 ip addr
모든 주소는 표시됩니다.