win10上 ubuntu虚机dns解析问题(Temporary failure in name resolution”)

问题描述:
在WIN10宿主机上安装了一个ubuntu 虚拟机,ubuntu_64_server_01 4.15.0-46-generic版本。虚拟机的网卡配置如下,
在这里插入图片描述

win10宿主机连接WIFI,

IP:169.144.148.104
netmask 255.255.0.0
gateway :169.144.148.1
dns:193.181.14.10.

Ubuntu运行起来后网卡是没有IP的,配置IP与路由表后:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
这个时候是可以连通外网的。
在这里插入图片描述
但是当你通过域名访问或需要通过apt的依赖去安装一个包时,会出现 “Temporary failure in name
resolution”的提示,
在这里插入图片描述
到达这一步,都知道域名解析失败导致。于是按网上很多方去添加dns地址

1、 在/etc/resolv.conf 中添加

ls - /etc/resolv.conf时可以看到该文件是个链接文件,所以直接改源文件就可以了。CSDN上各位大神都强调该文件是临时文件,重启后会被覆盖,也就是不能永久生效。但为了临时解决问题,先修改了验证下,在添加完nameserver后,需要通过/etc/init.d/networking restart 指令重启网卡,才发现我的ubuntu该路径下没有这个networking的脚本路径。

利用apt工具找下networking 的依赖关系,得到的结果是这样的
在这里插入图片描述

至此终于发现该虚拟机的与众不同。然后去网上搜如何安装Networking服务,systemd-networkd包含了Networking的功能
在这里插入图片描述

由于不能确认虚拟机的/etc/resolv.conf的 nameserver是否真会生效,此方法先搁置。

2、永久生效的DNS服务器配置方法

修改/etc/network/interfaces,在网卡配置的后面添加 dns-nameservers ,如下
在这里插入图片描述
该方法试了,重启虚拟机后dns-nameservers并没有更新到/etc/resolv.conf中,另外ns33网卡没按interfaces配置成功,还是空的,可能脚本格式有错,后面再排查。

3、 尝试另一种永久生效的方法

需要在/etc/resolvconf/resolv.conf.d目录下新建个base文件,然后在文件中写入nameserver +dns 地址。然后发现我的虚拟机在/etc/目录下没有resolvconf这个文件夹。但如果输入resolvconf指令的话ubuntu提示使用apt install。既然apt install时 dns解析失败拿不到包,那就手动安装。

从下面的url拿到deb安装包在这里插入图片描述
所幸该虚拟机安装了vsftpd服务器,以binary格式传进去后 dpkg -i xxx.deb就可以安装成功了。结果呢,还是没解析成功。

从方法1中的systemd-networkd就是networking的关系,大概知道systemd-resolvd就是resolvconf(实际上安装完resolvconf后,resolvconf也是链接到/run/system/systemd-resolvd),于是在/etc/systemd目录下一顿乱找,找到了一个resolved.conf文件,喜出望外,打开是这样的
在这里插入图片描述
当时脑袋被门夹了,把DNS 改为196.144.148.1(宿主机的网关),Domains =lan前去掉注释。当然结果还是没有意外,失败。

于是决定用回方法3,在/etc/resolvconf/resolv.conf.d目录下新建个tail文件,前提是我得有个/etc/resolvconf目录,前面也查到了resolvconf的安装包地址,那就到这个地址中取出deb安装包,手动安装

由于到这一步我直觉告诉我不是设置dns服务器的方法问题了,而是要确认dns解析服务有没在工作,由于对Linux进程管理,判断工作状态的指令不熟悉,那要确认dns解析器有没工作最好的方法是看有没发出解析包。

在网口处抓包,发现ubuntu出去的dns包是这样的
在这里插入图片描述
发现宿主机DNS的包是这样的,
在这里插入图片描述这个现象结果整合分析:

1、ubuntu是启动了解析服务的,而且目的IP是196.144.148.1,虽然结解析失败,但也说明某处dns服务器IP配置成功了;而宿主机目的IP是 193.181.14.10,解析成功,是 不是把ubuntu的dns服务器IP改为 193.181.14.10就可以成功?
2、ubuntu的dns包域名后面加了“.lan”,宿主机出没有;

由上面的两点联想到在/etc/system/resolve.conf中正好配置了dns server = 196.144.148.1;Domain =lan。

于是修改了/etc/system/resolve.conf文件后成功了。

问题反刍,这个问题应该是我的虚拟机缺少了某个组件或者配置,安装resolvconf的时候已经修正了,这个时候按方法1也是可以的解析出来的。/etc/resolv.conf中的DNS是优先级最高的,如果/etc/resolv.conf中没有可用DNS,则检测/etc/system/resolve.conf。

发布了9 篇原创文章 · 获赞 9 · 访问量 6615

猜你喜欢

转载自blog.csdn.net/ZuoFengYeCao/article/details/89028722