WSL 2 で /etc/resolv.conf の変更を永続化する

WSL 2 で /etc/resolv.conf の変更を永続化する

WSL 2 で Web サイトに接続しようとすると、次のような問題が発生します。

$ ping www.google.com
ping: www.google.com: Temporary failure in name resolution

/etc/wsl.confさて、これを修正するには、次のコンテンツを追加する必要がありました:

[network]
generateResolvConf = true

そして、次のように変更する必要があります/etc/resolv.conf:

nameserver 8.8.8.8

これは問題なく動作します。

ただし、システムを再起動したり、wsl をシャットダウンしたり、同様の操作を行うと、/etc/resolv.conf以前の値で上書きされます。

もちろん、/etc/wsl.conf次のように変更して再起動すると:

[network]
generateResolvConf = false

上記の修正は再び消えてしまいました。

/etc/resolv.confでは、WSL 2 で変更を永続的にするにはどうすればよいでしょうか?

答え1

この解決策を見つけましたここ

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf

答え2

コメントしようとしたsnuczek の回答しかし、評判が十分ではありません。

からリンクされたソリューション彼らは答えの中で、次のように付け加えた。

[network]
generateResolvConf=false

は、wsl によるファイルの自動生成を停止しますが、これは一度シャットダウンされた場合のみです。完了すると、構成が尊重され、コマンドを使用してファイルを不変にする/etc/wsl.conf必要がなくなります。/etc/resolv.confchattr +i

wsl をシャットダウンするには、wsl --shutdownWindows コマンド プロンプトで実行します (これにより、すべての WSL ディストリビューションがシャットダウンされます)。

もちろん、DNS サーバーをファイルに追加する必要があります/etc/resolv.conf(例:

nameserver 1.1.1.1
nameserver 1.0.0.1

答え3

これらの手順により、conf ファイル適切に設定されているネームサーバー 8.8.8.8WSLが始まるたびに

  1. 初期ユーザー用のbashrcエントリの追加
echo "sudo su -" >> ~/.bashrc
  1. 初期ユーザーの sudoers エントリの作成
sudo su -
    
echo "username ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
  1. ルートユーザー用のbashrcエントリの追加
echo "nameserver 8.8.8.8" > /etc/resolv.conf

注記:これにより、conf ファイルファイル。sed必要に応じて特定の変更を行うコマンド

関連情報