侧边栏壁纸
  • 累计撰写 37 篇文章
  • 累计创建 4 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Linux 多网卡多IP环境下的流量分流与策略路由配置

陳小航
2025-10-30 / 0 评论 / 0 点赞 / 19 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2025-10-31,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

扫码_搜索联合传播样式-标准色版.png
一、前言

在多IP或多网卡服务器中,默认所有流量都走主路由出口。
但在某些情况下,我们希望让指定目标网段通过特定源IP访问,例如:

  • 一台服务器绑定多个公网IP,想让不同目标网站使用不同出口;

  • 需要从指定源IP访问合作方系统;

  • 内外网并存时,想强制某流量走内网。

本文总结 三种通用实现方式,在 CentOS / Ubuntu / Debian / Rocky / AlmaLinux / openEuler 等系统均可使用。


二、方法一:策略路由(Policy Routing)【推荐】

🧩 示例需求

从源IP 10.0.0.3 访问目标网段 1.1.1.0/24
指定网关为 10.0.0.254,网卡为 eth0


1️⃣ 创建自定义路由表

编辑 /etc/iproute2/rt_tables,添加一行:

echo "200 custom_table" >> /etc/iproute2/rt_tables

2️⃣ 在该表中添加默认路由

ip route add default via 10.0.0.254 dev eth0 table custom_table

3️⃣ 建立策略规则

ip rule add to 1.1.1.0/24 lookup custom_table

4️⃣ 指定源IP绑定

ip route add default via 10.0.0.254 dev eth0 src 10.0.0.3 table custom_table

5️⃣ 验证生效

ip rule show | grep 1.1.1.0
ip route show table custom_table
tcpdump -i eth0 src 10.0.0.3 and dst 1.1.1.0/24

✅ 持久化配置(根据系统不同)

CentOS / RHEL / Rocky / AlmaLinux:

echo "to 1.1.1.0/24 lookup custom_table" > /etc/sysconfig/network-scripts/rule-eth0
echo "default via 10.0.0.254 dev eth0 src 10.0.0.3" > /etc/sysconfig/network-scripts/route-custom_table

⚠️ 权限需为 644,否则系统可能忽略。

Ubuntu / Debian:

Ubuntu 18+ / Debian 10+ 默认使用 netplansystemd-networkd
两种方法任选其一:

方法A:Netplan 方式

编辑配置文件 /etc/netplan/01-netcfg.yaml

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses: [10.0.0.3/24]
      routes:
        - to: 1.1.1.0/24
          via: 10.0.0.254
          table: 200
      routing-policy:
        - to: 1.1.1.0/24
          table: 200

保存后应用:

netplan apply
方法B:开机脚本方式(兼容旧系统)
cat >/etc/networkd-dispatcher/routable.d/10-custom-route <<'EOF'
#!/bin/bash
ip route add default via 10.0.0.254 dev eth0 src 10.0.0.3 table custom_table
ip rule add to 1.1.1.0/24 lookup custom_table
EOF
chmod +x /etc/networkd-dispatcher/routable.d/10-custom-route

此脚本会在网络接口启动后自动执行,Ubuntu 16~22.04 均适用。


三、方法二:iptables SNAT(修改源IP)

通过SNAT让发往目标网段的流量自动改为指定源IP。

iptables -t nat -A OUTPUT -d 1.1.1.0/24 -j SNAT --to-source 10.0.0.3

保存规则:

CentOS / RHEL 系列:

yum install -y iptables-services
service iptables save
systemctl enable iptables

Ubuntu / Debian 系列:

apt install -y iptables-persistent
netfilter-persistent save

验证:

iptables -t nat -L -n -v
curl --connect-timeout 5 http://1.1.1.1

四、方法三:手动静态路由(简易版)

适用于无需复杂策略的小场景。

ip route add 1.1.1.0/24 via 10.0.0.254 src 10.0.0.3 dev eth0

要持久化:

  • CentOS / RHEL:

    echo "1.1.1.0/24 via 10.0.0.254 src 10.0.0.3 dev eth0" >> /etc/sysconfig/network-scripts/route-eth0
  • Ubuntu / Debian:

    echo "up ip route add 1.1.1.0/24 via 10.0.0.254 src 10.0.0.3 dev eth0" >> /etc/network/interfaces

五、常见问题与注意事项

1️⃣ 网关验证

确保网关正确:

ip route show default

2️⃣ 策略优先级

如系统已有其他策略,可指定优先级:

ip rule add to 1.1.1.0/24 lookup custom_table priority 1000

3️⃣ 防火墙干扰

如启用 firewalld,建议禁用或放行相关规则:

systemctl stop firewalld && systemctl disable firewalld

4️⃣ 检查生效状态

ip rule show
ip route show table custom_table

六、总结对比

方法

优点

缺点

适用场景

策略路由(推荐)

灵活可控,支持多网段、多出口

配置稍复杂

长期使用、生产环境

iptables SNAT

快速修改源IP,简单直观

不改变路由逻辑

临时场景、测试

静态路由

最直观,命令少

不支持复杂策略

单一出口场景


七、完整验证流程

  1. 查看策略表:

    ip rule show
  2. 查看自定义路由:

    ip route show table custom_table
  3. 抓包验证:

    tcpdump -i eth0 src 10.0.0.3 and dst 1.1.1.0/24
  4. 测试连通性:

    curl -4 -I http://1.1.1.1

总结

推荐使用 策略路由(Policy Routing),兼容所有主流Linux系统,灵活可靠。
若仅需短期修改源IP,可用 iptables SNAT
小规模静态出口可用 静态路由绑定源IP

0

评论区