问题描述
一个ubuntu20.04系统的NUC连着一个有线网和WIFI,WIFI是有网络的,有线网只是一个局域网用于另外一个机器进行no machine远程控制的,之前的时候NUC可以正常使用有线网控制,使用WIFI上网,但是现在突然只能使用有线网控制了,WIFI也连接着但是上不了网了,应该如何排查
问题解决
好的,这个问题非常典型,通常出现在一个多宿主(multi-homed)系统上,即一个设备连接到多个网络。核心问题在于路由和DNS的优先级。
系统必须决定当访问互联网时,应该通过哪个网络接口(有线网卡还是无线网卡)发送数据。当两个网络都连接时,系统可能会错误地将没有互联网访问的那个网络(你的有线网)设置为“默认路由”,导致所有发往互联网的流量都走错了路。
下面我们按照一个清晰的排查思路来解决这个问题。
第1步:诊断问题(信息收集)
在做任何修改之前,我们先确认一下当前的系统状态,这会帮助我们精确地定位问题。请在NUC的终端里执行以下命令,并观察输出。
1.1 查看路由表
这是最关键的一步。路由表告诉系统数据包应该往哪里走。
ip route show
或者使用旧命令:
route -n
你应该会看到类似这样的输出:
default via 192.168.10.1 dev enp3s0 proto dhcp metric 100
default via 192.168.1.1 dev wlp2s0 proto dhcp metric 600
192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.123 metric 600
192.168.10.0/24 dev enp3s0 proto kernel scope link src 192.168.10.50 metric 100
分析:
default via ...
这一行就是默认路由。它定义了所有非本地流量的出口。dev enp3s0
通常代表有线网卡(enp...
或eth...
)。dev wlp2s0
通常代表无线网卡(wlp...
或wlan...
)。metric
值越小,优先级越高。
你的问题很可能是:
default via ...
这一行指向了你的有线网卡(例如 dev enp3s0
),并且它的 metric
值比WIFI的 metric
值要小。因为有线网不通外网,所以你就上不了网了。
1.2 查看网络接口信息
ip addr show
这个命令会列出所有网络接口及其IP地址。请确认你的有线网卡和无线网卡都获取到了正确的IP地址。
1.3 测试网络连通性
# 1. Ping一个公共IP地址,这可以绕过DNS问题,直接测试路由
ping -c 4 8.8.8.8
# 2. 如果上一步不通,尝试指定从WIFI网卡ping
# 首先找到你的WIFI网卡名字,比如叫 wlp2s0
ping -I wlp2s0 -c 4 8.8.8.8
# 3. 如果第一步通了,再Ping一个域名,测试DNS
ping -c 4 baidu.com
- 如果
ping 8.8.8.8
不通,但ping -I wlp2s0 8.8.8.8
能通,那100%是默认路由的问题。 - 如果
ping 8.8.8.8
能通,但ping baidu.com
不通,那可能是DNS被有线网络覆盖了。
1.4 查看DNS配置
cat /etc/resolv.conf
查看 nameserver
指向的是哪个IP。如果它指向了你有线局域网的网关或DNS服务器,那么DNS解析也会失败。
第2步:解决问题(修改配置)
根据诊断结果,最可能的原因是有线网络的路由优先级过高。我们需要告诉系统:“这个有线网络连接只用于访问它所在的局域网,不要用它作为上网的出口。”
这是最推荐、最彻底的解决方法,可以通过图形界面或命令行完成。
方法一:通过图形界面(推荐,最简单)
点击屏幕右上角的网络图标,选择 “有线设置” (Wired Settings) 或 “网络设置” (Network Settings)。
在弹出的窗口中,找到你的有线连接(通常叫 “Wired” 或 “有线连接 1”),点击它旁边的齿轮图标进行编辑。
在编辑窗口中,切换到 “IPv4” 标签页。
点击下方的 “路由” (Routes…) 按钮。
在弹出的路由设置窗口中,勾选 “仅用于此网络上的资源” (Use this connection only for resources on its network) 这个选项。
点击“确定”(OK),然后点击“应用”(Apply)。
为了让设置生效,可以断开有线连接再重新连接,或者直接在右上角网络图标里把有线网关掉再打开。
这个设置的作用是: 它会为这个有线连接创建一条指向其局域网的路由,但不会为它创建默认路由。这样,系统的默认路由就会自动地、唯一地指向你的WIFI连接。
方法二:通过命令行(nmcli
,更专业)
如果你更喜欢命令行,可以使用 nmcli
工具。
首先,列出你所有的网络连接,找到有线连接的名字。
nmcli connection show
你会看到类似列表,比如
NAME
列下有 “Wired connection 1”。修改这个连接的配置,告诉它永远不要成为默认路由。
# 把 "Wired connection 1" 替换成你自己的有线连接名称 sudo nmcli connection modify "Wired connection 1" ipv4.never-default yes sudo nmcli connection modify "Wired connection 1" ipv6.never-default yes
重新激活连接以使设置生效。
# 同样,替换成你的连接名称 sudo nmcli connection down "Wired connection 1" sudo nmcli connection up "Wired connection 1"
第3步:验证修复
在完成上述修改后,再次进行第1步的诊断操作。
再次查看路由表:
ip route show
现在你应该看到
default via ...
这一行只剩下WIFI网卡的那一条了。有线网卡的路由应该只剩下一条指向其本地子网的(例如192.168.10.0/24 dev enp3s0 ...
)。再次测试网络:
ping 8.8.8.8 ping baidu.com
现在应该都能通了。
同时测试NoMachine:
在另一台机器上尝试通过NoMachine连接NUC,由于有线局域网的路由依然存在,这个连接应该也完全不受影响。
总结
这个问题的本质是路由冲突。当Ubuntu的NetworkManager检测到两个活动的连接时,它会根据一定的规则(如metric值,通常有线连接的metric更低/优先级更高)来设置默认路由。通过明确告诉系统哪个连接不应该作为默认路由,我们就能完美解决这个冲突,实现“有线上局域网,WIFI上互联网”的目标。
如果以上步骤操作后仍有问题,请将第1步中几个诊断命令的输出结果贴出来,以便进一步分析。
在 Ubuntu 20.04 上,当有线网络和 WiFi 同时连接但 WiFi 无法上网时,可能是 路由优先级、网络配置冲突 或 DNS 问题 导致的。以下是详细的排查步骤:
1. 检查当前网络接口和路由
查看网络接口状态
ip a
确认:
eth0
(有线网)和wlan0
(WiFi)是否都正常获取 IP 地址。- WiFi 是否连接到正确的 SSID。
查看路由表
ip route show
或
route -n
重点关注:
- 默认网关(
0.0.0.0
或default
) 是否指向 WiFi 的网关(通常是wlan0
的 IP)。 - 如果默认网关指向有线网(
eth0
),则 WiFi 流量会被错误路由。
示例(正常情况)
default via 192.168.1.1 dev wlan0 # WiFi 网关
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.2 # 有线局域网
如果默认网关是 eth0
的 IP(如 192.168.100.1
),则需要调整。
2. 调整网络优先级(让 WiFi 优先)
Ubuntu 默认使用 连接优先级(metric) 决定默认路由。
方法 1:修改 Netplan 配置(推荐)
- 编辑 Netplan 配置文件:
sudo nano /etc/netplan/01-network-manager-all.yaml
- 确保 WiFi 的
metric
低于有线网(数值越小优先级越高):network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: true dhcp4-overrides: route-metric: 200 # 有线网优先级较低 wifis: wlan0: dhcp4: true dhcp4-overrides: route-metric: 100 # WiFi 优先级较高 access-points: "你的WiFi名称": password: "你的WiFi密码"
- 应用更改:
sudo netplan apply
方法 2:手动删除有线网关(临时方案)
如果不想修改 Netplan,可以临时删除有线网的默认路由:
sudo ip route del default via <有线网关IP> dev eth0
(重启后会恢复)
3. 检查 DNS 配置
如果 WiFi 能 ping 通外网 IP(如 8.8.8.8
)但无法访问域名,可能是 DNS 问题。
检查当前 DNS
systemd-resolve --status
或
cat /etc/resolv.conf
手动设置 DNS
sudo nano /etc/resolv.conf
添加:
nameserver 8.8.8.8
nameserver 1.1.1.1
(注意:如果使用 NetworkManager
,可能需要通过 nmcli
修改 DNS)
4. 禁用 IPv6(可选)
某些网络环境下 IPv6 可能导致问题,可以临时禁用:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
(永久生效需修改 /etc/sysctl.conf
)
5. 检查 NoMachine 配置
确保 NoMachine 绑定到有线网 IP(如 192.168.100.2
),而不是 0.0.0.0
,避免占用所有网络接口。
6. 其他排查
- 重启网络服务:
sudo systemctl restart NetworkManager
- 测试 WiFi 单独工作:
拔掉有线网,确认 WiFi 能否正常上网。 - 检查防火墙:
sudo ufw status # 确认是否阻止了 WiFi 流量
总结
- 路由问题(最常见):确保默认网关是 WiFi 的网关。
- DNS 问题:检查是否能解析域名。
- 优先级配置:通过 Netplan 或
route-metric
调整。 - NoMachine 干扰:确认其仅绑定到有线局域网 IP。
如果仍有问题,请提供以下信息:
ip a
输出ip route show
输出ping 8.8.8.8
和ping google.com
结果