ubuntu 多网络路由优先级问题

发布于:2025-07-27 ⋅ 阅读:(22) ⋅ 点赞:(0)

问题描述

一个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步:解决问题(修改配置)

根据诊断结果,最可能的原因是有线网络的路由优先级过高。我们需要告诉系统:“这个有线网络连接只用于访问它所在的局域网,不要用它作为上网的出口。”

这是最推荐、最彻底的解决方法,可以通过图形界面或命令行完成。

方法一:通过图形界面(推荐,最简单)
  1. 点击屏幕右上角的网络图标,选择 “有线设置” (Wired Settings) 或 “网络设置” (Network Settings)。

  2. 在弹出的窗口中,找到你的有线连接(通常叫 “Wired” 或 “有线连接 1”),点击它旁边的齿轮图标进行编辑。

  3. 在编辑窗口中,切换到 “IPv4” 标签页。

  4. 点击下方的 “路由” (Routes…) 按钮。

  5. 在弹出的路由设置窗口中,勾选 “仅用于此网络上的资源” (Use this connection only for resources on its network) 这个选项。

  6. 点击“确定”(OK),然后点击“应用”(Apply)。

  7. 为了让设置生效,可以断开有线连接再重新连接,或者直接在右上角网络图标里把有线网关掉再打开。

这个设置的作用是: 它会为这个有线连接创建一条指向其局域网的路由,但不会为它创建默认路由。这样,系统的默认路由就会自动地、唯一地指向你的WIFI连接。

方法二:通过命令行(nmcli,更专业)

如果你更喜欢命令行,可以使用 nmcli 工具。

  1. 首先,列出你所有的网络连接,找到有线连接的名字。

    nmcli connection show
    

    你会看到类似列表,比如 NAME 列下有 “Wired connection 1”。

  2. 修改这个连接的配置,告诉它永远不要成为默认路由。

    # 把 "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
    
  3. 重新激活连接以使设置生效。

    # 同样,替换成你的连接名称
    sudo nmcli connection down "Wired connection 1"
    sudo nmcli connection up "Wired connection 1"
    

第3步:验证修复

在完成上述修改后,再次进行第1步的诊断操作。

  1. 再次查看路由表:

    ip route show
    

    现在你应该看到 default via ... 这一行只剩下WIFI网卡的那一条了。有线网卡的路由应该只剩下一条指向其本地子网的(例如 192.168.10.0/24 dev enp3s0 ...)。

  2. 再次测试网络:

    ping 8.8.8.8
    ping baidu.com
    

    现在应该都能通了。

  3. 同时测试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.0default 是否指向 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 配置(推荐)
  1. 编辑 Netplan 配置文件:
    sudo nano /etc/netplan/01-network-manager-all.yaml
    
  2. 确保 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密码"
    
  3. 应用更改:
    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 流量
    

总结

  1. 路由问题(最常见):确保默认网关是 WiFi 的网关。
  2. DNS 问题:检查是否能解析域名。
  3. 优先级配置:通过 Netplan 或 route-metric 调整。
  4. NoMachine 干扰:确认其仅绑定到有线局域网 IP。

如果仍有问题,请提供以下信息:

  • ip a 输出
  • ip route show 输出
  • ping 8.8.8.8ping google.com 结果

网站公告

今日签到

点亮在社区的每一天
去签到