このスクリプトを使用して 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