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
이 결과가 다른 이유는 무엇입니까?
답변
ping
명령 쇼는 주소가로 이름을 해결. 이 경우 IPv6 로컬 호스트 주소로 확인되었습니다 ::1
. 반면에 127.0.0.1
IPv4 주소이므로 ping
IPv4를 명시 적으로 사용합니다.
sysctl
당신에 대한 답변 수 있도록에만 사용은 IPv4의 핑에 영향을 미치는 ::1
있지만를 들어 127.0.0.1
.
확인에서 얻은 주소 localhost
는 DNS 확인자가 어떻게 설정되어 있는지에 따라 다릅니다. localhost
아마도에 설정되어 /etc/hosts
있지만 이론적으로 실제 이름 서버에서 가져올 수 있습니다.
IPv6 핑을 삭제하는 방법에 대해서는 IPv6 ip6tables
과 유사하지 않은 것처럼 보이기 때문에 를 조사해야 할 수도 있습니다 sysctl
. 또는 네트워크에서 IPv6을 사용하지 않는 경우 IPv6을 완전히 비활성화하십시오. (물론 그것은 매우 미래 지향적 인 아이디어는 아니지만 현재 어쨌든 사용하지 않으면 가능합니다.)
답변
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
답변
로컬 호스트에는 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은 없지만 실제로 필요한 경우 방화벽에서 비활성화 할 수 있습니다 (물론 비활성화하지 않는 것이 좋습니다).