我在网上看到的大多数信息都说要编辑/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 缓存一起工作,而不是绕过它。
答案1
base
我相信如果您想覆盖 DNS 名称服务器,您只需在 .txt下的文件中添加与此类似的行即可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
文件中。
参考
答案2
我也对这个问题感兴趣,我尝试了@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
指出 dns 服务器是
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 控制
- 无论 dhcp 提供的服务器如何,dnsserver 实际上都被强制为 8.8.4.4,但是您会失去 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
答案3
我发现您可以dnsmasq
通过添加以下行来更改使用的名称服务器/etc/dnsmasq.conf
:
server=8.8.8.8
server=8.8.4.4
不过我没有/etc/dnsmasq.conf
文件,因为它是由 dnsmasq 软件包安装的,但 Ubuntu 仅附带 dnsmasq-base。我跑了sudo apt-get install dnsmasq
,然后编辑/etc/dnsmasq.conf
,然后sudo service dnsmasq restart
然后sudo service network-manager restart
。
我跑去sudo tail -n 200 /var/log/syslog
检查我的系统日志并验证是否dnsmasq
正在使用我指定的名称服务器:
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.8.8#53
Oct 21 23:00:54 mylaptop dnsmasq[8611]: using nameserver 8.8.4.4#53
答案4
搜索“网络连接”
打开它
然后选择 WiFi 或以太网,或者您正在使用的任何内容,然后单击编辑。你会得到这个:
在选项卡中选择 ipv4
仅在方法中选择地址
在下面输入您的 DNS 名称并保存
你完成了