VRF

来自 阿尔派 Linux

VRF 或虚拟路由和转发 (或可能是虚拟路由功能) 提供了路由表的虚拟化。它们对于隔离服务和整个网络非常有用,同时避免了网络命名空间的复杂性。

前提条件

要使用 VRF,您需要安装 `iproute2` 和能够使用 eBPF 的内核。内核 5.4.19-r1 及更高版本能够使用 eBPF。

VRF 创建

定义 VRF 最简单的方法是将它们添加到 /etc/network/interfaces

auto vrf-mgmt
iface vrf-mgmt inet manual
    pre-up ip link add $IFACE type vrf table 42
    up ip link set dev $IFACE up

然后,您可以使用 pre-up 命令将特定接口与 VRF 关联起来

auto eth0
iface eth0 inet static
    address 1.2.3.4
    netmask 255.255.255.0
    pre-up ip link set $IFACE master vrf-mgmt
    up ip route add default table 42 via 1.2.3.1

基于 VRF 的服务隔离

当运行 OpenRC 0.42.1-r4 或更新版本时,服务可以隔离到特定的 VRF。在大多数情况下,您可以在服务的 /etc/conf.d 文件中设置 $vrf 变量来隔离它。

例如,对于 sshd

# echo 'vrf="vrf-mgmt"' >> /etc/conf.d/sshd
# rc-service sshd restart

命名路由表

路由表可以被命名,例如,42 可以被命名为 mgmt,通过编辑 /etc/iproute2/rt_tables 或创建单独的配置 (例如 /etc/iproute2/rt_tables.d/vrf.conf)

示例 vrf.conf

42      mgmt
43      int
44      ext

然后,不必记住 42 用于 mgmt,它可以直接与 ip route 一起使用,例如

# ip route add default table mgmt via 1.2.3.1

在特定 VRF 中运行网络客户端

对于 ping,只需指定一个已绑定到特定 vrf 的本地接口即可

示例

# ping -I eth0 <ip to ping>

对于其他进程,如 apk,我们使用 ip vrf 命令

# ip vrf exec vrf-mgmt apk update