「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

なぜこれが起こるのですか?私のサーバーの構成のためですか?

使っていますDebian 9(緊張)。

編集する:コメントで発生したコメントの違いを明確にするために:

自分のパブリックIPアドレスをpingすると、トラフィックは実際にそこに移動します127.0.0.1。しかし、pingは正直でなければならず、実際にlocalhostをpingしていることを示さなければなりません。私が危険だと思うのは、接続に応じて11.22.33.44pingを送信しており、pingがトラフィックを送信するのと同じくらいですが、実際には送信しているということです。ifconfigeth0eth0lo

答え1

カーネルは「すでに存在する」ことを知っているので、ICMP パケット転送を「最適化」します。これがループバックインターフェイスで見られる理由です。他の人が詳細を入力することもできます。

それにもかかわらず:数年前にも同様の問題がありましunshareunshare -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 はローカルトラフィックなので、ループバックインターフェイスにあります。

関連情報