當 resolv.conf 被覆蓋時,如何設置我的 DNS?
我在網上看到的大多數資訊都說要編輯
/etc/resolv.conf
,但我在那裡所做的任何更改都會被覆蓋。$ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- # YOUR CHANGES WILL BE OVERWRITTEN nameserver 127.0.1.1
似乎 127.0.1.1 是
dnsmasq
.dnsmasq
文件說要/etc/resolv.conf
編輯. 我嘗試將自定義名稱伺服器放入 中,但執行後/etc/resolv.conf.d/base
未顯示更改。/etc/resolv.conf``sudo resolvconf -u
僅供參考,我不想在每個連接的基礎上更改 DNS,我想設置預設 DNS 設置以在未另行指定時用於所有連接。
更新:
我自己回答了這個問題: https ://unix.stackexchange.com/a/163506/67024
我認為這是最好的解決方案,因為:
- 有用。
- 它需要最少的更改和
- 它仍然與 dnsmasq 的 DNS 記憶體一起工作,而不是繞過它。
我相信如果您想覆蓋 DNS 名稱伺服器,您只需在
base
文件中添加與此類似的行resolv.conf.d
。例子
**注意:**在開始之前,請確保已安裝以下軟體包,
apt install resolvconf
.$ sudo vim /etc/resolvconf/resolv.conf.d/base
然後像這樣將您的名稱伺服器列表放入:
nameserver 8.8.8.8 nameserver 8.8.4.4
最後更新
resolvconf
:$ sudo resolvconf -u
如果您查看手冊頁,
resolvconf
它描述了/etc/resolvconf/resolv.conf.d/
./etc/resolvconf/resolv.conf.d/base File containing basic resolver information. The lines in this file are included in the resolver configuration file even when no interfaces are configured. /etc/resolvconf/resolv.conf.d/head File to be prepended to the dynamically generated resolver configuration file. Normally this is just a comment line. /etc/resolvconf/resolv.conf.d/tail File to be appended to the dynamically generated resolver configuration file. To append nothing, make this an empty file. This file is a good place to put a resolver options line if one is needed, e.g., options inet6
即使
head
文件頂部有警告:$ cat /etc/resolvconf/resolv.conf.d/head # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
存在此警告,以便在建構這些文件時,警告最終將進入
resolv.conf
這些文件將用於製作的結果文件中。因此,您也可以輕鬆地nameserver
將上述base
文件的行添加到head
文件中。參考
我也對這個問題感興趣,並嘗試了@sim 提出的解決方案。
為了測試它,我把
nameserver 8.8.8.8
在
/etc/resolvconf/resolv.conf.d/base
和nameserver 8.8.4.4
在
/etc/resolvconf/resolv.conf.d/head
然後我重新啟動了網路
sudo service network-manager restart
結果是
/etc/resolv.conf
看起來像# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.4.4 nameserver 127.0.1.1
並
nm-tool
指出 dnsserver 是DNS: 208.67.222.222 DNS: 208.67.220.220
這是我的路由器提供的。另一方面,探勘地址告訴
;; Query time: 28 msec ;; SERVER: 8.8.4.4#53(8.8.4.4)
如果我是對的,我從這一切中得出結論:
- resolvonf 只讀取“head”部分:“base”部分由 dnsmasq 以某種方式控制
- dnsserver 實際上被強製到 8.8.4.4,不管 dhcp 提供的伺服器是什麼,但是你失去了 dnsmasq 提供的記憶體,因為請求總是發送到 8.8.4.4
- dnsmasq 仍然只使用 dhcp 提供的 dnsserver。
總而言之,它有效,但我認為這不是所要求的預期結果。我認為更接近的解決方案如下。編輯
sudo vim /etc/dhcp/dhclient.conf
然後加
supersede domain-name-servers 8.8.8.8;
結果如下:resolv.conf 只包含 127.0.0.1,這意味著呼叫了 dnsmasq 記憶體並且 nm-tool 說
DNS: 8.8.8.8
這意味著如果搜尋的名稱不在記憶體中,則在 8.8.8.8 而不是 dhcp 提供的伺服器上請求它。
另一個(也許更好)的選擇是使用“prepend”而不是“supersede”:這樣,如果名稱沒有被 8.8.8.8 解析,那麼請求就會退回到其他伺服器上。事實上,nm-tool 說
DNS: 8.8.8.8 DNS: 208.67.222.222 DNS: 208.67.220.220