18.04:Bionic Beaver:强制执行static /etc/resolv.conf

以前,在Ubuntu 16.04上,当Ubuntu更新安装了dnsmasq软件包,配置它并且优先于我自己的超稳定,超快速和自己配置的BIND DNS服务器时,我感到被背叛了。 感觉好像Ubuntu攻击了我的工作站。

由于我碰巧是一名系统管理员,这是非常不可接受的。 这是一个奇怪的电话。 这是当你去解决问题时,在你的一个步骤中你使用dignslookup ,你会惊讶地看到lo界面回复你。 恐慌

有没有办法不仅可以解决这个问题,还可以保证/etc/resolv.conf可以防篡改?

/etc/NetworkManager/NetworkManager.conf简单编辑并禁用systemd-resolved.service (如本答案https://askubuntu.com/a/907249/719422 )。 但仅此一点,虽然必不可少,但并不能保证防篡改resolv.conf

要真正强制执行静态/etc/resolv.conf ,您知道它将在任何类型的重新启动后继续存在,您需要为其设置immutable属性。 除了上面提到的Bastian Voigt的答案之外,你还可以使用SuperUser:

 echo nameserver 8.8.8.8 > /etc/resolv.conf chattr -e /etc/resolv.conf chattr +i /etc/resolv.conf 

…将nameserver更改为您选择的值。 这样,您就可以拥有一个非常静态的/etc/resolv.conf

根据文档,您可以将resolv.conf写入/usr/lib/systemd/resolv.conf ,这是一个可以从/etc/resolv.conf链接的静态文件。 这不应该改写。

 sudo ln -sf /usr/lib/systemd/resolv.conf /etc/resolv.conf 

http://manpages.ubuntu.com/manpages/bionic/man8/systemd-resolved.service.8.html#contenttoc3

在/etc/resolv.conf

支持四种处理/etc/resolv.conf模式(请参阅resolv.conf(5)):

提供了一个静态文件/usr/lib/systemd/resolv.conf,它将127.0.0.53 DNS存根(见上文)列为仅DNS服务器。 可以从/etc/resolv.conf中对此文件进行符号链接,以便将绕过本地DNS API的所有本地客户端连接到systemd-resolved。 此文件不包含任何搜索域。

存在的文件是另一个文件的符号链接。 删除文件

  rm /etc/resolve.conf
 vim / etc resolve.conf
输入你的数据
 :WQ

该文件不再是符号链接而是持久文件。

/etc/resolv.conf上使用chattr将不起作用,因为/etc上的resolv.conf文件只是一个符号链接。

执行用户MK解释的内容,但指向/run/resolvconf/resolv.con