VRF
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