$ 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にあります
デフォルトでは、sshd
はipv4およびipv6を使用します。 /etc/ssh/sshd_config
のAddressFamily
ディレクティブを使用して、sshdが使用するプロトコルを設定できます。
Ipv4&ipv6の場合(デフォルト)
AddressFamily any
Ipv4のみ
AddressFamily inet
Ipv6のみ
AddressFamily inet6
sshd_config
に変更を加えたら、変更を有効にするためにsshd
を再起動します。
実はちょっと面白いです
基本的に、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をサポートしていないときに定義されたと推測することもできます。