
ping応答を無効にしたら、次のコマンドを実行します。
# sysctl net.ipv4.icmp_echo_ignore_all=1
# sysctl -p
localhostと127.0.0.1をpingすると、他の結果が表示されます。
# 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
ping 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
なぜ結果が違うのですか?
答え1
このping
コマンドは、名前が解決されるアドレスを表示します。この場合、IPv6 localhostアドレスで解決されます::1
。一方、127.0.0.1
はIPv4アドレスなので、明示的にping
IPv4を使用します。
使用sysctl
している製品はIPv4 pingにのみ影響するため、応答を受け取りますが、::1
応答を受け取ることはできません127.0.0.1
。
確認によって取得されるアドレスは、localhost
DNS リゾルバがどのように設定されたかによって異なります。localhost
に設定されている可能性がありますが、/etc/hosts
理論的には実際のネームサーバーからインポートできます。
ip6tables
IPv6 pingを削除する方法については、IPv6と似ていないようですので、確認してみることをお勧めします。sysctl
または、ネットワークで IPv6 を使用していない場合は、IPv6 を完全に無効にします。 (もちろん、これは非常に未来志向のアイデアではありませんが、現在使用していない場合は実行可能です。)
答え2
127.0.0.1:
127.0.0.1は、ほとんどのシステムではデフォルトのループバックです。ループバックアドレスは、システムがオペレーティングシステムのネットワークスタックを検証するために使用するアドレスです。
IPv4のループバックアドレスは、サブネットの任意の値を持つことができます。127.0.0.0/8
IPv6のループバックアドレスは、サブネットの任意の値を持つことができます。::1/128
ping
ネットワークスタックがオペレーティングシステムで実行されている場合、この範囲のすべての値は有効でなければなりません。
ローカルホスト:
localhost
ドメイン名ですが、自分のコンピュータにローカルなホスト名です。
このホスト名は、デフォルトでIPv4およびIPv6ループバック(通常はまたは127.0.0.1
)を指します::1
。
localhost
ファイルを編集すると、アドレスを簡単に変更できます/etc/hosts
。
システムがこのサービスを使用している場合は、systemd-resolved
localhostを確認するかのように処理されます。
~によると出荷書類ビーチsystemd-resolved
:
ホスト名「localhost」と「localhost.localdomain」(および「.localhost」または「.localhost.localdomain」で終わるすべてのホスト名)はIPアドレスで解決されます
127.0.0.1
。::1
平らな
ホスト名またはドメイン名をpingしようとすると、オペレーティングシステムにホスト名またはドメイン名の解決を要求します。あなたの場合はlocalhostを無効にしましたが、icmpv4
localhostはIPv6ループバックとIPv4ループバックとして解決されましたが、IPv6ループバック応答のみが解決されました。
違いは、ある場合はIPに対してpingを試み、別の場合は複数の値を持つことができるホスト名に対してpingを試みることです。
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
答え3
ローカルホストには、IPv6アドレス::1とIPv4アドレス127.0.0.1という2つのアドレスがあります。
IPv6 はデフォルトのプロトコルなので、::1 は常に 127.0.0.1 より優先されます。これが localhost に ping を要求したときにすでに ::1 ping をしている理由です。
:: 1に対してpingを実行できますが、127.0.0.1ではpingを実行できない理由について、sysctlはIPv4のpingのみを無効にし、IPv6では無効にしません。私が知っている限り、IPv6のpingを無効にするためのsysctlはありませんが、必要に応じてファイアウォールで無効にすることができます(無効にすることはお勧めできません)。