在我的Linux机器上,我有各种各样的守护进程,可以绑定到::上的所有支持IPv6的接口。 当他们这样做的时候,Linux发送IPv4请求到那个被映射为例如::ffff:198.51.100.37守护进程。
相反,如果守护进程绑定到:: IPv4连接将被拒绝,只有IPv6连接被接受。 要接收IPv4连接,我希望守护进程必须显式绑定到0.0.0.0 (以及: :: 。
换句话说,我想在IPv6上运行一个服务,而不是在IPv4上运行。
有没有办法做到这一点?
这是由net.ipv6.bindv6only sysctl控制的。 将以下内容添加到/etc/sysctl.conf并运行sudo sysctl -p来实现更改。
net.ipv6.bindv6only=1
应用程序也可以显式地只绑定到IPv6地址,而不是全局更改,例如,nginx具有listen指令的ipv6only选项。 这对应于setsockopt()的IPV6_V6ONLY选项。