Route Table与VRF
在 Linux 系统中,支持使用多个 route table(路由表) 是为了增强网络配置的灵活性和功能性。多路由表的主要作用如下:
1. 实现策略路由(Policy Routing)
默认情况下,Linux 使用主路由表(main)中的路由规则来决定流量的转发路径。然而,某些场景下可能需要基于流量的源地址、目标地址、入接口 等条件来选择不同的路由表。这就是策略路由的核心功能。
- 示例场景:
- 流量从不同的网络接口(如
eth0和eth1)进来时,需使用不同的网关。 - 根据源 IP 地址选择不同的路由路径。
配置示例:
- 流量从不同的网络接口(如
# 定义一个新的路由表
echo "200 custom_table" >> /etc/iproute2/rt_tables
# 向该路由表添加路由
ip route add 192.168.1.0/24 dev eth1 table custom_table
# 定义策略:源地址 192.168.1.100 的流量使用 custom_table
ip rule add from 192.168.1.100 table custom_table`
2. 实现多网关配置
多路由表常用于多网关场景下的流量分配。例如,当一台服务器有多个网卡连接到不同的 ISP,且希望不同网卡使用各自的网关时,可以借助多路由表实现。
- 示例场景:
- 一个网卡连接到 ISP1,另一个网卡连接到 ISP2。
- 内部流量从 ISP1 出,外部流量从 ISP2 出。
配置示例:
# 为 ISP1 创建路由表
echo "201 isp1_table" >> /etc/iproute2/rt_tables
ip route add default via 192.168.1.1 dev eth0 table isp1_table
# 为 ISP2 创建路由表
echo "202 isp2_table" >> /etc/iproute2/rt_tables
ip route add default via 10.0.0.1 dev eth1 table isp2_table
# 定义规则:源地址 192.168.1.0/24 使用 ISP1
ip rule add from 192.168.1.0/24 table isp1_table
# 定义规则:源地址 10.0.0.0/24 使用 ISP2
ip rule add from 10.0.0.0/24 table isp2_table
3. 解决路由冲突和复杂网络需求
在某些复杂网络环境中,不同的子网可能需要不同的路由规则。如果使用单一的主路由表,配置会非常复杂甚至不可行。使用多路由表可以将不同的路由需求分开管理,降低复杂性。
- 示例场景:
- 公司网络中,VPN 流量、内网流量、公网流量需要分开走不同的路由。
3.1. 支持高可用和冗余(Failover)
通过多个路由表,可以为不同的网络接口设置备用路由路径。当某个接口失效时,策略路由可以自动切换到备用路由表,以实现高可用性。
- 示例场景:
- 两条物理线路,一条为主线路,另一条为备用线路。
- 使用
ip rule和监控脚本实现线路的自动切换。
3.2. 实现流量隔离**
多路由表可以帮助隔离流量。例如,在多租户系统中,每个租户可能有自己的网络配置,流量需要单独路由而不影响其他租户。
- 示例场景:
- 每个租户有独立的网段和网关,需通过不同的路由表管理其流量。
3.3. 支持容器和虚拟机的多网络配置**
对于运行容器或虚拟机的主机,可能需要根据虚拟机或容器的网络配置选择不同的路由路径。多路由表可以用来管理不同的网络环境。
- 示例场景:
- Docker 容器通过
docker0使用默认路由,KVM 虚拟机通过br0使用另一条路由。
- Docker 容器通过
4. 总结
多路由表的主要作用是提供灵活的网络配置能力,适用于以下场景:
- 策略路由(基于条件选择路由表)。
- 多网关配置(多出口流量管理)。
- 解决复杂的网络需求和路由冲突。
- 高可用和冗余网络。
- 流量隔离(多租户或应用隔离)。
- 容器或虚拟化场景下的多网络支持。
5. VRF
在现代网络环境中,使用 VRF(Virtual Routing and Forwarding)确实是更高效和优雅的解决方案。相比通过多路由表和策略路由手动实现复杂的网络需求,VRF 提供了一个更结构化、模块化的方式来隔离和管理流量。以下是关于为什么可以考虑使用 VRF,以及其与传统多路由表方式的比较。
5.1. VRF 与传统多路由表的对比
| 特性 | 多路由表 | VRF |
|---|---|---|
| 隔离性 | 手动配置,通过策略路由(ip rule)实现 |
天然隔离,每个 VRF 拥有独立的路由表 |
| 易用性 | 复杂,需要维护路由表、策略规则和 NAT | 简单,直接将接口加入 VRF |
| 扩展性 | 随规模增长复杂度上升 | 面向多租户和大规模网络设计,扩展性强 |
| 兼容性 | 标准 Linux 工具,易于集成 | 需要 Linux 内核支持 VRF |
| 功能性 | 功能单一,仅用于流量分离和路由策略 | 支持更丰富的功能,例如 VRF 间通信 |