问题缘起
我在使用谷歌的时,浏览器不时会出现 “服务器长时间未响应” 的页面,同时在打开诸如 youtube,instagram 及 Twitter 时均可正常访问,当然我已经使用了代理。猜想是因为被 DNS 解析到了不可用的地址。然后使用 dig www.google.com
发现解析的 dns server 是内部地址。
其实大多时候还是可以访问谷歌,但是最近就越来越不给力了。不是要人机验证,就是浏览器页面提示
www.google.com
好久没响应。
继而采取之前了解到的修改 resolve.conf 的方式来修改为自定义的 DNS 服务器 8.8.8.8 和 8.8.4.4 等。但是写入后,每次在重新打开和关闭飞行模式后,resolve.conf 的 nameserver 重新被写成 DHCP 分配的 DNS Server 地址。
两个配置文件
这两个配置文件指的是 /etc/resolv.conf
和 /etc/sysconfig/network/config
。
在 resolv.conf
中,有提到修改
# NETCONFIG_DNS_STATIC_SEARCHLIST
# NETCONFIG_DNS_STATIC_SERVERS
# NETCONFIG_DNS_FORWARDER
或者
# NETCONFIG_DNS_POLICY=''
但并没说明要如何修改。于是继续打开/etc/sysconfig/network/config
修改一行:
NETCONFIG_DNS_STATIC_SERVERS="8.8.8.8 8.8.4.4 1.1.1.1"
其中我发现 NETCONFIG_DNS_STATIC_SEARCHLIST
只是代理域名的列表,由于我并没有计划修改这个也其实没有自己的域名(可能可以设置为 localhost
?),所以保持不变:
NETCONFIG_DNS_STATIC_SEARCHLIST=""
最后就是 NETCONFIG_DNS_FORWARDER
了,我的理解是可能也是类似两个 list 一样的,将 DNS 查询请求转发到这个 forwarder 上。
然后也保持默认值不变
NETCONFIG_DNS_FORWARDER="resolver"
并没结束
然而这样经过 “飞行模式 – 取消飞行模式” 的过程后, nameserver 还没有如我所愿成为
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1
然后我发现我还有个值没有设定 NETCONFIG_DNS_POLICY
,之前我有设置但是并未和前面三个值同时设置,是因为在 resolv.conf
中有这么一个词:
# Before you change this file manually, consider to define the
# static DNS configuration using the following variables in the
# /etc/sysconfig/network/config file:
# NETCONFIG_DNS_STATIC_SEARCHLIST
# NETCONFIG_DNS_STATIC_SERVERS
# NETCONFIG_DNS_FORWARDER
# or disable DNS configuration updates via netconfig by setting:
# NETCONFIG_DNS_POLICY=''
就是 or
。
同时在 config 文件中并没有对于 NETCONFIG_DNS_POLICY
的取值的讲解,只是说可以取到两个值:
## Type: string
## Default: "auto"
#
# Defines the DNS merge policy as documented in netconfig(8) manual page.
# Set to "" to disable DNS configuration.
#
NETCONFIG_DNS_POLICY="STATIC NetworkManager"
# NETCONFIG_DNS_POLICY=""
NETCONFIG_DNS_POLICY
于是抱着试试看的心态谷歌了一下,打开 第一条 点进去,先看了一下发布的时间 2009 年,当时心里小声嘀咕可能有点不妙。但来都来了。。。
下面就大概翻译一下意思:
博主大概也是因为某种原因(懒)想要设置静态 DNS Server,然后,也找到了在文件 /net/sysconfig/network/config
里的 NETCONFIG_DNS_POLICY
,但是确实对于这个设置来说,仅提到了两个无关痛痒的取值,而且对于这个变量的作用,配置文件并没有给出简要说明(此处我认为可以说明一下),但是注释说可以去看看 netconfig(8)
。好吧,其实到现在我也没有去看 netconfig(8)
。 然后找到了对应的脚本(/etc/netconfig.d/dns-resolver
)分析一通(不得不说,11 年过去了,这个脚本的功能还真是传家宝)。
我就不分析了,大概就是 NETCONFIG_DNS_POLICY
将前面三个变量和 网卡 DHCP 得来的 DNS Server 值以某种 POLICY(策略) 合并在一起。这个策略就是 NETCONFIG_DNS_POLICY
了。然后博主就将 resolve.conf
的一项改为:
NETCONFIG_DNS_POLICY="STATIC NetworkManager"
而这个策略,也就是将 STATIC 的 DNS Server List 和 NetworkManager 的 DNS Server List 遇到第一个非空的值就将这个 DNS Server List 作为 resolv.conf 的 nameserver 值。
最后
不知道是我打开 SUSE 的方式不对,还是 SUSE 对于这方面的资料还是太少,毕竟还是选择 SUSE 作为我的伙伴,也是 “大姑娘上轿——头一回” 吧。不过解决了困扰我好几个月的问题,心里还是有点小开心吧哈哈。