如何禁用 IPv4 映射的 IPv6?

Mic*_*ton 21 linux ipv6

在我的 Linux 机器上,我有各种守护进程,它们可以绑定到::. 当他们这样做时,Linux 将 IPv4 请求发送到该守护进程,例如映射为::ffff:198.51.100.37.

相反,我希望拒绝 IPv4 连接,并且当守护程序绑定到::. 要接收 IPv4 连接,我希望守护程序必须显式绑定到0.0.0.0(以及::)。

换句话说,我想只在 IPv6 上运行服务,而不是在 IPv4 上运行。

有没有办法做到这一点?

mgo*_*ven 27

这是由net.ipv6.bindv6onlysysctl控制的。添加以下内容/etc/sysctl.conf并运行sudo sysctl -p以实现更改。

net.ipv6.bindv6only=1
Run Code Online (Sandbox Code Playgroud)

应用程序也可以明确地只绑定到 IPv6 地址,而不是全局更改它,例如,nginx 可以ipv6only选择该listen指令。这对应于 的IPV6_V6ONLY选项setsockopt()