web-dev-qa-db-ja.com

netstat — IPv4デーモンが-A inet6にのみリストされているポートをリッスンするのはなぜですか?

私はコンピュータを持っています:

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の下に表示されます。どうして?

24
Mischa Arefiev

デフォルトでは、Apache Listenパラメータにアドレスを指定しない場合、IPv4-mapped IPv6アドレスを使用してipv6アドレスを処理します。あなたは Apache ipv6 を見ることができます

netstatの出力は、ApacheがIPv4アドレスをリッスンしていないことを意味するものではありません。 IPv4-mapped IPv6アドレスです。

17
beginer

これは、すべての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アドレスとして表示することを選択しました。

16
Patrick