Route Table与VRF

在 Linux 系统中,支持使用多个 route table(路由表) 是为了增强网络配置的灵活性和功能性。多路由表的主要作用如下:

1. 实现策略路由(Policy Routing)

默认情况下,Linux 使用主路由表(main)中的路由规则来决定流量的转发路径。然而,某些场景下可能需要基于流量的源地址目标地址入接口 等条件来选择不同的路由表。这就是策略路由的核心功能。

  • 示例场景:
    • 流量从不同的网络接口(如 eth0eth1)进来时,需使用不同的网关。
    • 根据源 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 使用另一条路由。

4. 总结

多路由表的主要作用是提供灵活的网络配置能力,适用于以下场景:

  1. 策略路由(基于条件选择路由表)。
  2. 多网关配置(多出口流量管理)。
  3. 解决复杂的网络需求和路由冲突。
  4. 高可用和冗余网络。
  5. 流量隔离(多租户或应用隔离)。
  6. 容器或虚拟化场景下的多网络支持。

5. VRF

在现代网络环境中,使用 VRF(Virtual Routing and Forwarding)确实是更高效和优雅的解决方案。相比通过多路由表和策略路由手动实现复杂的网络需求,VRF 提供了一个更结构化、模块化的方式来隔离和管理流量。以下是关于为什么可以考虑使用 VRF,以及其与传统多路由表方式的比较。

5.1. VRF 与传统多路由表的对比

特性 多路由表 VRF
隔离性 手动配置,通过策略路由(ip rule)实现 天然隔离,每个 VRF 拥有独立的路由表
易用性 复杂,需要维护路由表、策略规则和 NAT 简单,直接将接口加入 VRF
扩展性 随规模增长复杂度上升 面向多租户和大规模网络设计,扩展性强
兼容性 标准 Linux 工具,易于集成 需要 Linux 内核支持 VRF
功能性 功能单一,仅用于流量分离和路由策略 支持更丰富的功能,例如 VRF 间通信