ping localhost와 ping 127.0.0.1의 차이점은 무엇입니까?


31

ping 응답을 비활성화하기 위해 다음을 실행 한 후 :

# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p

ping ping localhost와 127.0.0.1에서 다른 결과를 얻습니다.

# ping -c 3 localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.101 ms

--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2042ms
rtt min/avg/max/mdev = 0.047/0.072/0.101/0.022 ms

핑 127.0.0.1 실패 :

ping -c 3 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

--- 127.0.0.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2032ms

이 결과가 다른 이유는 무엇입니까?

답변:


60

ping명령 쇼는 주소가로 이름을 해결. 이 경우 IPv6 로컬 호스트 주소로 확인되었습니다 ::1. 반면에 127.0.0.1IPv4 주소이므로 pingIPv4를 명시 적으로 사용합니다.

sysctl당신에 대한 답변 수 있도록에만 사용은 IPv4의 핑에 영향을 미치는 ::1있지만를 들어 127.0.0.1.

확인에서 얻은 주소 localhost는 DNS 확인자가 어떻게 설정되어 있는지에 따라 다릅니다. localhost아마도에 설정되어 /etc/hosts있지만 이론적으로 실제 이름 서버에서 가져올 수 있습니다.


IPv6 핑을 삭제하는 방법에 대해서는 IPv6 ip6tables과 유사하지 않은 것처럼 보이기 때문에 를 조사해야 할 수도 있습니다 sysctl. 또는 네트워크에서 IPv6을 사용하지 않는 경우 IPv6을 완전히 비활성화하십시오. (물론 그것은 매우 미래 지향적 인 아이디어는 아니지만 현재 어쨌든 사용하지 않으면 가능합니다.)


2
IPv6을 제대로 사용하려면 ICMP 가 차단 되지 않아야합니다. ;)
zaTricky

3
@zaTricky, 질문은 핑 차단에 대해서만 언급했습니다. 독특하고별로 유용하지는 않지만 일반적인 것이 깨질 것이라고 생각하지 않습니다. 모든 ICMP 패킷을 차단 하는 것은 분명히 훨씬 나빠질 것입니다. 그러나 아무도 여기에 두 가지 의견에서만 언급되었다고 제안한 사람은 없습니다.
ilkkachu

더 구체적 일 수 있습니다. IPv6을 통한 올바른 통신을 위해서는 일반적으로 핑이라고하는 "ICMP 에코 요청"이 필요합니다. 클라이언트로의 원하지 않는 핑 침입을 차단할 수 있지만 아웃 바운드를 차단하면 IPv6 기능이 손상 있습니다 . 답변이 게시 된 이후에 질문이 변경된 것 같습니다.
zaTricky

33

127.0.0.1 :
127.0.0.1은 대부분의 시스템의 기본 루프백입니다. 루프백 주소는 시스템이 OS의 네트워크 스택을 확인하기 위해 사용하는 주소입니다.
IPv4 127.0.0.0/8
의 루프백 주소는 서브넷에서 임의의 값을 취할 수 있습니다. IPv6의 루프백 주소는 서브넷에서 임의의 값을 취할 수 있습니다. ::1/128
ping네트워크 스택이 OS에서 작동하는 경우 해당 범위의 값이 작동해야합니다.

localhost :
localhost 는 호스트 이름이며 도메인 이름의 일종이지만 자신의 컴퓨터에 로컬입니다.
기본적으로이 호스트 이름은 종종 127.0.0.1또는 인 IPv4 및 IPv6 루프백을 가리 킵니다 ::1.

localhost파일을 편집하여 쉽게 주소를 변경할 수 있습니다 /etc/hosts.
시스템 systemd-resolved이 service를 사용하는 경우이 서비스는 localhost가 해결되는 방식을 처리합니다.
문서에systemd-resolved 따르면 :

호스트 이름 "localhost"및 "localhost.localdomain"( ". localhost"또는 ".localhost.localdomain"으로 끝나는 호스트 이름)은 IP 주소로 확인 127.0.0.1되고::1

ping
호스트 이름 또는 도메인 이름을 핑하려고하면 OS에서이 호스트 이름 또는 도메인 이름을 확인하도록 요청합니다. 귀하의 경우 비활성화 icmpv4했지만 localhost는 IPv6 루프백 및 IPv4 루프백으로 해결되지만 IPv6 루프백 응답 만 해결됩니다.
차이점은 하나의 경우 IP를 핑하려는 경우와 다른 경우에는 여러 값을 가질 수있는 호스트 이름을 핑하는 것입니다.

icmpv6 비활성화
IPv6이 필요하지 않으면 비활성화하는 것이 좋습니다. 방화벽 및 서비스 구성에 필요한 모든 작업을 두 배로 늘립니다.

sysctl -w net.ipv6.conf.all.disable_ipv6=0

여전히 IPv6 지원을 원하고 피하고 싶다면 icmpv6다음을 사용할 수 있습니다 ip6tables.

ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j DROP

2
호스트 파일에 문제가 있습니다. 그것도 있어야 ::1 localhost합니다.
Michael Hampton

2
참고 사항 : IPv4보다 전체 127.0.0.0/8 네트워크가 루프백 주소임을 기억하십시오 (따라서 ping 127.100.101.102작동합니다).
jjmontes

1
의 항목 localhost이 반드시 필요한 것은 아닙니다 /etc/hosts. 예를 들어 systemd-resolved는 localhost및에 대한 DNS 리소스 레코드를 합성합니다 localhost.localdomain.
Johan Myréen

@MichaelHampton 그것은 완전한 hosts파일은 아니지만 ::1 localhost우분투 17.10 을 실행 하지 않았습니다
Kiwy

2
"서브넷":: 1/128은 하나의 IP에만 해당하며 127.0.0.1/32는 해당 IP로만 해석됩니다.
zaTricky

9

로컬 호스트에는 IPv6 주소 :: 1과 IPv4 주소 127.0.0.1의 두 가지 주소가 있습니다.

IPv6이 기본 프로토콜이므로 :: 1은 항상 127.0.0.1보다 선호됩니다. 이것이 localhost를 ping 할 때 :: 1을 핑하는 이유입니다.

:: 1을 핑 (ping) 할 수는 있지만 127.0.0.1을 핑 (ping) 할 수없는 이유에 대해서는 sysctl이 IPv4에 대해서만 핑을 비활성화했지만 IPv6에 대해서는 비활성화하지 않았습니다. 내가 알 수있는 한 IPv6에 대해 ping을 비활성화하는 해당 sysctl은 없지만 실제로 필요한 경우 방화벽에서 비활성화 할 수 있습니다 (물론 비활성화하지 않는 것이 좋습니다).


5
연결을 끊을 때 IPv6에 대해 ping을 비활성화하는 것은 좋지 않습니다. teredo 주소에서 연결하는 사람들은 더 이상 시스템에 도달 할 수 없습니다 (ping을 사용하여 가장 가까운 애니 캐스트 teredo 터널 시스템을 선택하기 때문에)
Ferrybig

1
IPv6과 IPv4의 이름 확인 기본 설정은 /etc/gai.conf파일 로 제어 할 수 있습니다 . 기본적으로 주석 만 있습니다. precedence줄의 주석을 해제하고 주석에서 제안 된 변경을 수행하면 기본 IPv6 대신 IPv4를 선호하도록 호스트 이름 확인을 얻을 수 있습니다.
telcoM

@telcoM 예, 그렇게 할 수 있습니다. 그러나 우선 순위를 변경하면 예기치 않은 동작이 발생하므로 해당 컴퓨터를 사용하는 모든 사람에게 경고를 표시하는 것이 좋습니다.
Michael Hampton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.