web-dev-qa-db-ja.com

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および0.0.0.0:22)があるのはなぜですか。また、一方がtcpとしてプロトコルを使用し、もう一方がtcp6としてプロトコルを使用する理由

これはUbuntu 12.04.4にあります

8
user80551

デフォルトでは、sshdはipv4およびipv6を使用します。 /etc/ssh/sshd_configAddressFamilyディレクティブを使用して、sshdが使用するプロトコルを設定できます。

Ipv4&ipv6の場合(デフォルト)

AddressFamily any

Ipv4のみ

AddressFamily inet

Ipv6のみ

AddressFamily inet6

sshd_configに変更を加えたら、変更を有効にするためにsshdを再起動します。

8
Creek

実はちょっと面白いです

基本的に、IPv6を完全に無効にしても、カーネルの不思議な理由により、一部のソケットは「TCP6/UDP6」として識別されます。

Android IPv6サポートのインクなしで3Gネットワ​​ークに接続された電話(APN設定で無効にされ、キャリアによって明示的にサポートされていない)でnetstatを実行した後に気づきました)

WhatsAppのTCP6接続がどういうわけか持続するのを見た後、私は調査を開始し、このリンクを見つけました: https://blog.codecentric.de/en/2014/04/note-netstat/

::にのみバインドして、IPv4とIPv6の両方を通信することが可能です。 opensshを含む一部のアプリケーションがこれを利用しない理由を知りました。

この FreeBSD開発者向けハンドブックのIPv6に関するセクション には、関連のある興味深いコメントがあります。

RFC2553は、ワイルドカードバインドの問題、特にポートスペースの問題、障害モード、およびAF_INET/INET6ワイルドカードバインド間の関係について、あまり話していないようです。このRFCには、それに準拠しているが動作が異なる複数の個別の解釈が存在する場合があります。したがって、移植可能なアプリケーションを実装するには、カーネルの動作について何も仮定しないでください。 getaddrinfo(3)を使用するのが最も安全な方法です。ポート番号スペースとワイルドカードバインドの問題は、1999年3月中旬にipv6impメーリングリストで詳細に議論され、具体的なコンセンサス(手段、実装者に至るまで)がないようです。メーリングリストのアーカイブをチェックしたいかもしれません。

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

0
cpugeniusmv