为什么 SSH 在 netstat 中将协议显示为 tcp6 *and* tcp?

use*_*551 9 ssh ipv6 netstat protocols

$ 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  
Run Code Online (Sandbox Code Playgroud)

为什么端口 22 (:::220.0.0.0:22)有两条记录,为什么一个使用协议 astcp而另一个使用tcp6

这是在 Ubuntu 12.04.4 上

Cre*_*eek 8

默认sshd使用 ipv4 和 ipv6。您可以通过AddressFamily指令配置 sshd 使用的协议/etc/ssh/sshd_config

对于 ipv4 和 ipv6(默认)

AddressFamily any
Run Code Online (Sandbox Code Playgroud)

仅适用于 ipv4

AddressFamily inet
Run Code Online (Sandbox Code Playgroud)

仅适用于 ipv6

AddressFamily inet6
Run Code Online (Sandbox Code Playgroud)

进行任何更改后sshd_config重新启动sshd以使更改生效。


小智 7

其实稍微有点意思

基本上,即使您完全禁用 IPv6,由于奇怪的内核原因,某些套接字也会被识别为“TCP6/UDP6”。

我在连接到 3G 网络的 android 手机上运行 netstat 后注意到了这一点,而没有支持 IPv6(在 APN 设置中禁用并且运营商明确不支持)

在我看到 WhatsApp 的 TCP6 连接以某种方式持续存在后,我开始研究并找到了这个链接:https : //blog.codecentric.de/en/2014/04/note-netstat/