双网卡与路由策略通过配置多网卡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 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
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
/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
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
routes
table
netplan
ip rule
systemd
使用systemd
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如何配置双网卡和路由策略的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号