[Ubuntu] VirtualBox 中的虚拟机突然无法访问Internet


在这里插入图片描述

一、前言

原先部署的一台虚拟机,今天在安装应用时发现突然上不了网了。无奈之下使用ping命令测试了一下:

ping baidu.com

结果如下:

ping: baidu.com: Temporary failure in name resolution

第一反应就是:域名解析出问题了


二、环境说明

  • 宿主机的ip:192.168.43.110
  • 虚拟机的ip:192.168.43.9
  • 宿主机系统:win10
  • 虚拟机系统:Ubuntu 18.04
  • 虚拟机管理软件:ViurtualBox
  • 虚拟机网络连接方式:桥接

三、原因分析

为了进一步定位问题的原因,需要确认如下两个问题:

  • 宿主机和虚拟机是否连通
  • 宿主机能否访问Internet

3.1 确认宿主机和虚拟机是否连通

虚拟机 ping 宿主机(VM -> Host)

ping 192.168.43.110

结果如下:
vm->host
 
 
宿主机 ping 虚拟机(Host -> VM)

ping 192.168.43.9

结果如下:
host->vm

从上述两幅图的丢包率都为0%,可以看出 宿主机和虚拟机之间是通的

3.2 确认宿主机是否可上网

在宿主机ping下百度:

ping baidu.com

结果如下:
在这里插入图片描述
如图所示,宿主机是可以访问Internet的。

因为宿主机可以访问Internet,并且宿主机和虚拟机是连通的,所以有理由相信:问题出在虚拟机一侧

3.3 查看虚拟机的DNS记录

一开始就怀疑是虚拟机的DNS出现问题导致其无法访问Internet,那么就需要检查一下DNS是否设置正确。

那么如何查看Ubuntu的DNS记录呢?
可以通过如下方法:

  • nslookup ${host}
  • host ${host}

这里使用nslookup命令:

#shell cmd
nslookup baidu.com

执行结果如下:nslookup
报错信息文本:

;; connection timed out; no servers could be reached

错误信息表明:DNS server不可达

出于好奇,我们可以看一下宿主机的执行结果:
xx
这里可以看到宿主机上的 DNS server 是 192.168.10.1

那是否我们将虚拟机的 DNS server 也改为这个就可以了呢
答案是不可以的。因为网段不同(DNS的网段的10.*, 而虚拟机的网段是43.*),无法访问。

即使网段相同,也不推荐这么做。原因如下:

因为我们是使用的虚拟机安装的Linux。宿主机的网络环境是不固定的,比如我在公司的时候,宿主机的网段是192.168.1.*,但是当我回到家时,宿主机网段就会变为 192.168.10.*。
 
这样就会导致:在不同网络环境时,我们需要不断调整 DNS server 的配置。
 
有的小伙伴可能会说可以把这两个网段的 DNS server 都配置上啊。但是这样的解决方案终究是不优雅的。因为不排除宿主机又会进入新的网络环境(比如出差)

3.4 查看虚拟机的DNS设置

可以使用如下命令查看DNS设置

systemd-resolve --status

结果如下:

Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      # 省略18~30
                      ...
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 2 (enp0s3)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.43.1

我们可以看到DNS server是192.168.43.1。
而这个值恰好是网络配置(位于 /etc/netplan/00-installer-config.yaml )中的值:
网络配置
事实上,通过ping命令可以发现:43.1这个地址是不通的。所以这里需要进行调整

3.5 是否可以直接访问外网ip

在确定是DNS问题前,还需要检查下虚拟机是否可以直接访问外网ip。

如果能够访问外网ip,但是访问不了域名,才能够确定是 DNS 的问题。否则连外网ip都访问不了,则极有可能是网络设置的问题。

ping外网ip的结果如下:
在这里插入图片描述
丢包率是100% => 网络配置是有问题的,因为如果是单纯的DNS问题,外网ip是能ping通的。

 
 

四、问题解决

通过前面的分析,已经定位问题的原因如下:

  • DNS的设置不正确。
  • 网络配置不正确(虚拟机不能访问外网)

 

4.1 修改虚拟机DNS的设置

/etc/resolv.conf 是 systemd-resolve 的配置文件,通过下面的命令可以查询DNS server 的配置:

cat /etc/resolv.conf

内容如下:
xxxxx
但是如果需要修改DNS server,不能直接在该文件上操作。 因为有许多小伙伴反映:修改后数据会被覆盖为 127.0.0.53

而关于127.0.0.53 是什么,可以看下该网友的文章:

关于DNS服务器127.0.0.53的理解

修改DNS server(编辑**/etc/systemd/resolved.conf**文件):

# 编辑模式(DNS=223.5.5.5 180.76.76.76)
vi /etc/systemd/resolved.conf
# 重启服务
systemctl restart systemd-resolved
# 随机启动
systemctl enable systemd-resolved
# 备份/etc/resolv.conf.bak
mv /etc/resolv.conf /etc/resolv.conf.bak
ln -s /run/systemd/resolve/resolv.conf /etc/

但是配置完成后,还是ping不通baidu.com。

DNS的解析效果如下:
在这里插入图片描述

 
 

4.2 修改网络配置

网络配置的修改不单单是虚拟机侧,同时宿主机的网络配置也需要进行调整。
 
4.2.1 调整虚拟机的网络配置

# 编辑模式( nameservers.addresses 改为 223.5.5.5)
# 网关改为 桥接网卡的ip
vi /etc/netplan/00-installer-config.yaml
# 使修改生效
netplan apply

主要调整了两部分:

  • 网关:改为桥接网卡的ip
  • DNS server: 改为阿里的DNS地址

修改后的网络配置为:
在这里插入图片描述
 
4.2.2 调整宿主机的网络配置

到目前为止,网络情况如下:

  • 虚拟机和宿主机之间的网络 -> ok
  • 宿主机可访问Internet -> ok
  • 虚拟机ping外网ip -> no
  • 虚拟机ping外网域名 -> no

下图是宿主机的网卡情况:
在这里插入图片描述

  • WLAN 是无线网卡,可以访问Internet
  • 以太网7 是桥接网卡(环回适配器)

桥接网卡如果想上网,需要无线网卡对其共享 Internet 连接

在这里插入图片描述
操作如下:

  • 勾选:允许其他网络用户通过此计算机的 Internet 连接来连接
  • 家庭网络连接:选择 桥接网卡
  • 保存设置

保存时会提示:
在这里插入图片描述
确认后桥接网卡的ip地址被修改为:192.168.137.1

可以通过win+r,输入:ncpa.cpl ,快速打开网络连接
然后将 桥接网卡 的ip地址改回:192.168.43.110
在这里插入图片描述

 
 

4.3 验证虚拟机网络

 
4.3.1 ping外网ip

# 谷歌的DNS
ping 8.8.8.8
# 阿里的DNS
ping 223.5.5.5

结果如下:
在这里插入图片描述

 
4.3.2 ping外网域名

尝试ping一下百度的网址:

root@proxy_server_01:~# ping baidu.com
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=51 time=30.1 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=51 time=82.7 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=51 time=30.6 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=4 ttl=51 time=30.0 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=5 ttl=51 time=38.5 ms
^C
--- baidu.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 30.097/42.421/82.727/20.404 ms

从统计信息可知:能够ping通该网站。至此虚拟机无法访问 Internet 的问题已经解决。

 
4.3.3 解析外网域名的ip

为了验证DNS 是否可以正确解析,可以在终端中执行如下命令:

nslookup baidu.com

在这里插入图片描述
首先,不再报连接超时的错误了。并且返回了如下信息:

  1. 域名服务器的地址:223.5.5.5
  2. 域名以及对应的ip地址:这里有两个(ping命令时随机返回当中一个)

如果结合前面在宿主机的执行结果,我们可以发现:两者返回的数据有一些差异(主要是 Server 和 Address)

 
也可以通过host命令看下解析结果:
在这里插入图片描述

 

五、疑问和总结

5.1 遇到的问题

5.1.1 Nameserver和DNS server是一个东西吗?

答:Nameserver是负责实现 DNS 这套系统的服务器, 有时候也叫做 DNS server, 这也是为什么许多人会将 nameserver 同 DNS 搞混起来的原因.

5.1.2 DNS的优先级是什么?

优先级:缓存>hosts>dns

5.1.3 Linux如何查看hosts文件?

终端执行如下命令:

cat /etc/hosts
# or
vi /etc/hosts
5.1.4 如何查看和修改DNS server?

答:
(1)查看DNS server:

# 查看 DNS server
systemd-resolve --status

(2)修改DNS server:

# 修改 DNS server
vi /etc/systemd/resolved.conf 
5.1.5 如何修改网络配置?

过去的Ubuntu版本,终端执行命令:

vi /etc/network/interfaces

Ubuntu18中该文件开头有如下信息:

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown

也就是说在Ubuntu18.04中,/etc/network/interfaces 中的配置已经被netplan取代了。其配置目录为:/etc/netplan 。
我的配置文件的名称为:/etc/netplan/00-installer-config.yaml

所以在Ubuntu18.04中若要修改网络配置,则需修改/etc/netplan/00-installer-config.yaml中的内容:
在这里插入图片描述

 

5.1.6 常见DNS server 有哪些?
名称DNS server
谷歌DNS8.8.8.8
阿里DNS223.5.5.5、223.6.6.6
百度DNS180.76.76.76
腾讯DNS119.29.29.29、182.254.116.116

 

5.2 总结

 
  本文针对虚拟机无法访问 Internet 的问题,进行了虚拟机和宿主机之间的连通性分析,确认了宿主机可以访问Internet,并且虚拟机和宿主机的互通的。唯一异常的现象是:虚拟机无法ping通外网ip。
 
  结合前面的分析结果,怀疑宿主机的网络配置有问题。通过一番检查后发现最主要的原因是宿主机的桥接网卡没有访问外网的能力,而解决方法就是通过无线网卡(或当前上网的网卡)分享其Internet连接。文章介绍了具体的配置步骤,并额外拓展了一些网络知识。

下图是本篇文章相关的思维导图:
在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在VirtualBox虚拟机上安装Ubuntu,请按照以下步骤进行操作: 1. 首先,确保您已经安装了VirtualBox软件。如果尚未安装,请前往VirtualBox官方网站下载并安装适用于您的操作系统的版本。 2. 下载Ubuntu的ISO映像文件。您可以在Ubuntu官方网站上找到最新版本的Ubuntu,并选择与您计算机架构相对应的版本。 3. 打开VirtualBox软件,并点击"新建"按钮来创建一个新的虚拟机。 4. 在弹出的新建虚拟机向导,输入一个适当的名称和操作系统类型(选择Linux),然后点击"下一步"。 5. 为虚拟机分配内存大小。根据您系统的配置和需求,选择适当的内存大小,然后点击"下一步"。 6. 创建虚拟硬盘。选择"现在创建虚拟硬盘"选项,并点击"创建"。 7. 选择虚拟硬盘文件类型。通常情况下,您可以选择默认的VDI(VirtualBox Disk Image)格式,然后点击"下一步"。 8. 选择虚拟硬盘存储方式。您可以选择"Dynamically allocated"(动态分配)或"Fixed size"(固定大小),然后点击"下一步"。 9. 为虚拟硬盘分配空间大小。根据您对Ubuntu的需求,选择适当的大小,然后点击"创建"。 10. 创建虚拟机完成后,选它,并点击"设置"按钮。 11. 在设置窗口,点击"存储"选项卡,然后在控制器下的"属性"选择Ubuntu的ISO映像文件。 12. 点击"网络"选项卡,然后确保网络适配器设置为默认的NAT模式。 13. 点击"确定"保存设置。 14. 启动虚拟机,并按照Ubuntu安装向导的指示进行安装。 15. 完成安装后,重启虚拟机,并您现在应该能够进入Ubuntu操作系统了。 希望这些步骤对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值