微信优化

weixinyouhua

Linux双网卡如何配置路由?双网卡路由配置详细教程

2026-09-10 23:31:30

先给答案

Linux双网卡配置路由的核心思路是:先分清“默认路由”和“静态路由”的职责,再用metric值控制优先级,最后通过持久化配置让规则重启不丢。 一块网卡管外网,一块网卡管内网,两者各走各的,互不抢道,关键在于让系统知道“去哪个网段找哪块网卡”。

linux双网卡同时上网配置:先搞清路由怎么走

很多朋友在配置双网卡时,最容易犯的错是把两个网卡都设置了默认网关,结果就是系统懵了两个出口都写着“通往全球”,它不知道该把数据包交给谁,最终表现就是网络时通时不通,或者干脆全部瘫痪。

路由表的工作机制:一张表决定数据包去向

Linux系统的路由判断遵循“最长前缀匹配”原则,系统收到一个目标IP,会从路由表中找出最具体的路由条目来匹配,举个例子:

  • 目标是168.1.100,它既能匹配168.1.0/24这条路由,也能匹配0.0.0/0这条默认路由。
  • 但系统会优先走168.1.0/24,因为它的掩码更长,更精确。
  • 只有当目标地址不在任何具体路由覆盖范围内时,才会走默认路由。

行业共识认为,理解这条规则是配置双网卡的基础,你的内网网段只要有一条具体的静态路由,系统就会乖乖走内网网卡;外网流量则全部交给默认路由对应的外网网卡。

看清现状:查看当前路由表的正确姿势

配置之前,一定要先查看当前网络状态,避免盲目操作,常用命令如下:

  • ip route show:查看IP层路由表,最常用,信息最全。
  • route -n:查看内核路由表,显示格式偏传统。
  • ip addr:确认网卡名称和IP地址状态。
  • ip link set dev eth0 up:激活网卡,如果网卡处于down状态需要先拉起。

查看路由表时,重点关注default开头的条目,如果有两条default路由,说明默认网关冲突了这就是外网不通的元凶,记得用ip route del default via 旧网关 dev 对应网卡

Linux双网卡如何配置路由?双网卡路由配置详细教程

删掉多余的那条。

linux双网卡路由优先级设置:metric值决定谁先上场

当服务器上存在多个默认网关时,metric值(路由度量值)就是唯一的裁判,metric值越小,路由优先级越高,默认情况下,Linux会为每个网卡分配一个metric值,具体数值和网卡接入顺序、网段类型有关。

手动调整metric的实操方法

假设服务器有两块网卡:ens33(外网,192.168.10.10)和ens44(内网,10.0.0.10),我们希望外网优先,内网作为备用出口。

# 查看当前metric值
ip route show
# 修改ens33默认路由的metric为100
sudo ip route replace default via 192.168.10.1 dev ens33 metric 100
# 修改ens44默认路由的metric为200
sudo ip route replace default via 10.0.0.1 dev ens44 metric 200

执行完成后,再查ip route show,你会看到两条default路由,但系统默认会选择metric小的那一条往外发包。

用nmcli调整metric的推荐方案

如果你的系统使用NetworkManager管理网络(CentOS/RHEL 7+默认就是),用nmcli调整更为稳妥:

  • 修改连接配置:nmcli connection modify "ens33" ipv4.route-metric 100
  • 修改完成后重启网络:nmcli connection up "ens33"

相比直接改内核路由,nmcli方式的好处是规则会永久写入配置文件,重启网卡后不会丢,多数情况下,建议优先使用nmcli工具而不是手工命令。

静态路由配置实战:让内网访问走指定网卡

双网卡最常见的需求是:服务器要同时上外网和访问公司内网,外网流量走上网卡,内网流量走办公网卡,此时需要给内网网段添加一条静态路由。

内网网段固定时的配置命令

假设内网网段是16.0.0/16,内网网关是0.0.1,内网网卡是ens44

sudo ip route add 172.16.0.0/16 via 10.0.0.1 dev ens44

这条命令的含义是:凡是去往16.0.0/16这个网段的流量,一律交给

Linux双网卡如何配置路由?双网卡路由配置详细教程

0.0.1,从ens44出去,其他流量不受影响,继续走默认路由。

解决静态路由重启丢失的问题

手动添加的路由在重启后会消失,必须写入配置文件,不同Linux发行版配置方式不同:

  • CentOS/RHEL 7/8:在/etc/sysconfig/network-scripts/下找到内网网卡对应的配置文件(比如ifcfg-ens44),添加:

    GATEWAY=10.0.0.1

    然后在/etc/sysconfig/static-routes文件中写入:

    any net 172.16.0.0 netmask 255.255.0.0 gw 10.0.0.1

    如果没有这个文件,就手动创建。

  • Ubuntu/Debian(netplan方式):编辑/etc/netplan/目录下的.yaml文件,在对应网卡下添加:

    routes:
      - to: 172.16.0.0/16
        via: 10.0.0.1

    然后执行sudo netplan apply生效。

  • Ubuntu/Debian(传统ifupdown方式):在/etc/network/interfaces中追加:

    up ip route add 172.16.0.0/16 via 10.0.0.1 dev ens44

持久化配置完成后,务必重启网络服务或重启机器验证一下效果,确保路由没有丢。

双网卡策略路由:让规则更精细、更灵活

静态路由解决的是“去固定网段走指定网卡”的问题,但有些场景更复杂比如从某一个网卡进来的请求,回包必须从同一块网卡出去,这就轮到策略路由出场了。

策略路由的核心概念:多张路由表协同

Linux的策略路由基于“路由规则”(routing rule)工作,系统可以有多张独立的路由表,每张表有自己的路由条目,数据包到达时,内核根据源地址、目标地址、入口网卡等条件,决定查哪张表。

创建自定义路由表的步骤

以“从内网口进来的流量强制从内网口出去”为例:

  1. 编辑/etc/iproute2/rt_tables

    Linux双网卡如何配置路由?双网卡路由配置详细教程

    ,添加自定义表名:

    200   inside_route
  2. 往这张表里添加路由规则:
    sudo ip route add default via 10.0.0.1 dev ens44 table inside_route
  3. 添加路由规则,让从ens44进来的包查这张表:
    sudo ip rule add from 10.0.0.10 lookup inside_route
  4. 验证效果:
    sudo ip rule show
    sudo ip route show table inside_route

策略路由在企业级环境中应用较多,机房服务器部署、多线接入的负载均衡等场景经常用到。

策略路由的常用ip rule参数

  • from 源IP:匹配特定源地址的流量。
  • to 目标IP:匹配特定目标地址的流量。
  • dev 网卡名:匹配从该网卡进入的流量。
  • lookup 表名:指定要查询的规则表。

Linux双网卡配置路由常见问题解答

双网卡同时连接时,为什么内网ping得通但外网不通?

通常是默认路由被内网网关抢占,检查ip route show,如果only一条default指向内网网关,外网数据包自然送不出去,解决方案:手动添加外网默认路由,调整metric值让外网路由优先级更高,或删除内网网卡的默认路由,改为添加具体的内网静态路由。

CentOS和Ubuntu配置静态路由的命令有什么差异?

CentOS系列偏向用/etc/sysconfig/network-scripts/route-网卡名文件加ip route add命令;Ubuntu新版则用netplan的routes字段,老版本用/etc/network/interfaces,原理相同,但配置格式完全不同,运维多套系统时,先确认发行版版本再动手,避免改错文件导致网络失效。

配置完策略路由后,原来正常访问的外网突然不通了?

可能是策略路由的规则优先级过高,把外网流量也拦截了,用ip rule show查看规则顺序,检查是否有多余的from匹配语句,临时关闭规则可执行ip rule del from 原IP lookup 表名,恢复后再细化规则条件,比如指定更精确的源地址范围或增加网卡匹配条件。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待