$ 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端口有两条记录(:::22
和0.0.0.0:22
),为什么一条使用protocol as tcp
,一条使用astcp6
这是在 Ubuntu 12.04.4 上
答案1
默认情况下sshd
使用 ipv4 和 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 时定义的。