静态路由

如果您不需要动态路由协议(如 BGPOSPF)的复杂性,或者您的路由不经常更改,并且目的地只有一个或两个路径,则可以使用静态路由。

使用静态路由,您可以手动配置交换机,以将具有特定目标前缀的流量发送到特定的下一跳。当交换机收到数据包时,它会在路由表中查找目标 IP 地址,并相应地转发数据包。

配置静态路由

Cumulus Linux 将静态路由添加到 FRR 路由表,然后再添加到内核路由表。

以下示例命令配置 Cumulus Linux,以将目标前缀为 10.10.10.101/32 的流量通过 swp51 (10.0.1.1/31) 发送到下一跳 10.0.1.0。

cumulus@leaf01:~$ nv set interface swp1 ip address 10.0.1.1/31
cumulus@leaf01:~$ nv set vrf default router static 10.10.10.101/32 via 10.0.1.0
cumulus@leaf01:~$ nv config apply

编辑 /etc/network/interfaces 文件,为交换机上发送流量的接口配置 IP 地址。例如

cumulus@leaf01:~$ sudo nano /etc/network/interfaces
...
auto swp51
iface swp51
    address 10.0.1.1/31
...

运行 vtysh 命令来配置静态路由(目标前缀和下一跳)。例如

cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# ip route 10.10.10.101/32 10.0.1.0
leaf01(config)# exit
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

vtysh 命令将静态路由配置保存在 /etc/frr/frr.conf 文件中。例如

...
!
ip route 10.10.10.101/32 10.0.1.0
!
...

以下示例命令配置 Cumulus Linux,以将目标前缀为 10.10.10.61/32 的流量通过 vrf BLUE 中的 swp3 (10.0.0.32/31) 发送到下一跳 10.0.0.33。

cumulus@border01:~$ nv set interface swp3 ip address 10.0.0.32/31
cumulus@border01:~$ nv set interface swp3 ip vrf BLUE
cumulus@border01:~$ nv set vrf BLUE router static 10.10.10.61/32 via 10.0.0.33
cumulus@border01:~$ nv config apply

编辑 /etc/network/interfaces 文件,为交换机上发送流量的接口配置 IP 地址。例如

cumulus@border01:~$ sudo nano /etc/network/interfaces
...
auto swp3
iface swp3
    address 10.0.0.32/31
    vrf BLUE
...

运行 vtysh 命令来配置静态路由(目标前缀和下一跳)。例如

cumulus@border01:~$ sudo vtysh

border01# configure terminal
border01(config)# vrf BLUE
border01(config-vrf)# ip route 10.10.10.61/32 10.0.0.33
border01(config-vrf)# end
border01# write memory
border01# exit
cumulus@border01:mgmt:~$ 

vtysh 命令将静态路由配置保存在 /etc/frr/frr.conf 文件中。例如

...
vrf BLUE
 ip route 10.10.10.61/32 10.0.0.33
...

要删除静态路由

cumulus@leaf01:~$ nv unset vrf default router static 10.10.10.101/32 via 10.0.1.0
cumulus@leaf01:~$ nv config apply
cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# no ip route 10.10.10.101/32 10.0.1.0
leaf01(config)# exit
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

要查看静态路由,请运行 vtysh show ip route 命令。例如

cumulus@leaf01:mgmt:~$ sudo vtysh
leaf01# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued route, r - rejected route

S>* 10.10.10.101/32 [1/0] via 10.0.1.0, swp51, weight 1, 00:02:07

您还可以通过将路由添加到交换机端口配置来创建静态路由。例如

Cumulus Linux 不为此配置提供 NVUE 命令。

编辑 /etc/network/interfaces 文件,并将以下 post-uppost-down 行添加到接口节中

cumulus@leaf01:~$  sudo nano /etc/network/interfaces
...
auto swp51
iface swp51
    address 10.0.1.1/31
    post-up ip route add 10.10.10.101/32 via 10.0.1.0
    post-down ip route del 10.10.10.101/32 via 10.0.1.0

ip route 命令允许您直接从 Linux shell 操作内核路由表。有关详细信息,请参阅 man ip(8)FRR 监控内核路由表更改,并相应地更新自己的路由表。

配置网关或默认路由

在每台交换机上,考虑为目的地为交换机子网或本地网络之外的流量创建网关默认路由。所有此类流量都通过网关,网关是同一网络上的系统,用于将数据包路由到本地网络之外的目的地。

以下示例配置默认路由 0.0.0.0/0,这表示您可以将任何 IP 地址发送到网关。网关是另一台 IP 地址为 10.0.1.0 的交换机。

cumulus@leaf01:~$ nv set vrf default router static 0.0.0.0/0 via 10.0.1.0
cumulus@leaf01:~$ nv config apply

您可以指定 defaultdefault6 来代替 0.0.0.0/0。

cumulus@leaf01:~$ sudo vtysh

leaf01# configure terminal
leaf01(config)# ip route 0.0.0.0/0 10.0.1.0
leaf01(config)# exit
leaf01# write memory
leaf01# exit
cumulus@leaf01:~$

vtysh 命令将配置保存在 /etc/frr/frr.conf 文件中。例如

...
!
ip route 0.0.0.0/0 10.0.1.0
!
...

ifupdown2 中由 gateway 参数创建的默认路由不会安装在 FRR 中,也不会重新分发到其他路由协议中。有关更多信息,请参阅ifupdown2 和网关参数

注意事项

通过 Linux Shell 删除路由

为避免错误的路由,请勿使用 Linux shell 删除您使用 vtysh 命令添加的静态路由。请使用 vtysh 命令删除路由。

IPv4 和 IPv6 邻居缓存老化计时器

Cumulus Linux 不支持为 IPv4 和 IPv6 设置不同的邻居缓存老化计时器设置。

/etc/sysctl.d/neigh.conf 文件中的 net.ipv4.neigh.default.base_reachable_time_msnet.ipv6.neigh.default.base_reachable_time_ms 设置必须具有相同的值

cumulus@leaf01:~$ sudo cat /etc/sysctl.d/neigh.conf
...
net.ipv4.neigh.default.base_reachable_time_ms=1080000
net.ipv6.neigh.default.base_reachable_time_ms=1080000
...