私はコンピュータを持っています:
Linux superhost 3.2.0-4-AMD64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux
すべてのインターフェースのポート80でApacheを実行し、netstat -planA inet
には表示されませんが、予期せずnetstat -planA inet6
に見つかります。
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::5672 :::* LISTEN 2402/beam.smp
tcp6 0 0 :::111 :::* LISTEN 1825/rpcbind
tcp6 0 0 :::9200 :::* LISTEN 2235/Java
tcp6 0 0 :::80 :::* LISTEN 2533/Apache2
tcp6 0 0 :::34611 :::* LISTEN 1856/rpc.statd
tcp6 0 0 :::9300 :::* LISTEN 2235/Java
...
tcp6 0 0 10.0.176.93:80 10.0.76.98:53704 TIME_WAIT -
tcp6 0 0 10.0.176.93:80 10.0.76.98:53700 TIME_WAIT -
上記のように、TCP4で問題なく到達できます。ただし、これらの接続もtcp6
の下に表示されます。どうして?
デフォルトでは、Apache Listen
パラメータにアドレスを指定しない場合、IPv4-mapped IPv6
アドレスを使用してipv6アドレスを処理します。あなたは Apache ipv6 を見ることができます
netstat
の出力は、ApacheがIPv4アドレスをリッスンしていないことを意味するものではありません。 IPv4-mapped IPv6
アドレスです。
これは、すべてのIPv4アドレスがIPv6アドレスでもあるためです。狭い範囲のIPv6アドレスが、IPv4アドレスの1対1マッピングに使用するために確保されました。たとえば、IPv4アドレス192.0.2.128
はIPv6アドレスを介してアクセス可能です::ffff:192.0.2.128
。これは、IPv6のみをサポートするアプリケーションがIPv4アドレスで待機できるようにするために行われました。 IPv4はIPv6アドレスを処理する方法を知らないため(NATまたはその他のソリューションを使用できます)、これは他のことをせずにIPv6アドレス(マップされていない)に使用してIPv4アドレスと通信することはできません。ただし)。
すべてのIPv4アドレスはIPv6で表されるため、netstat
にIPv6を使用してアプリを一覧表示するように要求すると、IPv4も取得されます。
それは10.0.176.93
なので ::ffff:10.0.176.93
、 あるいは ::ffff:a00:b05d
、しかしアプリケーション開発者はそれを通常のドット表記IPv4アドレスとして表示することを選択しました。