使用此腳本成功停用 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