1. 基本概念与术语
1.1 多网卡路由的作用与场景
在企业与家庭网络中,Linux多网卡路由可以让服务器作为网关,连接多个局域网,实现跨网段通信与流量分发。通过合理的拓扑与策略,可以提升网络利用率、增强安全性,并实现对不同网络的精细控制。
本节聚焦核心能力:接口管理、路由表的组织、策略路由,以及转发能力。掌握这些要点,是实现高效路由的前提。通过对上述概念的理解,你将具备把多网卡路由设置落地到实际场景中的基础能力。本文所述内容正是从入门到实战的完整指南的一部分,帮助你快速建立可用的路由环境。
1.2 路由表与策略路由概念
Linux 允许使用多张路由表来组织不同来源的流量。配合 ip rule 与 ip route,可以针对不同来源网段或流量特征分配不同的出口网关与路由路径。
策略路由的核心在于将流量的处理决策从单一全局路由变为按规则分流。通过定义自定义路由表、然后为各网段设定规则,便能实现对多网卡环境的灵活控制。这些做法构成本指南的技术基石,帮助你实现多网卡路由设置的实战落地。
2. 环境准备与拓扑规划
2.1 硬件接口识别与命名
在开始配置前,需要先识别服务器上的网卡。常用命令 ip link 或 ethtool 可以列出接口及状态信息,输出通常包含 eth0、eth1、ens33 等名称。
记录每个接口连接的网络阶段,如 eth0 连接到 192.168.1.0/24,eth1 连接到 192.168.2.0/24 的拓扑信息,为后续的路由决策提供基础。
2.2 地址规划与拓扑布局
清晰的地址规划能降低后续运维难度。为每个出口网段分配唯一的网关、子网掩码及上游网络地址,确保路由表中的默认路由指向正确的网关。
典型拓扑:两块网卡分别连接两个局域网,边界网关充当默认路由,对外连接向上游网络。出口网段与上游网关的映射是设计中的关键要素。
3. 基本网络设置:开启转发与静态路由
3.1 启用 IPv4 转发
实现路由转发前,需要在内核层面开启 IPv4 转发。如果转发未启用,流经不同接口的包将无法从一个网络跳转到另一个网络。
下面给出在当前会话中生效的命令,以及永久配置的方法。确保在生产环境中按需开启转发。
# 临时开启
sysctl -w net.ipv4.ip_forward=1
# 永久开启,随系统启动生效
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
3.2 为网卡分配 IP 与子网
为每个网络接口配置静态 IP 地址与子网掩码,确保网段互不冲突并具备可路由性。不同发行版的配置方式略有不同,本文给出通用示例以便理解原理。
示例中,eth0 属于 192.168.1.0/24,eth1 属于 192.168.2.0/24。
# 静态 IP 分配示例(通用思路,实际按发行版选择 netplan/ifupdown 等方法)
ip addr add 192.168.1.2/24 dev eth0
ip addr add 192.168.2.2/24 dev eth1
ip link set dev eth0 up
ip link set dev eth1 up
4. 策略路由与路由表设计
4.1 创建自定义路由表
为不同出口创建独立的路由表,以便对来自不同网段的流量走不同的出口。/etc/iproute2/rt_tables 中定义路由表名称与编号,是实现自定义表的关键步骤。
在实际系统中,先将自定义路由表添加到 rt_tables,再在 ip rule/ ip route 中引用它们,这样可以实现对多网卡的精细控制。
# 将自定义路由表写入 rt_tables
echo "200 DEV1" >> /etc/iproute2/rt_tables
echo "201 DEV2" >> /etc/iproute2/rt_tables
4.2 使用 ip rule 实现源地址分流
策略路由的核心是基于源地址的规则分流。只要为不同网段添加规则,系统就会在转发时先匹配这些规则并选择对应的路由表。
以下片段展示了一个典型的实现流程,基于前述地址规划:

# 为不同网络段添加策略路由规则
ip rule add from 192.168.1.0/24 table DEV1
ip rule add from 192.168.2.0/24 table DEV2
随后,需要在各自的路由表中配置默认路由,以完成出口定义。
# 给各自的路由表添加默认路由
ip route add default via 192.168.1.1 dev eth0 table DEV1
ip route add default via 192.168.2.1 dev eth1 table DEV2
5. NAT 与上网共享
5.1 设置 MASQUERADE
若需要实现内部多网段主机通过单一出口上网,需在出口接口实施网络地址转换(NAT),通常采用 MASQUERADE。这一步是实现跨网段外部连通性的关键。
# 使用 iptables 实现 NAT(伪装源地址)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 保存规则的命令随发行版而异
iptables-save > /etc/iptables/rules.v4
注意:实际拓扑下,NAT 的使用与防火墙策略需结合具体场景进行调整,避免不必要的暴露与安全风险。
5.2 防火墙与安全性考量
在多网卡路由环境中,合理的防火墙配置是必要的。通过 iptables、nftables 等工具,只开启必要端口与服务,以减少攻击面。
同时,建议对路由入口处的访问进行严格控制,避免未授权设备或主机直接触达路由规则入口。
6. 持久化与故障排查
6.1 持久化路由配置
为了使路由策略在重启后保持有效,需要将策略路由及自定义路由表的配置写入启动脚本或服务。常见做法是把初始化脚本放入系统启动流程,或通过 systemd 服务实现自动加载。
# 简单示例:将路由策略脚本放入 /usr/local/bin,并创建 systemd 服务
cat > /usr/local/bin/apply-multi-nic-routing.sh <<'EOS'
#!/bin/bash
ip rule add from 192.168.1.0/24 table DEV1
ip rule add from 192.168.2.0/24 table DEV2
ip route add default via 192.168.1.1 dev eth0 table DEV1
ip route add default via 192.168.2.1 dev eth1 table DEV2
EOS
chmod +x /usr/local/bin/apply-multi-nic-routing.sh
# systemd service (保存为 /etc/systemd/system/multi-nic-routing.service)
[Unit]
Description=Apply multi-NIC routing rules
After=network-online.target
Wants=network-online.target[Service]
Type=oneshot
ExecStart=/usr/local/bin/apply-multi-nic-routing.sh
RemainAfterExit=true[Install]
WantedBy=multi-user.target
# 启用服务并在启动时执行
systemctl enable --now multi-nic-routing.service
6.2 常见排错命令
遇到问题时,重点检查 转发状态、路由规则与表、以及接口是否正常工作。以下命令是排错的常用工具:
# 查看是否开启转发
cat /proc/sys/net/ipv4/ip_forward# 查看现有策略路由规则与路由表
ip rule
ip route show table DEV1
ip route show table DEV2# 基本连通性测试
ping -c 4 8.8.8.8


