我在 IPv4 上运行服务,但有时,似乎是随机的,该服务会使用 TCPv6 套接字(我用 监视它ss -s
)。我想避免这种情况,禁用任何 IPv6 连接。
我尝试通过输入 /etc/sysctl.conf 来禁用它:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
然后重新启动 sysctl sudo sysctl -p
。但是,尽管已禁用 IPv6,服务仍然会使用 IPv6:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1
我发现解决这个问题的唯一办法就是放下并抬起接口
sudo ifconfig eth1 down
sudo ifconfig eth1 up
注意:没有为任何接口分配 IPv6 地址。此外,我无法重新启动机器。
有什么解决办法吗?
答案1
您可以通过编辑 /etc/default/grub 从内核中完全禁用 IPv6。找到以下行:
GRUB_CMDLINE_LINUX_DEFAULT=""
替换为:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
然后运行:
update-grub
然后重新启动。
答案2
由于没有重启限制,我在这里采用了跳出思维定式的方法。也许如果您使用某种容器(例如 docker 或 lxc),则您的服务允许您禁用容器的 ipv6。
例如,Docker 守护进程有一个“--ipv6=true|false”标志