在 WSL 2 中永久更改 /etc/resolv.conf

在 WSL 2 中永久更改 /etc/resolv.conf

在 WSL 2 上,當我嘗試連接到網站時,遇到問題:

$ 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

我嘗試發表評論斯努澤克的回答但沒有足夠的聲譽。

來自連結解決方案在他們的回答中,加上:

[network]
generateResolvConf=false

to/etc/wsl.conf確實會阻止 wsl 自動生成文件,但僅限於關閉一次後。完成後,配置將受到尊重,並且不需要/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

這些步驟將確保/etc/resolv.conf已正確配置名稱伺服器 8.8.8.8每次 wsl 啟動時

  1. 為初始使用者新增 bashrc 條目
echo "sudo su -" >> ~/.bashrc
  1. 為初始使用者建立 sudoers 條目
sudo su -
    
echo "username ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/username
  1. 為 root 使用者新增 bashrc 條目
echo "nameserver 8.8.8.8" > /etc/resolv.conf

筆記:這將覆蓋/etc/resolv.conf文件。您可以使用sed命令根據需要進行任何特定修改

相關內容