Linux网络:Virtual Routing and Forwarding (VRF)

Posted rtoax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux网络:Virtual Routing and Forwarding (VRF)相关的知识,希望对你有一定的参考价值。

目录

Virtual Routing and Forwarding (VRF)

VRF安装

VRF示例

进程绑定VRF

VRF操作

创建VRF

查询VRF列表

添加网卡到VRF

查询VRF邻接表和路由

从VRF中删除网卡

参考


Virtual Routing and Forwarding (VRF)

Linux内核的Virtual Routing and Forwarding (VRF) 是由路由表和一组网络设备组成的路由实例。

VRF安装

Ubuntu默认不包括vrf内核模块,需要额外安装:

apt-get install linux-headers-4.10.0-14-generic linux-image-extra-4.10.0-14-generic
reboot
apt-get install linux-image-extra-$(uname -r)
modprobe vrf

VRF示例

# create vrf device
ip link add vrf-blue type vrf table 10
ip link set dev vrf-blue up

# An l3mdev FIB rule directs lookups to the table associated with the device.
# A single l3mdev rule is sufficient for all VRFs.
# Prior to the v4.8 kernel iif and oif rules are needed for each VRF device:
ip ru add oif vrf-blue table 10
ip ru add iif vrf-blue table 10

#Set the default route for the table (and hence default route for the VRF).
ip route add table 10 unreachable default

# Enslave L3 interfaces to a VRF device.
# Local and connected routes for enslaved devices are automatically moved to
# the table associated with VRF device. Any additional routes depending on
# the enslaved device are dropped and will need to be reinserted to the VRF
# FIB table following the enslavement.
ip link set dev eth1 master vrf-blue

# The IPv6 sysctl option keep_addr_on_down can be enabled to keep IPv6 global
# addresses as VRF enslavement changes.
sysctl -w net.ipv6.conf.all.keep_addr_on_down=1

# Additional VRF routes are added to associated table.
ip route add table 10 ...

进程绑定VRF

Linux进程可以通过在VRF设备上监听socket来绑定VRF:

setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, dev, strlen(dev)+1);

TCP & UDP services running in the default VRF context (ie., not bound to any VRF device) can work across all VRF domains by enabling the tcp_l3mdev_accept and udp_l3mdev_accept sysctl options:

sysctl -w net.ipv4.tcp_l3mdev_accept=1
sysctl -w net.ipv4.udp_l3mdev_accept=1

VRF操作

创建VRF

ip link add dev NAME type vrf table ID

查询VRF列表

# ip -d link show type vrf
16: vrf-blue: <NOARP,MASTER,UP,LOWER_UP> mtu 65536 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 9e:9c:8e:7b:32:a4 brd ff:ff:ff:ff:ff:ff promiscuity 0
    vrf table 10 addrgenmode eui64

添加网卡到VRF

ip link set dev eth0 master vrf-blue

查询VRF邻接表和路由

ip neigh show vrf vrf-blue
ip addr show vrf vrf-blue
ip -br addr show vrf vrf-blue
ip route show vrf vrf-blue

从VRF中删除网卡

ip link set dev eth0 nomaster

参考

以上是关于Linux网络:Virtual Routing and Forwarding (VRF)的主要内容,如果未能解决你的问题,请参考以下文章

A Quick Introduction to Linux Policy Routing

LVS:DR模式(Direct Routing)部署实验

HCNA Routing&Switching之vrp远程管理

Virtual Box配置CentOS7网络

使用piranha搭建Linux Virtual Server (LVS)集群环境

每天一个linux命令(53):route命令