在我的 Linux 机器上,我有各种守护进程,它们可以绑定到 上所有启用 IPv6 的接口::
。当它们这样做时,Linux 会将 IPv4 请求发送到该守护进程,例如,映射为::ffff:198.51.100.37
。
我希望守护进程绑定到 时,拒绝 IPv4 连接,只接受 IPv6 连接::
。要接收 IPv4 连接,我希望守护进程必须明确绑定到0.0.0.0
(以及::
)。
换句话说,我想在 IPv6 上专门运行服务,而不是在 IPv4 上。
有办法实现这个吗?
答案1
这是由net.ipv6.bindv6only
sysctl 控制的。添加以下内容/etc/sysctl.conf
并运行sudo sysctl -p
以使更改生效。
net.ipv6.bindv6only=1
应用程序也可以明确地只绑定到 IPv6 地址,而不是全局更改,例如,nginx 可以ipv6only
选择listen
指令。这对应于IPV6_V6ONLY
选项setsockopt()
。