• 欢迎访问伊栖物联网社区,聚焦物联网技术和解决方案QQ群:735553309
  • ,从传感器到片上嵌入式系统,无线接入,边缘计算,在这里您可以讨论一切
  • 参加最新的物联网研讨会报名
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏伊栖Eccee

Ubuntu下DNS查询调试

软件和平台 peyoot 3年前 (2021-03-18) 3285次浏览 0个评论

Ubuntu下默认的DNS服务是systemd-resolved,它运行在后台,它的命令行方式是systemd-resolve。

查看当前的DNS服务器,可以用 sudo systemd-resolve –status

或用resolvectl dns命令查询dns服务器,以及用resolvectl query baidu.com来查询域名,这和dig是一样……

用dig baidu.com时,没有响应,但用resolvectl query超时会提示,因此比较有用。

不过在启用VPN时,情况就变得复杂了,有时候systemctl-resolved并不能正确解析域名,用resolvectl query baidu.com出错:

resolve call failed: Lookup failed due to system error: Connection timed out

一种常见的原因是,dns服务器不可达。

要确保sudo systemd-resolve –status后面接口对应的dns服务器可以ping通,就没问题,并且能服务于DNS查询。如果ping不通,则要么删除,要么用ip route配置路由。如果是不能服务于DNS查询,则要删除它。

一、因内网路由不可达

通常用pvpn连上服务器后,会把远端服务器当作网关,这样有可能造成本地原来可达的路由不可达,此时可以通过添加原来路由的方式,比如:

sudo ip route add 10.10.8.0/24 via 10.70.1.1

在pvpn开启之前,内网有专线路由10.70.1.1到10.10.8.X网段,开启后因为走公网而不通,重新添加路由,使得到达dns的路由不走公网默认网关即可。

 

二、因DNS服务器不起作用

systemd-resolved当前有一个特点,不知道算不算bug,它会尝试查询所有dns服务器,如果对方没响应,会导致DNS查询卡住。

通常我们是用电信运营商提供的DNS,但一般是配置在路由器上,如果您在电脑上配置了这种本地电信运营商直接的DNS,它只服务于境内的查询,如果连上pvpn后,虽然可以ping通这些IP,但它们不会响应非法IP的DNS查询,所以,不要在PC上配置这种DNS服务器,一般可以用1.1.1.1等境外公共DNS服务器,虽然会被墙过滤,但一旦连上PVPN后,就没有这方面的问题。

在Ubuntu上,一般是配置netplan来配置网络,路由和dns,合理配置可以让消弥DNS产生的问题的可能性。

network:
  version: 2
  ethernets:
    enp0s25:
      dhcp4: true
  wifis:
    wlo1:
      dhcp4: true
      access-points:
        myap:
          password: mypassword
      routes:
        - to: 10.10.8.0/24
          via: 192.168.1.1
          metric: 30

有多个DNS服务器时如何指定DNS

对于多网卡的设备,每个网卡都可以配置DNS服务器,如果用了DHCP,DNS也会向DHCP服务器请求DNS,当DNS服务器有冲突,需要手工指定认可的DNS,这通常可以这么做:

查看本段内容需要支付 15 金币

您尚未登录,请 点击登录 或者 立即注册


ECCEE版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Ubuntu下DNS查询调试
喜欢 (1)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址