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


8
$ 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(:::220.0.0.0:22)记录,为什么一个使用协议as tcp而另一个使用协议tcp6

这是在Ubuntu 12.04.4上


6
好吧,因为SSH正在侦听IPv4和IPv6的通配符地址,所以您可以同时通过IPv4和IPv6到达SSH守护程序。
Andreas Wiese 2014年

Answers:


8

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

对于ipv4和ipv6(默认)

AddressFamily any

仅适用于ipv4

AddressFamily inet

仅适用于ipv6

AddressFamily inet6

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


6

其实有点有趣

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

在未连接IPv3支持的android手机上运行netstat后,我注意到了它(不支持IPv6)(在APN设置中禁用,并且运营商明确不支持)

在看到WhatsApp的TCP6连接持续存在后,我开始研究并找到此链接:https : //blog.codecentric.de/en/2014/04/note-netstat/


0

可以仅绑定::IPv4和IPv6并同时通话。我想知道为什么某些应用程序(包括openssh)没有利用此优势。

FreeBSD开发人员手册中有关IPv6的这一有一些有趣的评论,可能与此有关:

看起来RFC2553在通配符绑定问题上讨论得太少了,尤其是在端口空间问题,失败模式以及AF_INET / INET6通配符绑定之间的关系上。此RFC可以有几种单独的解释,它们符合该RFC,但行为不同。因此,要实现可移植的应用程序,您不应对内核中的行为承担任何责任。使用getaddrinfo(3)是最安全的方法。在1999年3月中旬,在ipv6imp邮件列表中详细讨论了端口号空间和通配符绑定问题,并且似乎没有具体的共识(指的是实施者)。您可能要检查邮件列表档案。

我们还可以推测,当大量系统不支持IPv6时,便定义了此默认行为。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.