Linux如何配置双网卡和路由策略

双网卡与路由策略通过配置多网卡IP及策略路由,实现流量分流与故障切换。首先用ip或netplan配置两网卡IP与默认网关,并分配至不同路由表(如100和200);接着在/etc/iproute2/rt_tables中命名表,使用ip rule添加基于源IP的路由规则(如192.168.1.10走表100,10.0.0.10走表200),确保不同流量按策略转发;最后通过systemd服务持久化规则,避免重启失效。该方案解决多网络接入时的路由冲突,实现内外网隔离、负载均衡与高可用,避免单点故障。

Linux如何配置双网卡和路由策略

在Linux系统里,配置双网卡和路由策略,说白了就是为了更精细地控制网络流量走向。想象一下,你有一台服务器,它可能既要处理内部数据,又要对外提供服务,或者你需要它同时连接到两个不同的网络环境,比如一个专线一个公网。这时候,如果所有流量都只走一个默认通道,那肯定会出问题。通过双网卡和路由策略,我们就能让不同的流量走不同的“门”,实现分流、隔离,甚至负载均衡和故障切换。核心在于正确识别和配置这两块网卡,然后利用

ip

命令的

rule

route

子命令,根据流量的特征(比如源IP、目的IP)来决定它该走哪条路。

配置双网卡和路由策略,通常需要从识别网络接口开始。你可以用

ip a

ip link

命令来查看你的系统上有哪些网卡,它们叫什么名字(比如

eth0

enp0s3

等)。

1. 基础网卡IP配置

为每块网卡分配IP地址、子网掩码,这是第一步。不同的Linux发行版有不同的配置方式。

  • 使用

    ip

    命令临时配置(重启失效): 如果你只是想快速测试一下,可以直接用

    ip addr

    ip route

    命令。

    # 配置第一块网卡 sudo ip addr add 192.168.1.10/24 dev enp0s3 sudo ip link set enp0s3 up  # 配置第二块网卡 sudo ip addr add 10.0.0.10/24 dev enp0s8 sudo ip link set enp0s8 up
  • 使用

    netplan

    (Ubuntu/Debian等现代系统):

    netplan

    是一个很方便的工具,它能把网卡配置和路由表管理整合起来。编辑或创建

    /etc/netplan/01-netcfg.yaml

    文件:

    network:   version: 2   renderer: networkd # 也可以是 networkmanager   ethernets:     enp0s3:       dhcp4: no       addresses: [192.168.1.10/24]       routes:         - to: default           via: 192.168.1.1 # 第一块网卡的默认网关           table: 100 # 将此路由放入自定义路由表100       nameservers:         addresses: [8.8.8.8, 8.8.4.4] # 可选的DNS配置     enp0s8:       dhcp4: no       addresses: [10.0.0.10/24]       routes:         - to: default           via: 10.0.0.1 # 第二块网卡的默认网关           table: 200 # 将此路由放入自定义路由表200       nameservers:         addresses: [1.1.1.1, 9.9.9.9] # 可选的DNS配置

    保存后,运行

    sudo netplan try

    进行测试,确认无误后

    sudo netplan apply

    应用配置。

  • 使用

    /etc/sysconfig/network-scripts

    (RHEL/CentOS): 编辑

    /etc/sysconfig/network-scripts/ifcfg-enp0s3

    ifcfg-enp0s8

    文件。

    ifcfg-enp0s3

    示例:

    TYPE=Ethernet BOOTPROTO=static NAME=enp0s3 DEVICE=enp0s3 ONBOOT=yes IPADDR=192.168.1.10 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 # 对于RHEL/CentOS,路由策略通常需要通过后续的`ip`命令或自定义脚本实现持久化。
    ifcfg-enp0s8

    类似,只是IP和网关不同。修改后,重启网络服务或网卡:

    sudo systemctl restart network

    sudo ifdown enp0s3 && sudo ifup enp0s3

2. 核心:路由策略配置(Policy Routing)

这是双网卡配置的精髓。当系统有多个默认网关时,Linux的默认行为是只使用一个(通常是第一个配置的)。为了让不同的流量走不同的网关,我们需要使用策略路由。

首先,给我们的自定义路由表起个名字,这在

/etc/iproute2/rt_tables

文件里完成,虽然不是强制,但非常推荐,方便记忆和管理:

Linux如何配置双网卡和路由策略

Descript

一个多功能的音频和视频编辑引擎

Linux如何配置双网卡和路由策略22

查看详情 Linux如何配置双网卡和路由策略

# 在文件末尾添加 100 main_net 200 backup_net

接下来,我们用

ip route

ip rule

命令来配置:

# 清理可能存在的旧规则和路由,避免冲突,防止多次执行命令产生冗余 sudo ip rule del pref 100 # 删除优先级为100的规则 sudo ip rule del pref 200 # 删除优先级为200的规则 sudo ip route flush table 100 sudo ip route flush table 200  # 为第一块网卡(enp0s3, IP 192.168.1.10)配置路由表100 # 添加默认路由到表100,通过192.168.1.1走enp0s3接口 sudo ip route add default via 192.168.1.1 dev enp0s3 table 100 # 添加规则:所有源IP是192.168.1.10的流量,都使用路由表100 sudo ip rule add from 192.168.1.10/32 table 100 pref 100 # pref是优先级,数字越小优先级越高  # 为第二块网卡(enp0s8, IP 10.0.0.10)配置路由表200 # 添加默认路由到表200,通过10.0.0.1走enp0s8接口 sudo ip route add default via 10.0.0.1 dev enp0s8 table 200 # 添加规则:所有源IP是10.0.0.10的流量,都使用路由表200 sudo ip rule add from 10.0.0.10/32 table 200 pref 200  # 最后,刷新路由缓存,让新配置立即生效 sudo ip route flush cache

这样一来,系统就会根据流量的源IP地址来选择不同的路由表,从而实现流量的分流。

3. 持久化配置

上述

ip rule

ip route

命令在系统重启后会失效,所以我们需要让它们持久化。

  • 对于

    netplan

    用户: 如果你在

    netplan

    的YAML文件中已经配置了

    routes

    table

    ,那么这些配置会自动持久化。但请注意,

    netplan

    本身对基于源IP的

    ip rule

    支持有限,你可能还需要结合

    systemd

    服务来添加这些规则。

  • 使用

    systemd

    服务(推荐): 这是现代Linux系统上最推荐的持久化方法。创建一个

    systemd

    服务单元文件,例如

    /etc/systemd/system/policy-routing.service

    [Unit] Description=Custom Policy Routing Configuration After=network-online.target # 确保网络服务已经就绪  [Service] Type=oneshot # 一次性执行的服务 # 启动前先清理旧规则,防止重复添加 ExecStartPre=/usr/sbin/ip rule del pref 100 ExecStartPre=/usr/sbin/ip rule del pref 200 ExecStartPre=/usr/sbin/ip route flush table 100 ExecStartPre=/usr/sbin/ip route flush table 200 # 执行路由和规则配置命令 ExecStart=/usr/sbin/ip route add default via 192.168.1.1 dev enp0s3 table 100 ExecStart=/usr/sbin/ip rule add from 192.168.1.10/32 table 100 pref 100 ExecStart=/usr/sbin/ip route add default via 10.0.0.1 dev enp0s8 table 200 ExecStart=/usr/sbin/ip rule add from 10.0.0.10/32 table 200 pref 200 ExecStartPost=/usr/sbin/ip route flush cache # 刷新缓存 RemainAfterExit=yes # 即使命令执行完毕,也认为服务是活跃的  [Install] WantedBy=multi-user.target # 在多用户模式下启动

    保存文件后,重新加载

    systemd

    配置,启用并启动服务:

    sudo systemctl daemon-reload sudo systemctl enable policy-routing.service sudo systemctl start policy-routing.service

    这样,每次系统启动,这些路由策略都会自动生效。

为什么需要双网卡和路由策略?它解决了什么实际问题?

在我看来,双网卡和路由策略并非仅仅是“配置”那么简单,它更多的是解决实际网络环境中的复杂需求和痛点。最直接的,就是避免“单点故障”和实现“流量分流”。

首先,解决多网络接入环境下的路由冲突问题。设想一下,你的服务器同时连接着公司内网(比如192.168.1.0/24段)和外部互联网(通过另一个网卡和网关)。如果不对路由做特殊处理,

linux centos app ipad ubuntu 工具 ai 路由 dns linux系统 为什么 子网 try 接口 table linux ubuntu centos debian 负载均衡

上一篇
下一篇