公司动态
双网卡路由配置实践(内网走有线、外网走 WiFi)
银河麒麟系统双网卡路由配置实战内网走有线、外网走 WiFi摘要办公电脑同时连接内网有线和外网 WiFi 时如果两个网卡都配了默认网关会导致路由冲突、网络异常。本文以银河麒麟桌面操作系统 V10 SP1 为例详细介绍如何通过配置静态路由实现内网网段走有线、其余走 WiFi的双网卡分流方案涵盖路由表解析、最长前缀匹配原理、DNS 策略、完整配置命令及常见问题排查。文章目录银河麒麟系统双网卡路由配置实战内网走有线、外网走 WiFi[toc]一、需求背景二、环境概览网卡 IP 地址一览三、网络拓扑图四、配置详解4.1 思路分析4.2 有线网络配置enp1s04.3 WiFi 无线网络配置wlp2s04.4 为什么不设两个默认网关五、路由表解析路由匹配逻辑六、DNS 配置策略6.1 配置方案6.2 为什么忽略 WiFi 的 DNS七、数据包流转路径图场景一访问内网服务器 (10.0.0.100)场景二访问外网 (www.baidu.com)八、配置方法8.1 通过 nmcli 命令行配置8.2 通过图形界面配置8.3 通过 ip route 命令临时添加九、验证方法9.1 查看当前路由表9.2 测试路由走向9.3 连通性测试9.4 追踪路由路径十、常见问题排查问题 1内网不通外网正常问题 2外网不通内网正常问题 3内网域名无法解析问题 4路由重启后丢失问题 5手动编辑 /etc/resolv.conf 被覆盖十一、进阶技巧11.1 保留备份连接配置11.2 批量管理路由规则十二、总结一、需求背景在实际工作中经常会遇到这样的场景办公电脑同时连接了内网有线网络和外网 WiFi。内网有线可以访问公司内部服务器、代码仓库、数据库等资源而 WiFi 用于访问互联网。但如果两个网络都启用了默认网关操作系统就会面临该从哪个网卡出去的困惑导致网络访问异常。本文以银河麒麟桌面操作系统 V10 SP1为例详细记录如何通过配置静态路由实现内网网段走有线、其它网段走 WiFi的双网卡分流方案。二、环境概览项目详情操作系统银河麒麟桌面操作系统 V10 SP1 (Kylin Linux Desktop)内核版本5.4.18-167-generic架构x86_64网络管理NetworkManager有线网卡enp1s0 (MAC: 00:11:22:33:44:01)无线网卡wlp2s0 (MAC: 00:11:22:33:44:02)网卡 IP 地址一览网卡类型IP 地址子网网关获取方式enp1s0有线172.16.10.100/24172.16.10.254静态配置wlp2s0WiFi192.168.100.50/24192.168.100.1DHCP三、网络拓扑图下面用 ASCII 拓扑图展示整体网络结构┌─────────────────────────────────┐ │ 互联网 (Internet) │ └───────────────┬─────────────────┘ │ ┌───────┴───────┐ │ 无线路由器 │ │ 192.168.100.1 │ │ (WiFi AP) │ └───────┬───────┘ │ WiFi (SSID: Company-WiFi) ┌───────────────┴──────────────────┐ │ wlp2s0 (WiFi) │ │ 192.168.100.50/24 │ │ 网关: 192.168.100.1 │ │ 默认路由出口 (metric 600) │ │ │ │ ┌─────────────────────────┐ │ │ │ 本机 (mypc) │ │ │ │ 银河麒麟 V10 SP1 │ │ │ │ ┌───────────────────┐ │ │ │ │ │ 路由决策表 │ │ │ │ │ │ ┌───────────────┐ │ │ │ │ │ │ │ 匹配内网网段? │ │ │ │ │ │ │ │ → 走有线 │ │ │ │ │ │ │ │ 其余 │ │ │ │ │ │ │ │ → 走 WiFi │ │ │ │ │ │ │ └───────────────┘ │ │ │ │ │ └───────────────────┘ │ │ │ └─────────────────────────┘ │ │ │ │ enp1s0 (有线) │ │ 172.16.10.100/24 │ │ 网关: 172.16.10.254 │ │ 内网路由出口 (metric 100) │ └───────────────┬──────────────────┘ │ 有线以太网 ┌───────┴───────┐ │ 内网交换机 │ │ 172.16.10.254 │ └───────┬───────┘ │ ┌─────────────────────────────┼─────────────────────────────┐ │ │ │ ┌───────┴───────┐ ┌───────┴───────┐ ┌───────┴───────┐ │ 内网服务器 │ │ GitLab 仓库 │ │ 数据库集群 │ │ 10.0.0.0/8 │ │ 192.168.1.0/24│ │ 172.16.0.0/16 │ └───────────────┘ └───────────────┘ └───────────────┘四、配置详解4.1 思路分析要实现双网卡分流核心思路是┌──────────────────────────────────────────────────────────────┐ │ 路由决策流程 │ ├──────────────────────────────────────────────────────────────┤ │ │ │ 数据包目标 IP ──► 查路由表 ──┬── 匹配内网网段 ──► 走有线 │ │ │ │ │ └── 不匹配 ──► 走默认路由(WiFi) │ │ │ └──────────────────────────────────────────────────────────────┘关键操作有线网卡配置为静态 IP不设默认网关never-default: true手动添加内网网段路由WiFi 网卡DHCP 自动获取作为默认路由出口忽略来自 DHCP 的 DNS避免污染内网 DNS路由优先级内网路由 metric 设为 100高优先级WiFi 默认路由 metric 为 600低优先级4.2 有线网络配置enp1s0# 查看有线连接详情nmcli connection show有线连接 1关键配置项说明配置项值说明ipv4.methodmanual静态 IP 配置ipv4.addresses172.16.10.100/24本机 IP 和子网掩码ipv4.gateway–不设置默认网关ipv4.never-default是禁止该连接成为默认路由ipv4.dns172.16.10.1, 8.8.8.8, 223.5.5.5内网 DNS 为主外网 DNS 备用手动添加的内网路由规则# 以下命令通过 nmcli 或 ip route 添加# 格式: 目标网段 via 下一跳网关 dev 网卡iprouteadd10.0.0.0/8 via172.16.10.254 dev enp1s0 metric100iprouteadd172.16.0.0/16 via172.16.10.254 dev enp1s0 metric100iprouteadd192.168.200.1/32 via172.16.10.254 dev enp1s0 metric100iprouteadd192.168.1.0/24 via172.16.10.254 dev enp1s0 metric100iprouteadd192.168.2.0/24 via172.16.10.254 dev enp1s0 metric100iprouteadd172.16.100.0/24 via172.16.10.254 dev enp1s0 metric100在 NetworkManager 中这些路由保存在连接配置里ipv4.routes: { ip 10.0.0.0/8, nh 172.16.10.254 } { ip 172.16.0.0/16, nh 172.16.10.254 } { ip 192.168.200.1/32, nh 172.16.10.254 } { ip 192.168.1.0/24, nh 172.16.10.254 } { ip 192.168.2.0/24, nh 172.16.10.254 } { ip 172.16.100.0/24, nh 172.16.10.254 }4.3 WiFi 无线网络配置wlp2s0# 查看 WiFi 连接详情nmcli connection showCompany-WiFi关键配置项说明配置项值说明ipv4.methodautoDHCP 自动获取 IPipv4.ignore-auto-dns是忽略 DHCP 下发的 DNS防止覆盖有线 DNSipv4.never-default否允许作为默认路由默认路由0.0.0.0/0 via 192.168.100.1 metric 600外网出口4.4 为什么不设两个默认网关如果两个网卡都配置了默认网关路由表会变成default via 192.168.100.1 dev wlp2s0 metric 100 ← WiFi 默认路由 default via 172.16.10.254 dev enp1s0 metric 100 ← 有线默认路由此时系统会通过路由度量值metric来决定选哪条路。如果 metric 相同则行为不可预测——可能一会儿走有线、一会儿走 WiFi导致访问内网资源时包可能走 WiFi 默认路由直接丢弃访问外网时包可能走有线默认路由而被内网防火墙拦截因此正确做法是只保留一个默认路由WiFi然后为内网网段添加精确路由。五、路由表解析最终生效的路由表如下目的网段 下一跳网关 网卡 Metric 类型 ────────────────────────────────────────────────────────────────── 0.0.0.0/0 192.168.100.1 wlp2s0 600 DHCP 默认路由 192.168.200.1/32 172.16.10.254 enp1s0 100 静态路由 10.0.0.0/8 172.16.10.254 enp1s0 100 静态路由 172.16.100.0/24 172.16.10.254 enp1s0 100 静态路由 169.254.0.0/16 (本地链路) enp1s0 1000 内核 172.16.0.0/16 172.16.10.254 enp1s0 100 静态路由 172.16.10.0/24 (本地直连) enp1s0 100 内核 192.168.100.0/24 (本地直连) wlp2s0 600 内核 192.168.2.0/24 172.16.10.254 enp1s0 100 静态路由 192.168.1.0/24 172.16.10.254 enp1s0 100 静态路由路由匹配逻辑Linux 内核使用最长前缀匹配Longest Prefix Match算法查找路由┌─────────────────────────────────────────────────────────────────┐ │ 路由匹配决策树 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 数据包到达 │ │ │ │ │ │ ▼ │ │ ┌─────────────────────┐ │ │ │ 目标 IP 在路由表中? │ │ │ └─────────┬───────────┘ │ │ │ │ │ ┌──────┴──────┐ │ │ │ │ │ │ 匹配多条 不匹配 │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────┐ ┌──────────────┐ │ │ │选前缀最长的│ │走默认路由(WiFi)│ │ │ └────┬────┘ └──────────────┘ │ │ │ │ │ ┌────┴────────────────────────────────────┐ │ │ │ 示例: │ │ │ │ │ │ │ │ 访问 172.16.10.200 (内网服务器) │ │ │ │ → 匹配 172.16.0.0/16 (掩码 16位) │ │ │ │ → 也匹配 172.16.10.0/24 (掩码 24位) │ │ │ │ → 选 /24走 enp1s0 直连 │ │ │ │ │ │ │ │ 访问 10.0.1.50 (内网服务器) │ │ │ │ → 匹配 10.0.0.0/8 (掩码 8位) │ │ │ │ → 走 enp1s0 via 172.16.10.254 │ │ │ │ │ │ │ │ 访问 www.baidu.com (外网) │ │ │ │ → 不匹配任何内网路由 │ │ │ │ → 走默认路由 0.0.0.0/0 via WiFi │ │ │ └──────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘六、DNS 配置策略6.1 配置方案网卡DNS 来源DNS 服务器有线 (enp1s0)静态配置172.16.10.1 (内网), 8.8.8.8, 223.5.5.5WiFi (wlp2s0)DHCP → 忽略114.114.114.114 (被忽略)WiFi 网卡设置了ignore-auto-dns: true意味着 DHCP 下发的 DNS 不会写入系统。最终/etc/resolv.conf中生效的是有线配置的 DNSnameserver 172.16.10.1 ← 内网 DNS可解析内网域名 nameserver 8.8.8.8 ← Google DNS 备用 nameserver 223.5.5.5 ← 阿里 DNS 备用6.2 为什么忽略 WiFi 的 DNS┌──────────────────────────────────────────────────────┐ │ WiFi DHCP 下发的 DNS 无法解析内网域名覆盖有线 DNS │ │ │ │ 如果 WiFi DNS 覆盖了有线 DNS: │ │ │ │ 访问 gitlab.company.internal │ │ → 查询 114.114.114.114 │ │ → 114 DNS 返回 NXDOMAIN (域名不存在) │ │ → 无法访问内网服务 ❌ │ │ │ │ 正确做法: │ │ 访问 gitlab.company.internal │ │ → 查询 172.16.10.1 (内网 DNS) │ │ → 返回内网 IP 192.168.1.x │ │ → 数据包匹配 192.168.1.0/24 路由走有线 │ │ → 成功访问内网服务 ✅ │ └──────────────────────────────────────────────────────┘七、数据包流转路径图以下用两个场景展示数据包的实际流转路径场景一访问内网服务器 (10.0.0.100)┌──────────┐ ┌──────────────────┐ ┌──────────────────┐ │ 应用程序 │────►│ 路由表查找 │────►│ enp1s0 (有线) │ │ 访问内网 │ │ 10.0.0.0/8 匹配! │ │ 172.16.10.100 │ │ 10.0.0.100│ │ → 172.16.10.254 │ │ │ └──────────┘ └──────────────────┘ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ 内网交换机 │ │ 172.16.10.254 │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ 内网服务器 │ │ 10.0.0.100 │ └──────────────────┘场景二访问外网 (www.baidu.com)┌──────────┐ ┌──────────────────┐ ┌──────────────────┐ │ 应用程序 │────►│ 路由表查找 │────►│ wlp2s0 (WiFi) │ │ 访问百度 │ │ 无匹配 → 默认路由 │ │ 192.168.100.50 │ │ │ │ 0.0.0.0/0 │ │ │ └──────────┘ └──────────────────┘ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ 无线路由器 │ │ 192.168.100.1 │ └────────┬─────────┘ │ ▼ ┌──────────────────┐ │ 互联网 │ │ www.baidu.com │ └──────────────────┘八、配置方法8.1 通过 nmcli 命令行配置# 步骤1: 修改有线连接设置静态 IP 并禁止默认路由nmcli connection modify有线连接 1\ipv4.method manual\ipv4.addresses172.16.10.100/24\ipv4.never-defaultyes\ipv4.dns172.16.10.1 8.8.8.8 223.5.5.5# 步骤2: 清空旧路由并添加内网路由metric 100 确保高优先级nmcli connection modify有线连接 1\ipv4.routes\ipv4.routes10.0.0.0/8 172.16.10.254 100\ipv4.routes172.16.0.0/16 172.16.10.254 100\ipv4.routes172.16.100.0/24 172.16.10.254 100\ipv4.routes192.168.1.0/24 172.16.10.254 100\ipv4.routes192.168.2.0/24 172.16.10.254 100\ipv4.routes192.168.200.1/32 172.16.10.254 100# 步骤3: 修改 WiFi 连接忽略 DHCP DNSnmcli connection modifyCompany-WiFi\ipv4.ignore-auto-dnsyes# 步骤4: 重新激活连接先 down 两个再 up避免路由冲突nmcli connection down有线连接 1nmcli connection downCompany-WiFinmcli connection up有线连接 1nmcli connection upCompany-WiFi8.2 通过图形界面配置银河麒麟系统提供了图形化的网络配置界面操作路径如下打开开始菜单 → “设置” → “网络”或右键点击任务栏网络图标 → “网络设置”配置有线网卡选择有线连接 1点击齿轮图标进入设置IPv4 选项卡方法选择手动地址栏填入172.16.10.100子网掩码255.255.255.0网关留空重要勾选仅将此连接用于其网络上的资源等同于never-defaulttrue在路由区域点击逐条添加内网网段路由目标网络、子网掩码、下一跳172.16.10.254、Metric 填100DNS 填入172.16.10.1, 8.8.8.8, 223.5.5.5配置 WiFi选择Company-WiFi点击齿轮图标进入设置IPv4 选项卡方法保持自动(DHCP)DNS 区域的自动开关关闭手动填入有线侧配置的 DNS 服务器点击应用保存依次重启两个连接使其生效8.3 通过 ip route 命令临时添加# 临时添加路由重启后失效iprouteadd10.0.0.0/8 via172.16.10.254 dev enp1s0 metric100iprouteadd172.16.0.0/16 via172.16.10.254 dev enp1s0 metric100# 删除路由iproute del10.0.0.0/8 via172.16.10.254 dev enp1s0# 或者iproute del10.0.0.0/8九、验证方法9.1 查看当前路由表iproute show table main预期输出中应包含内网网段路由 via enp1s0metric 100默认路由 via wlp2s0metric 6009.2 测试路由走向使用ip route get命令可以模拟内核路由查找过程告诉你访问某个 IP 会走哪张网卡、用哪个源地址# 查看访问内网 IP 走哪条路由iproute get10.0.0.100# 预期: 10.0.0.100 via 172.16.10.254 dev enp1s0 src 172.16.10.100# 查看访问外网 IP 走哪条路由iproute get8.8.8.8# 预期: 8.8.8.8 via 192.168.100.1 dev wlp2s0 src 192.168.100.509.3 连通性测试# 测试内网连通性ping-c410.0.0.100# 内网服务器ping-c4172.16.10.254# 内网网关# 测试外网连通性ping-c4www.baidu.com# 外网# 测试 DNS 解析nslookup 未安装时可用 dig 或 host 代替nslookupgitlab.internal# 内网域名需要内网 DNS 能解析nslookupwww.baidu.com# 外网域名# 或diggitlab.internalhostwww.baidu.com9.4 追踪路由路径# 查看内网访问的完整路径traceroute 未安装时可用 mtr 或 tracepath 代替traceroute10.0.0.100# 查看外网访问的完整路径traceroutewww.baidu.com十、常见问题排查问题 1内网不通外网正常原因内网路由未生效或网关不通排查# 检查路由是否存在iproute show|grep10.0.0.0# 检查能否 ping 通内网网关ping172.16.10.254问题 2外网不通内网正常原因有线网卡抢占了默认路由或 WiFi 默认路由未生效排查# 检查默认路由iproute show|grepdefault# 确认有线连接 never-default 是否生效nmcli connection show有线连接 1|grepnever-default问题 3内网域名无法解析原因WiFi 的 DNS 覆盖了内网 DNS排查# 检查当前 DNS 配置cat/etc/resolv.conf# 确认 WiFi 连接 ignore-auto-dns 是否生效nmcli connection showCompany-WiFi|grepignore-auto-dns问题 4路由重启后丢失原因使用ip route add添加的路由是临时的解决通过nmcli connection modify将路由持久化到 NetworkManager 连接配置中问题 5手动编辑 /etc/resolv.conf 被覆盖原因银河麒麟 V10 使用systemd-resolved管理 DNS/etc/resolv.conf是动态生成的符号链接解决不要直接编辑/etc/resolv.conf而是通过 NetworkManager 连接配置来设置 DNSnmcli connection modify有线连接 1ipv4.dns172.16.10.1 8.8.8.8nmcli connection up有线连接 1十一、进阶技巧11.1 保留备份连接配置在实际生产中建议保留一个纯有线的备份连接配置仅设置静态 IP 和默认网关不添加任何自定义路由当分流配置出现问题时可以快速切换到备份连接恢复网络# 创建备份连接分流配置出问题时切换到此连接恢复网络nmcli connectionadd\typeethernet\con-name纯有线-备份\ifname enp1s0\ipv4.method manual\ipv4.addresses172.16.10.100/24\ipv4.gateway172.16.10.254\ipv4.dns172.16.10.1# 切换回备份连接nmcli connection up纯有线-备份11.2 批量管理路由规则当内网网段较多时建议将路由规则写成脚本批量添加#!/bin/bash# add_internal_routes.sh - 批量添加内网路由CONN有线连接 1GATEWAY172.16.10.254ROUTES(10.0.0.0/8172.16.0.0/16192.168.1.0/24192.168.2.0/24172.16.100.0/24192.168.200.1/32)forroutein${ROUTES[]};donmcli connection modify$CONNipv4.routes$route$GATEWAY100echo已添加路由:$route-$GATEWAYdonenmcli connection up$CONNecho路由配置完成十二、总结本文详细记录了在银河麒麟 V10 系统上实现双网卡路由分流的全过程核心要点总结如下┌────────────────────────────────────────────────────────────┐ │ 双网卡分流配置要点 │ ├────────────────────────────────────────────────────────────┤ │ │ │ 1. 有线网卡静态 IP never-defaulttrue 内网静态路由 │ │ └─ 不参与默认路由竞争 │ │ │ │ 2. WiFi 网卡DHCP 自动获取 作为默认路由出口 │ │ └─ ignore-auto-dnstrue 避免 DNS 污染 │ │ │ │ 3. 路由策略最长前缀匹配 │ │ └─ 内网 IP → 匹配精确路由 → 走有线 │ │ └─ 外网 IP → 未匹配 → 走默认路由 → 走 WiFi │ │ │ │ 4. DNS 策略以内网 DNS 为主外网 DNS 备用 │ │ └─ 确保内网域名可解析 │ │ │ └────────────────────────────────────────────────────────────┘这种方案的优势在于配置简单无需复杂的策略路由policy routing仅靠静态路由即可实现维护方便新增内网网段只需添加一条路由规则稳定性高路由规则由 NetworkManager 管理重启不掉适用性广适用于所有 Linux 发行版不限于银河麒麟本文基于银河麒麟 V10 SP1 NetworkManager 环境编写其他 Linux 发行版配置方法类似可参考使用。