如何禁用映射了IPv4的IPv6?


17

在我的Linux机器上,我有各种守护程序可以绑定到上所有启用IPv6的接口::。当他们这样做时,Linux将IPv4请求发送到映射为例如的守护程序::ffff:198.51.100.37

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

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

有没有办法做到这一点?

Answers:


22

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

net.ipv6.bindv6only=1

应用程序还可以显式仅绑定到IPv6地址,而不能全局更改此地址,例如,nginx具有ipv6onlylisten指令的选项。这对应于的IPV6_V6ONLY选项setsockopt()


幸运的是,我发现该应用程序(在本例中为OpenSSH)在设置时已经在套接字上设置了IPV6_V6ONLY,ListenAddress ::因此我无需诉诸使用sysctl(并重新配置其他所有内容)。
迈克尔·汉普顿
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.