SSHがnetstatのプロトコルをtcp6 *と* tcpとしてマークするのはなぜですか?

SSHがnetstatのプロトコルをtcp6 *と* tcpとしてマークするのはなぜですか?
$ netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN  

ポート22に2つのレコード(:::22および)があるのはなぜですか? 1つはプロトコルを次に使用し、1つは次に使用しますか?0.0.0.0:22tcptcp6

これはUbuntu 12.04.4にあります

答え1

デフォルトでは、sshdipv4とipv6が使用されます。AddressFamily次のコマンドを使用して、sshdが使用するプロトコルを設定できます。/etc/ssh/sshd_config

ipv4とipv6の場合(デフォルト)

AddressFamily any

IPv4でのみ利用可能

AddressFamily inet

IPv6でのみ利用可能

AddressFamily inet6

変更を適用するには、変更してsshd_config再起動してください。sshd

答え2

実際、それはもっと面白いです。

デフォルトでは、IPv6を完全に無効にしても、いくつかのソケットは奇妙なカーネルの理由のために「TCP6 / UDP6」として認識されます。

3Gネットワ​​ークに接続されており、IPv6をサポートしていないAndroid携帯電話でnetstatを実行した後、この問題が見つかりました(APN設定で無効になっており、キャリアによって明示的にサポートされていません)。

WhatsAppへのTCP6接続が何とか持続することを確認した後、調査を開始して次のリンクを見つけました。 https://blog.codecentric.de/en/2014/04/note-netstat/

答え3

::IPv4とIPv6をまとめて会話するだけでも可能です。なぜ一部のアプリケーション(opensshを含む)がそれを利用しないのか疑問に思います。

これFreeBSD開発者マニュアルのIPv6セクション関連性があるかもしれないいくつかの興味深いコメントがあります。

RFC2553は、特にポートスペースの問題、障害モード、およびAF_INET / INET6ワイルドカードバインディングの間の関係に関して、ワイルドカードバインディングの問題についてあまりにも少し説明しているようです。このRFCは複数の一致する解釈を持つことができますが、異なる動作をする可能性があります。したがって、移植可能なアプリケーションを実装するには、カーネルの動作を想定しないでください。 getaddrinfo(3) を使用するのが最も安全な方法です。 1999年3月中旬、ポート番号の空白とワイルドカードバインディングの問題はipv6impメーリングリストで長く議論されましたが、具体的な合意はありませんでした(意味は実装者によって異なります)。メーリングリストのアーカイブを確認してください。

また、多数のシステムがIPv6をサポートしていない場合、このデフォルトの動作が定義されていると推測することもできます。

関連情報