管理 VRF
管理 VRF 是 虚拟路由和转发 - VRF(虚拟路由表和转发)的一个子集,并在带外管理网络和带内数据平面网络之间提供隔离。 对于 VRF,主 路由表是数据平面交换机端口的默认表。 使用管理 VRF,交换机使用第二个表 mgmt,用于通过交换机的以太网端口进行路由。 mgmt 名称是专门用于从数据平面 VRF 识别管理 VRF。
Cumulus Linux 仅支持 eth0(或 eth1,具体取决于交换机平台)用于带外管理。 以太网端口是纯软件端口,不由 switchd
进行硬件加速。 VLAN 子接口、绑定、网桥和前面板交换机端口不支持作为 OOB 管理接口。
可以使用环回口和 SVI(交换机虚拟接口)对 Cumulus Linux 进行带内管理。
Cumulus Linux 默认启用管理 VRF。 默认情况下,管理员运行的 IPv4 和 IPv6 网络应用程序(例如,Ansible、Chef 和 apt-get
)通过管理网络进行通信。 此默认上下文不会影响通过 systemd
和 systemctl
命令运行的服务,也不会影响检查交换机状态的命令,例如列出链路、邻居或路由的 ip
命令。
本节中的管理 VRF 配置包含 127.0.0.1/8 的本地主机环回 IPv4 地址和 ::1/128 的 IPv6 地址。 管理 VRF 必须同时具有 IPv6 地址和 IPv4 地址才能正常工作。 将环回地址添加到管理 VRF 的第 3 层域可防止应用程序出现问题,这些应用程序期望环回 IP 地址存在于 VRF 中,例如 NTP。
启动管理 VRF
如果您使用 ifdown
关闭管理 VRF,要将其重新启动,您需要执行以下两项操作之一
- 运行
ifup --with-depends mgmt
命令 - 运行
ifreload -a
命令
以下命令示例关闭管理 VRF,然后使用 ifup --with-depends mgmt
命令将其重新启动
cumulus@switch:~$ sudo ifdown mgmt
cumulus@switch:~$ sudo ifup --with-depends mgmt
运行 ifreload -a
会断开配置为自动的任何接口的会话。
在管理 VRF 中运行服务
Cumulus Linux 中的大多数默认服务都支持 VRF。 如果您想在管理 VRF 而不是默认 VRF 中运行服务,请运行以下命令
如果服务正在运行,请停止该服务
cumulus@switch:~$ sudo systemctl stop <service>.service
禁止该服务在默认 VRF 中自动启动
cumulus@switch:~$ sudo systemctl disable <service>.service
在管理 VRF 中启动服务
cumulus@switch:~$ sudo systemctl start <service>@mgmt.service
在管理 VRF 中启用该服务,以便在交换机启动时启动
cumulus@switch:~$ sudo systemctl enable <service>@mgmt.service
使用
ps aux | grep <service>
命令验证该服务是否在管理 VRF 中运行。
运行以下命令以显示与管理 VRF 关联的进程 ID
cumulus@switch:~$ ip vrf pids mgmt
2559 login
2753 bash
2045 dhclient
5421 sshd
5462 sshd
5463 bash
37691 sshd
37732 sshd
37735 bash
55679 sshd
55720 sshd
55721 bash
55993 ip
3834 ntpd
2023 python3
2563 netqd
1855 login
2770 bash
运行以下命令以显示指定进程的 VRF 关联
cumulus@switch:~$ ip vrf identify 2045
mgmt
运行 ip vrf help
以获取其他 ip vrf
命令。
在管理 VRF 中使用 snmpd 启用轮询
当您启用 snmpd
在管理 VRF 中运行时,您需要指定该 VRF,以便 snmpd
在管理 VRF 中的 eth0 上侦听; 您还可以配置 snmpd
在其他端口上侦听。 在 Cumulus Linux 中,SNMP 配置支持 VRF,因此 snmpd
可以绑定到配置有特定 VRF(路由表)的多个 IP 地址。 snmpd
守护程序响应传入请求的 VRF 接口上的轮询请求。 有关配置 SNMP 版本 1、2c 和 3 Trap 以及 (v3) Inform 消息的信息,请参阅 简单网络管理协议 - SNMP。
在管理 VRF 中启动 snmpd
后,会显示消息 Duplicate IPv4 address detected, some interfaces may not be visible in IP-MIB
。 这是因为 IP-MIB 假设您不能在同一设备上两次使用相同的 IP 地址; IP-MIB 不支持 VRF。 此消息是警告 SNMP IP-MIB 检测到系统上重叠的 IP 地址; 它不表示存在问题,也不会影响交换机的运行。
在管理 VRF 上 ping 或 traceroute
默认情况下,当您发出 ping
或 traceroute
时,数据包会转到数据平面网络(主路由表)。 要在管理网络上使用 ping
或 traceroute
,请使用 ping -I mgmt
或 traceroute -i mgmt
。 要选择管理 VRF 中的源地址,请对 traceroute
使用 -s
标志。
cumulus@switch:~$ ping -I mgmt <destination-ip>
cumulus@switch:~$ sudo traceroute -i mgmt -s <source-ip> <destination-ip>
有关使用 ping
和 traceroute
的更多信息,请参阅 网络故障排除。
以非 root 用户身份运行服务
要以非 root 用户身份在管理 VRF 中运行服务,您需要基于原始服务文件创建自定义服务。 以下示例命令将 SSH 服务配置为以非 root 用户身份在管理 VRF 中运行。
运行以下命令以在
/etc/systemd/system
目录中创建自定义服务文件。cumulus@switch:~$ sudo -E systemctl edit --full ssh.service
如果 [Service] 下存在 User 指令,请将其注释掉。
cumulus@switch:~$ sudo nano /etc/systemd/system/ssh.service ... [Service] #User=username ExecStart=/usr/local/bin/ssh agent -data-dir=/tmp/ssh -bind=192.168.0.11 ...
修改 ExecStart 行为
/usr/bin/ip vrf exec mgmt /sbin/runuser -u USER -- ssh
... [Service] #User=username ExecStart=/usr/bin/ip vrf exec mgmt /sbin/runuser -u cumulus -- ssh ...
OSPF 和 BGP
FRR 支持 VRF,并根据交换机端口路由表发送数据包。 这包括通过环回接口的 BGP 对等互连。 BGP 在默认表中查找路由。 但是,根据您重新分发路由的方式,您可以执行以下修改。
管理 VRF 使用 mgmt 表,包括本地路由。 当您使用路由协议(例如 OSPF 和 BGP)时,这不会影响路由重分发。
要在您的网络中重新分发路由,请在 BGP 或 OSPF 下使用 redistribute connected
命令。 这使 eth0 的直接连接网络能够通告到其邻居。
这还在邻居设备上创建一条通过数据平面到管理网络的路由。
NVIDIA 建议使用路由映射来控制您使用 redistribute connected
命令重新分发的通告网络。
cumulus@switch:~$ nv set router policy route-map REDISTRIBUTE rule 10 match type ipv4
cumulus@switch:~$ nv set router policy route-map REDISTRIBUTE rule 10 match interface eth0
cumulus@switch:~$ nv set router policy route-map REDISTRIBUTE rule 10 action deny
cumulus@switch:~$ nv set vrf default router bgp address-family ipv4-unicast redistribute connected route-map REDISTRIBUTE
cumulus@switch:~$ nv config apply
cumulus@switch:$ sudo vtysh
...
switch# configure terminal
switch(config)# route-map REDISTRIBUTE-CONNECTED deny 10
switch(config-route-map)# match interface eth0
switch(config)# route-map REDISTRIBUTE-CONNECTED permit 100
switch(config-route-map)# exit
switch(config)# router bgp
switch(config-router)# address-family ipv4 unicast
switch((config-router-af)# redistribute connected route-map REDISTRIBUTE-CONNECTED
switch(config)# end
switch# write memory
switch# exit
vtysh 命令将配置保存在 /etc/frr/frr.conf
文件中。 例如
...
router bgp 65101
bgp router-id 10.10.10.1
neighbor swp51 interface remote-as external
neighbor swp52 interface remote-as external
!
address-family ipv4 unicast
network 10.1.10.0/24
network 10.10.10.1/32
redistribute connected route-map REDISTRIBUTE-CONNECTED
maximum-paths 64
maximum-paths ibgp 64
exit-address-family
!
route-map REDISTRIBUTE-CONNECTED deny 100
match interface eth0
!
route-map REDISTRIBUTE-CONNECTED permit 1000
...
SSH
要限制 SSH 仅在管理 VRF 上或管理 VRF 上的特定 IP 地址上侦听,请参阅 SSH 和 VRF。
如果您通过交换机端口 SSH 连接到交换机,则 SSH 按预期工作。 如果您需要从交换机通过交换机端口 SSH 连接出去,请使用
ip vrf exec default ssh <switch-port-ip-address>
命令。 例如cumulus@switch:~$ sudo ip vrf exec default ssh 10.3.3.3
查看路由表
当您使用 ip route get
返回有关单个路由的信息时,该命令默认通过 mgmt 表解析。 要显示有关交换芯片中路由的信息,请运行此命令
cumulus@switch:~$ ip route get <ip-address>
要获取任何 VRF 的路由,请运行 ip route get <ip-address> oif <vrf-name>
命令。 例如,要显示管理 VRF 的路由,请运行
cumulus@switch:~$ ip route get <ip-address> oif mgmt
mgmt 接口类
ifupdown2
使用 接口类 来为接口创建用户定义的分组。 特殊类 mgmt 可用于将交换机的管理接口与数据接口分开。 这允许您默认情况下使用 ifupdown2
命令管理数据接口。 对 mgmt 接口执行操作需要指定 --allow-mgmt
选项,这可以防止管理接口上发生意外中断。 默认情况下,Cumulus Linux 会在交换机启动时启动 auto(默认)类和 mgmt 接口类中的所有接口。
您可以在 /etc/network/interfaces
文件中配置管理接口。 以下示例将管理接口 eth0 和管理 VRF 节添加到 mgmt 接口类
...
auto lo
iface lo inet loopback
allow-mgmt eth0
iface eth0 inet dhcp
vrf mgmt
allow-mgmt mgmt
iface mgmt
address 127.0.0.1/8
address ::1/128
vrf-table auto
...
当您对 mgmt 类中的接口运行 ifupdown2
命令时,请在命令中包含 --allow=mgmt
。 例如,要查看哪些接口在 mgmt 接口类中,请运行
cumulus@switch:~$ ifquery l --allow=mgmt
eth0
mgmt
要重新加载 mgmt 类中接口的配置,请运行
cumulus@switch:~$ sudo ifreload --allow=mgmt
您仍然可以使用 ifup eth0
和 ifdown eth0
启动和关闭管理接口。
管理 VRF 和 DNS
Cumulus Linux 通过 IP FIB 规则支持通过管理 VRF 的 DHCP 和静态 DNS 条目,它添加这些规则以将查找定向到管理 VRF 的 DNS 地址。
为了让 DNS 使用管理 VRF,静态 DNS 条目必须在 /etc/resolv.conf
文件中引用管理 VRF。 您不能两次指定相同的 DNS 服务器地址以将其与不同的 VRF 关联。
例如,要指定 DNS 服务器并将其中一些服务器与管理 VRF 关联,请运行以下命令
cumulus@switch:~$ nv set service dns default server 192.0.2.1
cumulus@switch:~$ nv set service dns mgmt server 198.51.100.31
cumulus@switch:~$ nv set service dns mgmt server 203.0.113.13
cumulus@switch:~$ nv config apply
编辑 /etc/resolv.conf
文件以添加 DNS 服务器并将其中一些服务器与管理 VRF 关联。 例如
cumulus@switch:~$ sudo nano /etc/resolv.conf
nameserver 192.0.2.1
nameserver 198.51.100.31 # vrf mgmt
nameserver 203.0.113.13 # vrf mgmt
运行 ifreload -a
命令以加载新配置
cumulus@switch:~$ ifreload -a
- 由于 FIB 规则强制 DNS 查找通过管理接口进行,因此如果您使用重叠地址,这可能会影响数据平面端口。 例如,当交换机通过管理 VRF 学习 DNS 服务器 IP 地址时,它会为该 IP 地址创建 FIB 规则。 当 DHCP 中继具有相同的 IP 地址时,即使前面板端口上存在路由,交换机也会将到达前面板端口的任何 DHCP 发现数据包转发到管理接口 (eth0) 之外。
- 如果您未指定 DNS 服务器并且您丢失了带内连接,则 DNS 将无法通过管理 VRF 工作。 Cumulus Linux 不假设所有 DNS 服务器都可以通过管理 VRF 访问。