Fising's Blog

all about web application development

Linux IPv6Only

最近在编写 systemd.socket 的时候,ListenStream=选项使用了 [x:]y 格式,此为 IPv6 格式。

然而我在启动另外一个只监听 IPv4 端口的服务器的时候,报告端口已经被占用。通过 netstat -anp 查看,发现:

只能看到 tcp6 端口被占。那么为何 tcp4 的端口也无法监听了呢?

仔细看看 systemd.socket 的文档,在关于 ListenStream=ListenDatagram=ListenSequentialPacket=  选项的说明中,有一段文字:If the address string is a string in the format [x]:y, it is read as IPv6 address x on a port y. Note that this might make the service available via IPv4, too, depending on the BindIPv6Only= setting (see below). 如果使用 IPv6的选项值,那么IPv4也可以访问该服务。这取决于 BindIPv6Only 选项的设置。该选项默认是 both。

另:/proc/sys/net/ipv6/bindv6only 配置了系统是否默认开启 IPv6Only,此配置文件的默认值为 0 (即 IPv6 默认兼容 IPv4)。

发表评论