目录- 一、前言
- 二、排查接口
- 三、排查问题
- 1.检查 VMware 的虚拟网络编辑器和服务
- 2.检查 Ubuntu 内部的网络配置
- 四、修复 DNS
- 1. 测试网络连通性
- 2)强制将 DNS 服务器切换为 Google 公共 DNS
- 3)清空 DNS 域名后缀
- 4)配置 systemd-resolved 持久化
- 5) 终极方案
- Ubuntu永久配置DNS的教程
- 找到 Netplan 配置文件:
- 编辑配置文件:
- 应用配置:
- 验证网络设置
- 如果使用 DHCP
一、前言
作者是刚学习操作系统的小白,安装Ubuntu 20.04.3和VMware、且虚拟机搭好之后
发现自己是有线状态(右上角形如“品”的图标)但是不能上网
校园网和个人热点都不行
寻求各种文章方案都以失败而终
最后在人工智能的帮助下解决了问题
本文提供一个思路,希望能帮助各位
图1 安装好的Ubuntu界面
图2 搜狐浏览器搜百度失败
图3 有线成功连接状态
二、排查接口
既然是有线状态,那么网络是互通的,我们来确认一下
图4 总览
1)在控制面版-网络和Internet-网络连接,右键WLAN点击属性
图5 打开WLAN属性
勾选两个选项
图6 WLAN属性
2)查看虚拟网络,点击编辑-虚拟网络编辑器
图7 虚拟网络编辑器打开操作
可以看到只有V1和V8是连接的,且被选中且子网IP不是 0.0.0.0
图8 虚拟网络编辑器界面
也对应了网络连接界面的V1和V8
图9 网络连接界面
3)VMware网络连接
点击虚拟机-设置-网络适配器可以选择网络模式,根据前文,只能选NAT模式和主机模式,这里我们选择NET模式
图10 虚拟机设置界面
确保接口设置没问题,接下来开始排查问题!
三、排查问题
1.检查 VMware 的虚拟网络编辑器和服务
VMware 的 NAT 和 DHCP 服务可能没有正常运行。
重启 VMware 的相关服务(在Windows 主机上操作)
按 Win + R 键,输入 services.msc 并回车,打开“服务”窗口。
找到所有以 VMware 开头的服务。
重点重启以下两个服务,选择“重新启动”
VMware NAT Service
VMware DHCP Service
图11 服务界面
2.检查 Ubuntu 内部的网络配置
桌面右键,点击“在终端中打开”
图12 打开终端操作
在终端输入
找到你的主网卡(通常是 ens33 或 eth0)。
查看它是否有一个 inet 地址,格式通常是 192.168.x.x 或 172.16.x.x。
如果只有 inet6(IPv6)地址或者根本没有 inet 地址,
说明它没有从 VMware 的DHCP服务器成功获取IP。
我们可以看到Ubuntu虚拟机已经成功获取到了IP地址 192.168.40.128/24
并且网卡ens33的状态是UP,这说明网络连接在虚拟机内部是正常的
图13 终端界面
既然网络接口和IP地址都正常,那么问题几乎可以肯定是出在 DNS 解析 上
虚拟机可以连接到网关和网络,但无法将域名(如 www.google.com)翻译成IP地址
四、修复 DNS
1. 测试网络连通性
首先,我们 ping 一个公网 IP 地址,来确认网络通道确实是通的。发现一直在发送
图14 ping公网IP
再ping一下百度,回复ping www.baidu.com出现暂时性错误
图15 ping域名
能够ping通IP地址(8.8.8.8),但无法解析域名,确实是DNS问题
2)强制将 DNS 服务器切换为 Google 公共 DNS
eth33是图13显示的网卡名
sudo resolvectl dns eth33 8.8.8.8 8.8.4.4
会输出localomain,再ping一下百度,还是不行
pluton@pluton:$ resolvectl status | grep -A 5
DNS ServersDNs Servers: 8.8.8.8 8.8.4.4
DNS Domain: localdomain
pluton@pluton:$ ping -c 4 www.baidu.com
ping:www.baidu.com:域名解析出现暂时性错误
DNS Domain: localdomain 导致域名解析失败。
说明系统会自动在域名后添加 .localdomain
导致实际解析 www.baidu.com.localdomain(不存在的域名),而非 www.baidu.com
3)清空 DNS 域名后缀
使得去除后缀,直接解析原始域名
sudo resolvectl domain ens33 ~.
检验
resolvectl status | grep -A 5 "DNS Servers"
输出
DNS Servers: 8.8.8.8 8.8.4.4
DNS Domain: ~.
再ping一下域名还是不行
4)配置 systemd-resolved 持久化
输入
sudo nano /etc/systemd/resolved.conf
在resolve修改,记得去掉#号,非常重要
[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.
然后Ctrl+O,按Enter去保存!!!Ctrl+X退出
此时文件已永久写入 /etc/systemd/resolved.conf
接着必须重启systemd-resolved服务
sudo systemctl restart systemd-resolved
然后检验
sudo systemctl restart systemd-resolved
再验证,必须看到 8.8.8.8
cat /run/systemd/resolve/resolv.conf | grep "nameserver"
最后ping百度
如果还是不行,/etc/systemd/resolved.conf 配置未生效
原因可能是 NetworkManager 覆盖了 DNS 设置
5) 终极方案
首先确认:cat /run/systemd/resolve/resolv.conf | grep "nameserver"
若输出 192.168.137.2说明问题存在
# 1. 删除旧配置(避免冲突)
sudo rm -f /etc/systemd/resolved.conf
# 2. 重建正确配置(直接复制执行)
echo -e "[Resolve]\nDNS=8.8.8.8 8.8.4.4\nDomains=~." | sudo tee /etc/systemd/resolved.conf
# 3. 禁用 NetworkManager 的 DNS 管理
echo -e "[main]\ndns=none" | sudo tee /etc/NetworkManager/NetworkManager.conf
然后再重启验证,记得分条复制
sudo systemctl restart systemd-resolved NetworkManager
sudo rm -f /etc/resolv.conf && sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
ping -c 4 www.baidu.com
Ubuntu 将永久使用 Google DNS(8.8.8.8),不再依赖路由器 DNS
图16 ping通了
图17 胜利结算画面
Ubuntu永久配置DNS的教程
找到 Netplan 配置文件:
ls /etc/netplan/
# 通常文件名类似 00-installer-config.yaml 或 50-cloud-init.yaml
编辑配置文件:
sudo nano /etc/netplan/50-cloud-init.yaml
添加 DNS 配置:
network:
version: 2
renderer: networkd
ethernets:
ens3: # 使用您的网卡名称(使用 ip a 命令查看)
dhcp4: no
addresses: [192.168.1.100/24] # 替换为你的静态 IP
routes:
- to: default
via: 192.168.1.1 # 替换为你的网关
nameservers:
addresses: [223.5.5.5, 223.6.6.6, 8.8.8.8]
search: [localdomain] # 可选搜索域
应用配置:
验证网络设置
# 检查默认路由
ip route show default
# 检查 DNS 设置
systemd-resolve --status
# 测试 DNS 解析
nslookup hub-mirror.c.163.com
nslookup registry-1.docker.io
如果使用 DHCP
如果你使用的是 DHCP 获取 IP 地址,只需设置 DNS:
network:
version: 2
renderer: networkd
ethernets:
ens3: # 您的网卡名称
dhcp4: yes
nameservers:
addresses: [223.5.5.5, 223.6.6.6, 8.8.8.8]
以上就是【Linux】Ubuntu有线但不能上网怎么办?DNS解析失败终极解决方案:从 ping域名失败到通网的详细内容,更多相关资料请阅读琼殿技术社区其它文章! |