ubuntu 多网络路由优先级问题

问题描述

一个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 结果
### 设置或修改 Ubuntu 18 中网卡的优先级Ubuntu 18 中设置网卡优先级可以通过调整网络接口的 metric 值来实现。Metric 值决定了路由的选择顺序,较低的数值表示较高的优先级。 #### 方法一:通过 Netplan 配置文件永久更改 Netplan 是用于管理网络配置的新工具,在较新的 Ubuntu 版本中广泛采用。编辑 `/etc/netplan/` 下对应的 YAML 文件可以完成此操作: ```yaml network: version: 2 ethernets: ens33: dhcp4: true routes: - to: default via: 192.168.1.1 metric: 100 ens37: dhcp4: true routes: - to: default via: 192.168.2.1 metric: 50 ``` 上述配置使得 `ens37` 的优先级高于 `ens33`[^4]。 保存并应用新配置: ```bash sudo netplan apply ``` #### 方法二:命令行临时修改 对于即时生效而不影响长期配置的情况,可以直接使用 iproute2 工具集中的命令来进行调整: 查看当前默认路由及其度量值: ```bash ip route show default ``` 移除现有默认路由(假设目标是删除所有默认路由): ```bash sudo ip route del default ``` 添加具有不同 metric 值的新默认路由: ```bash sudo ip route add default via 192.168.2.1 dev ens37 metric 50 sudo ip route add default via 192.168.1.1 dev ens33 metric 100 ``` 这将立即改变两个设备之间的相对优先级[^3]。 #### 方法三:图形界面 NetworkManager 调整 当使用 GNOME 或其他桌面环境时,也可以借助 GUI 来简化这一过程。打开“设置” -> “网络”,选择要调整的连接,点击齿轮图标进入属性页面,在 IPv4 设置标签页下找到“路由”部分,勾选“仅对此连接使用该网关”,然后手动输入较小的 Metric 数字以提高其优先级[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值