在日常使用 Linux 系统时,我们通常只连接一个网络(比如家庭宽带),系统会自动配置一条默认路由,所有流量都通过这个出口发送。但如果你的服务器或电脑同时连接了多个网络(例如:一个内网、一个外网;或者两个不同运营商的宽带),你就需要更灵活的控制——让某些流量走 A 网关,另一些走 B 网关。这时候,Linux 策略路由就派上用场了。
什么是策略路由?
传统的路由表(主路由表)只能根据目标地址决定下一跳。而策略路由允许你根据源 IP 地址、入接口、防火墙标记等条件,选择不同的路由表进行转发。这使得一台机器可以同时拥有多个“逻辑路由器”。
核心组件:ip rule、ip route 和路由表
在 Linux 中,策略路由主要通过以下三个命令和概念实现:
ip rule:定义规则,决定何时使用哪个路由表。ip route:管理具体路由表中的路由条目。- 自定义路由表:除了默认的 main 表(编号 254),你可以创建新的路由表(如 table 100、table 200)。
实战案例:双网卡双出口配置
假设你的 Linux 主机有两个网卡:
eth0:IP 为 192.168.1.100,网关 192.168.1.1(联通线路)eth2:IP 为 10.0.0.100,网关 10.0.0.1(电信线路)
目标:从 192.168.1.100 发出的流量走联通网关,从 10.0.0.100 发出的流量走电信网关。
步骤 1:创建自定义路由表
编辑 /etc/iproute2/rt_tables 文件,添加两个新表:
# echo "100 liantong" >> /etc/iproute2/rt_tables# echo "200 dianxin" >> /etc/iproute2/rt_tables
步骤 2:为每个表添加默认路由
# ip route add default via 192.168.1.1 dev eth0 table liantong# ip route add default via 10.0.0.1 dev eth2 table dianxin
步骤 3:添加策略规则
告诉系统:当源 IP 是 192.168.1.100 时,使用 liantong 表;源 IP 是 10.0.0.100 时,使用 dianxin 表。
# ip rule add from 192.168.1.100 table liantong# ip rule add from 10.0.0.100 table dianxin
步骤 4:验证配置
查看规则:
# ip rule show0: from all lookup local32764: from 10.0.0.100 lookup dianxin32765: from 192.168.1.100 lookup liantong32766: from all lookup main32767: from all lookup default
测试连通性(可选):
# ping -I 192.168.1.100 8.8.8.8 # 应走联通线路# ping -I 10.0.0.100 8.8.8.8 # 应走电信线路
持久化配置
上述命令重启后会失效。要永久生效,可将命令写入启动脚本(如 /etc/rc.local)或使用 NetworkManager、systemd-networkd 等工具配置。
常见应用场景
- 企业服务器双 ISP 出口,实现负载均衡或故障切换
- 虚拟机或容器需要独立的网络路径
- 基于用户或应用的流量分流(配合 iptables MARK)
总结
Linux策略路由是实现复杂网络拓扑的关键技术。通过 ip rule 和自定义路由表,你可以精细控制数据包的走向。无论是搭建网络多出口环境,还是进行高级网络实验,掌握这一技能都至关重要。希望本教程能帮助你轻松入门!
关键词提示:本文涉及的核心 SEO 关键词包括:Linux策略路由、网络多出口、ip rule、高级路由配置。

