哪位好心的 Linux 大佬帮帮忙, Debian 11 下如何彻底删除运营商 DNS 服务器?

2022-08-02 09:57:52 +08:00
 oatw

目前我干了这些:

首先,在以下文件插入了 google DNS servers 。

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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "resolvectl status" to see details about the actual nameservers.
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

然后,重启相关服务

sudo systemctl restart resolvconf.service
sudo systemctl restart systemd-resolved.service

最后,查看当前生效 DNS servers

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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "resolvectl status" to see details about the actual nameservers.
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844

nameserver 211.141.0.99  ### 如何把运营商的 DNS 服务器彻底干掉? ###
nameserver 211.141.16.99 ### 如何把运营商的 DNS 服务器彻底干掉? ###

nameserver 127.0.0.53

另外,执行以下命令发现运营商的两个 DNS 服务器也还在:

resolvectl status

输出 ->

Global
         Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: foreign
Current DNS Server: 8.8.8.8
       DNS Servers: 8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844 211.141.0.99 211.141.16.99 ### 如何把运营商的 DNS 服务器彻底干掉? ###

Link 2 (enp0s31f6)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
     Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
   DNS Servers: 211.141.0.99 211.141.16.99 ### 如何把运营商的 DNS 服务器彻底干掉? ###

求问:如何彻底干掉运营商的 DNS 服务器?

3165 次点击
所在节点    Linux
12 条回复
cubecube
2022-08-02 10:07:23 +08:00
别用 dhcp 配置 static
dhcp 会改 dns
hefish
2022-08-02 10:13:25 +08:00
dhcp 协议本身就可以推送 dns 等网络配置信息吧。要不你试试 chattr +i /etc/resolv.conf
zbinlin
2022-08-02 10:25:54 +08:00
在 `/etc/systemd/network/` 下找到 `enp.network` (可能是其他文件名),在里面添加

```
[DHCP]
UseDNS = no
```

如果有 IPv6 的 DNS ,再添加:

```
[IPV6ACCEPTRA]
UseDNS = no
```
dzdh
2022-08-02 10:27:01 +08:00
```
# 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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "resolvectl status" to see details about the actual nameservers.
```

> # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
ksc010
2022-08-02 10:27:58 +08:00
下面这 3 个都会 修改 dns 配置文件, 若要固定 dns 需要判断当前是哪个程序在管理
1. resolvconf
2. NetworkManager
3. DHCP clients ( dhclient dhcpd )



##dhcpd

https://man.archlinux.org/man/dhcpcd.conf.5

sudo vi /etc/dhcpcd.conf

#option domain_name_servers, domain_name, domain_search, host_name
option domain_name, domain_search, host_name
static domain_name_servers=223.5.5.5 223.6.6.6


##dhclient
sudo vi /etc/dhcp/dhclient.conf

supersede domain-name-servers 223.5.5.5,223.6.6.6; #覆盖
prepend domain-name-servers 223.5.5.5,223.6.6.6; #附加
anytk
2022-08-02 10:31:35 +08:00
启用 systemd-resolved 服务
然后 链接 /etc/resolv.conf 指向 /run/systemd/resolve/stub-resolv.conf
然后 新建 /etc/systemd/resolved.conf.d/dns.conf ,加入自己的 dns ,注意使用 `Domains=~.` 行
```ini
[Resolve]
DNS=xxxxxxx
Domains=~.
```
重启 systemd-resolved 服务就可以了,具体可以去看 arch 的 wiki
oatw
2022-08-02 15:36:09 +08:00
@ksc010 谢谢你,果然是高手呀~
happyabs
2022-09-14 10:52:24 +08:00
debian 默认的网络管理为 ifupdown, 一般通过修改 /etc/network/interfaces 文件来启用 dhcp,具体配置操作可参考官方文档:
sudo nano /etc/network/interfaces
auto ens123
iface ens123 inet dhcp
happyabs
2022-09-14 11:06:30 +08:00
手贱想按^+Enter 换行,结果发送回复了
如果启用了 DHCP:
debian 默认的网络管理为 ifupdown, 一般通过修改 /etc/network/interfaces 文件来启用 DHCP, 具体配置操作可参考官方文档, 这里给出样例, 我的配置如下:
sudo nano /etc/network/interfaces
auto ens123
iface ens123 inet dhcp

之后就交由 dhcp 来配置 dns(dns 全称: domain-name-servers),
ifupdown 的 DHCP 方式:dhclient, pump, udhcpc, dhcpcd(按启用的先后顺序), 一般默认使用内置的 dhclient,
因此要修改 dhclient 的配置文件(/etc/dhcp/dhclient.conf), 才真正修改 DNS:
sudo nano /etc/dhcp/dhclient.conf
#添加下面这行就是覆盖全局所有使用 DHCP 的网卡的 DNS.
supersede domain-name-servers 202.96.128.86, 119.29.29.29, 202.96.134.133;

#添加下面这块代码就是只覆盖特定网卡的 DNS, 并且不获取 domain-name-servers 和 ipv6 的配置.
interface "ens192" {
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes;
supersede domain-name-servers 202.96.128.86, 119.29.29.29, 202.96.134.133;
}

#其中 supersede 这个修饰符的意思是只按用户指定的值, 忽略 DHCP 获取的; 此外还有 default prepend 等修饰符,具体可参考官方文档.
happyabs
2022-09-14 11:17:17 +08:00
如果没启用 DHCP:
那就直接在 /etc/network/interfaces 修改 dns 好了,如果不是用 debian 默认的 ifupdown, 用的是 networkd,那就改这个的配置文件

networkd 在 Debian11 中是已安装但未启用的,也不是 Debian 默认的网络管理,使用 networkctl 命令可检查其运行状态,networkd 修改 dns 更方便点貌似, 也支持 dhcp 只获取 ip 不获取 dns 的场景, 如果用 netplan 作为前端管理就更加方便了

以下是参考链接:
https://manpages.debian.org/buster/isc-dhcp-client/dhclient.8.en.html
happyabs
2022-09-14 11:18:41 +08:00
happyabs
2022-09-14 11:24:43 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/870131

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX