"ping"은 공용 IP 주소 대신 localhost를 사용합니다.

"ping"은 공용 IP 주소 대신 localhost를 사용합니다.

11.22.33.44내 서버에 IP 주소 와 호스트 이름이 있다고 가정해 보겠습니다 server1.mydomain.com.

ping을 실행하면 server1.mydomain.comping이 실제로 공용 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이 에 트래픽을 보내는 것처럼 가장 하지만 실제로는 에 보내고 있다는 것입니다 .ifconfigeth0eth0lo

답변1

커널은 "이미 존재함"을 알고 있으므로 ICMP 패킷 전송을 "최적화"합니다. 이것이 루프백 인터페이스에서 볼 수 있는 이유입니다. 다른 사람들이 더 자세한 내용을 입력할 수도 있습니다.

그럼에도 불구하고: 몇 년 전에도 비슷한 문제가 있었는데 unsharelike 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은 로컬 트래픽이기 때문에 루프백 인터페이스에 있습니다.

관련 정보