使用此脚本成功禁用 IPv6 后:
echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf
sysctl -p
我尝试使用此脚本重新启用:
sed -i "/net.ipv6.conf.all.disable_ipv6/d" /etc/sysctl.conf
sed -i "/net.ipv6.conf.default.disable_ipv6/d" /etc/sysctl.conf
sed -i "/net.ipv6.conf.lo.disable_ipv6/d" /etc/sysctl.conf
sysctl -p
我已经验证启用脚本从 sysctl.conf 文件中删除了禁用行。
在每种情况下,我都会用以下命令检查结果:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6
其中“1”表示禁用,“0”表示未禁用。
重新启用部分不起作用。
在每种情况下,sysctl -p 命令都会重新加载 /etc/sysctl.conf 文件。但是,重新加载似乎只是将其拉入其缓冲区,而不是完全覆盖它,这样就不会删除禁用属性。
这个分析正确吗?
如果是这样,我没有看到清除 sysctl.conf 缓存的选项。有吗?或者有针对此要求的策略吗?
答案1
中的条目/etc/sysctl.conf
以及其中包含的任何文件指定在启动时或运行 时将应用哪些 sysctl 设置sudo sysctl -p
。但此文件中缺少条目意味着这样的 sysctl(其中有数千个)不会改变无论其当前持有什么价值。
您从此文件中删除了禁用 IPv6 的 sysctl 条目,但似乎您实际上并未更改 sysctl 设置本身。运行sudo sysctl -p
不会更改它们,因为它们不在 中/etc/sysctl.conf
。
为了将这些条目改回其默认值,您可以重新启动系统,或使用sysctl
明确设置它们。例如:
sudo sysctl net.ipv6.conf.all.disable_ipv6=0
sudo sysctl net.ipv6.conf.default.disable_ipv6=0
sudo sysctl net.ipv6.conf.lo.disable_ipv6=0