双网卡与路由策略通过配置多网卡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系统里,配置双网卡和路由策略,说白了就是为了更精细地控制网络流量走向。想象一下,你有一台服务器,它可能既要处理内部数据,又要对外提供服务,或者你需要它同时连接到两个不同的网络环境,比如一个专线一个公网。这时候,如果所有流量都只走一个默认通道,那肯定会出问题。通过双网卡和路由策略,我们就能让不同的流量走不同的“门”,实现分流、隔离,甚至负载均衡和故障切换。核心在于正确识别和配置这两块网卡,然后利用
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
文件里完成,虽然不是强制,但非常推荐,方便记忆和管理:
# 在文件末尾添加 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 负载均衡