
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.conf
chattr +i
wsl をシャットダウンするには、wsl --shutdown
Windows コマンド プロンプトで実行します (これにより、すべての WSL ディストリビューションがシャットダウンされます)。
もちろん、DNS サーバーをファイルに追加する必要があります/etc/resolv.conf
(例:
nameserver 1.1.1.1
nameserver 1.0.0.1
答え3
これらの手順により、conf ファイル適切に設定されているネームサーバー 8.8.8.8WSLが始まるたびに
- 初期ユーザー用のbashrcエントリの追加
echo "sudo su -" >> ~/.bashrc
- 初期ユーザーの sudoers エントリの作成
sudo su -
echo "username ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
- ルートユーザー用のbashrcエントリの追加
echo "nameserver 8.8.8.8" > /etc/resolv.conf
注記:これにより、conf ファイルファイル。sed必要に応じて特定の変更を行うコマンド