Linux VRF 的概念与实际操作介绍

首先,怎么去理解 Linux VRF(Virtual Routing and Forwarding,虚拟路由转发)的概念,是个比较麻烦的事。
VRF 在网络领域是个很常见的术语,它主要用来实现不同VPN的路由隔离。每个VRF都有相对独立的路由表和LFIB(Label Forwarding Information Base,标签转发信息库),确保VPN数据的独立性和安全性。
Linux VRF 的概念和网络概念类似,Linux VRF 实现了对三层的网络协议栈的虚拟,我们可以通过在同一台主机上通过 VRF 来同时使用和管理多个路由表,每个 VRF 的路由表独立且互相隔离流量,这个与 VLAN 类似,只不过 VLAN 是在二层对网络进行了隔离。

Linux VRF 包括了哪些内容呢,通俗点来说主要有两个部分,包括IP路由表、与VRF关联的网卡接口组成。Linux VRF设备与路由表一起创建,然后再配置特定网络接口被 VRF 所纳管。

有两种方式来可以用来创建 VRF,这里先介绍一下如何通过 NetworkManager 实现Linux VRF的创建和使用。
建议在Linux kernel 4.8版本以上再使用VRF功能。
VRF 的配置与使用
NetworkManager 1.24版本开始支持VRF,首先我们要先检查一下NetworkManager版本。
[root@node01 ~]# nmcli -v
nmcli tool, version 1.40.0-1.el9
创建 vrf0,并指定附加到路由表100:
$ nmcli connection add type vrf ifname vrf0 con-name vrf0 table 100 ipv4.method disabled ipv6.method disabled
Connection 'vrf0' (c282f76d-ede8-4801-bbff-189de76005ba) successfully added.
向 vrf0 连接添加 enp0s8 网卡设备,并配置网关、 IP地址:
$ nmcli connection add type ethernet con-name enp0s8 ifname enp0s8 master vrf0 ipv4.method manual ipv4.address 10.1.1.2/24 ipv4.gateway 10.1.1.1
激活连接:
$ nmcli connection up enp0s8
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
好,检查一下与 vrf0 关联的网卡与IP地址:
$ ip -br addr show vrf vrf0
enp0s8 UP 10.1.1.2/24 fe80::26de:6f3a:9ab7:f83e/64
显示 VRF 设备列表及其关联的路由表:
$ ip vrf show
Name Table
---
vrf0 100
显示路由表 100 的路由信息 :
$ ip route show table 100
default via 10.1.1.1 dev enp0s8 proto static metric 101
10.1.1.0/24 dev enp0s8 proto kernel scope link src 10.1.1.2 metric 101
local 10.1.1.2 dev enp0s8 proto kernel scope host src 10.1.1.2
broadcast 10.1.1.255 dev enp0s8 proto kernel scope link src 10.1.1.2
可以看到在这个路由表里面 10.1.1.1 是默认网关,和操作系统的主路由表是不一样的。
最后,可以在隔离的 VRF 网络内启动应用服务,这里使用ncat简单模拟一下:
$ ip vrf exec vrf0 ncat -l 8080
检查与 vrf0 关联的应用进程:
[root@node01 ~]# ip vrf pids vrf0
1156 ncat
最后提一下,除了NetworkManager之外,我们还可以使用通用的 iproute2 来创建和使用VRF功能
相关推荐
-
「PHP」MVC框架是什么?为什么要用它2025-02-25 00:25:41
-
如何用PHP写一个比较安全的API系统(实现)2025-02-25 00:19:49
-
php 解析url获取相关信息2025-02-25 00:15:37
-
mysql命令总结和PyMysql2025-02-25 00:11:35
-
MySQL特性:深入理解ICP2025-02-25 00:11:07