11.22.33.44
내 서버에 IP 주소 와 호스트 이름이 있다고 가정해 보겠습니다 server1.mydomain.com
.
ping을 실행하면 server1.mydomain.com
ping이 실제로 공용 IP 주소를 사용하는 것처럼 보입니다.
# ping server1.mydomain.com
PING server1.mydomain.com (11.22.33.44) 56(84) bytes of data.
64 bytes from server1.mydomain.com (11.22.33.44): icmp_seq=1 ttl=64 time=0.014 ms
64 bytes from server1.mydomain.com (11.22.33.44): icmp_seq=2 ttl=64 time=0.012 ms
64 bytes from server1.mydomain.com (11.22.33.44): icmp_seq=3 ttl=64 time=0.011 ms
그런데 있는데 tcpdump
, 안보이네요ICMP트래픽이 켜져 있지만 다음 eth0
을 통해 들어오는 핑 데이터가 표시됩니다 lo
.
# tcpdump -i lo
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
08:43:49.076918 IP server1.mydomain.com > server1.mydomain.com: ICMP echo request, id 8525, seq 1, length 64
08:43:49.076931 IP server1.mydomain.com > server1.mydomain.com: ICMP echo reply, id 8525, seq 1, length 64
08:43:50.075913 IP server1.mydomain.com > server1.mydomain.com: ICMP echo request, id 8525, seq 2, length 64
08:43:50.075924 IP server1.mydomain.com > server1.mydomain.com: ICMP echo reply, id 8525, seq 2, length 64
08:43:51.074911 IP server1.mydomain.com > server1.mydomain.com: ICMP echo request, id 8525, seq 3, length 64
08:43:51.074919 IP server1.mydomain.com > server1.mydomain.com: ICMP echo reply, id 8525, seq 3, length 64
이 동작은 에 국한되지 않습니다 ping
. 또한 동일한 결과를 얻습니다 wget
.
왜 이런 일이 발생합니까? 내 서버의 구성 때문입니까?
나는 사용하고있다데비안 9(긴장).
편집하다: 댓글에서 발생한 일부 의견 차이를 명확히 하기 위해:
내 자신의 공용 IP 주소를 ping하면 트래픽이 실제로 그곳으로 이동합니다 127.0.0.1
. 그러나 ping은 정직해야 하며 실제로 localhost를 ping하고 있음을 보여주어야 합니다. 내가 위험하다고 생각하는 것은 연결된 에 11.22.33.44
따라 ping을 보내고 있고 ping이 에 트래픽을 보내는 것처럼 가장 하지만 실제로는 에 보내고 있다는 것입니다 .ifconfig
eth0
eth0
lo
답변1
커널은 "이미 존재함"을 알고 있으므로 ICMP 패킷 전송을 "최적화"합니다. 이것이 루프백 인터페이스에서 볼 수 있는 이유입니다. 다른 사람들이 더 자세한 내용을 입력할 수도 있습니다.
그럼에도 불구하고: 몇 년 전에도 비슷한 문제가 있었는데 unshare
like unshare -n /bin/bash
. 그러면 완전히 새로운 네트워크 스택(올바른 용어가 부족함)이 있고 루프백 인터페이스가 없는 쉘이 있습니다. 거기에서 새로운 IP, 경로 등을 정의해야 하지만 해당 셸에서 이더넷 인터페이스를 통해 ICMP 패킷을 자신에게 보낼 수 있습니다.
답변2
이는 Linux에서 네트워크 라우팅이 발생하는 방식과 관련이 있습니다. 예를 들어 라우팅 테이블을 보면 11.22.33.0/24 서브넷에 속하는 모든 트래픽이 "로컬"로 라우팅된다는 것을 알 수 있습니다. 이는 루프백으로 직접 이동함을 의미합니다.
[jar@coffee ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.107.136.1 0.0.0.0 UG 100 0 0 eth0
10.107.136.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
가지다10.107.136.0내부에목적지열은 로컬 서브넷의 모든 트래픽이 나열된 서브넷으로 전송되어야 함을 나타냅니다.게이트웨이,지금 바로0.0.0.0-- 이 경우 로컬 라우팅을 의미합니다.
가지다0.0.0.0존재하다목적지이 서브넷 외부로 이동하는 트래픽을 나타냅니다. 그러면 기본 게이트웨이가 아래에 나열됩니다.게이트웨이
달리면 너도 알게 될 거야TCP 덤프그리고-N스위치, IP 주소는아니요127.0.0.1은 로컬 트래픽이기 때문에 루프백 인터페이스에 있습니다.