らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

CentOS8 で VRF 毎に分割した VLAN を設定する

検証用に CentOS8 へ複数の VLAN を設定し、更に各々の VLAN を異なる VRF へ設定する手順をメモしておきます。

構成図

以下のような構成を作成します。

f:id:sig9:20200503173326p:plain:w400

CentOS8.1.1911、Linux Kernel は 4.18 を利用します。

# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
# uname -a
Linux localhost 4.18.0-147.8.1.el8_1.x86_64 #1 SMP Thu Apr 9 13:49:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

設定

以下を実行します。

ip link add link ens192 name ens192.10 type vlan id 10
ip link add dev vrf10 type vrf table 10
ip link set dev vrf10 up
ip link set dev ens192.10 master vrf10
ip addr add dev ens192.10 10.0.10.1/24
ip link set dev ens192.10 up
ip route add default via 10.0.10.254 table 10

ip link add link ens192 name ens192.20 type vlan id 20
ip link add dev vrf20 type vrf table 20
ip link set dev vrf20 up
ip link set dev ens192.20 master vrf20
ip addr add dev ens192.20 10.0.20.1/24
ip link set dev ens192.20 up
ip route add default via 10.0.20.254 table 20

ip link add link ens192 name ens192.30 type vlan id 30
ip link add dev vrf30 type vrf table 30
ip link set dev vrf30 up
ip link set dev ens192.30 master vrf30
ip addr add dev ens192.30 10.0.30.1/24
ip link set dev ens192.30 up
ip route add default via 10.0.30.254 table 30

VLAN ID の確認

インターフェイスごとの VLAN ID を確認します。

vlan10 (ens192.10)

# ip -d address show ens192.10
3: ens192.10@ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vrf10 state UP group default qlen 1000
    link/ether 00:50:56:be:44:c8 brd ff:ff:ff:ff:ff:ff promiscuity 0
    vlan protocol 802.1Q id 10 <REORDER_HDR>
    vrf_slave table 10 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 10.0.10.1/24 scope global ens192.10
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:febe:44c8/64 scope link
       valid_lft forever preferred_lft forever

vlan20 (ens192.20)

# ip -d address show ens192.20
5: ens192.20@ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vrf20 state UP group default qlen 1000
    link/ether 00:50:56:be:44:c8 brd ff:ff:ff:ff:ff:ff promiscuity 0
    vlan protocol 802.1Q id 20 <REORDER_HDR>
    vrf_slave table 20 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 10.0.20.1/24 scope global ens192.20
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:febe:44c8/64 scope link
       valid_lft forever preferred_lft forever

vlan30 (ens192.30)

# ip -d address show ens192.30
7: ens192.30@ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master vrf30 state UP group default qlen 1000
    link/ether 00:50:56:be:44:c8 brd ff:ff:ff:ff:ff:ff promiscuity 0
    vlan protocol 802.1Q id 30 <REORDER_HDR>
    vrf_slave table 30 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
    inet 10.0.30.1/24 scope global ens192.30
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:febe:44c8/64 scope link
       valid_lft forever preferred_lft forever

ルーティングテーブルの確認

ルーティングテーブルを確認します。 VRF を分離している為、ルーティングテーブルが各々、独立していることが分かります。 一度に VRF のルーティングテーブルを確認する場合は ip route show table all を実行します。

vrf10

# ip route show table 10
broadcast 10.0.10.0 dev ens192.10 proto kernel scope link src 10.0.10.1
10.0.10.0/24 dev ens192.10 proto kernel scope link src 10.0.10.1
local 10.0.10.1 dev ens192.10 proto kernel scope host src 10.0.10.1
broadcast 10.0.10.255 dev ens192.10 proto kernel scope link src 10.0.10.1

vrf20

# ip route show table 20
broadcast 10.0.20.0 dev ens192.20 proto kernel scope link src 10.0.20.1
10.0.20.0/24 dev ens192.20 proto kernel scope link src 10.0.20.1
local 10.0.20.1 dev ens192.20 proto kernel scope host src 10.0.20.1
broadcast 10.0.20.255 dev ens192.20 proto kernel scope link src 10.0.20.1

vrf30

# ip route show table 30
broadcast 10.0.30.0 dev ens192.30 proto kernel scope link src 10.0.30.1
10.0.30.0/24 dev ens192.30 proto kernel scope link src 10.0.30.1
local 10.0.30.1 dev ens192.30 proto kernel scope host src 10.0.30.1
broadcast 10.0.30.255 dev ens192.30 proto kernel scope link src 10.0.30.1

OS 再起動しても設定が維持されるようにする

ip コマンドで設定した内容は OS を再起動すると消えてしまいます。 /etc/rc.d/rc.local へコマンドを追記しておけば OS 起動時に実行されますが、デフォルト状態では権限が不足しており、実行されません。 実行権限を付与します。

chmod u+x /etc/rc.d/rc.local

実行したいコマンド群を追記しておきます。

cat << EOF >> /etc/rc.d/rc.local
ip link add link ens192 name ens192.10 type vlan id 10
ip link add dev vrf10 type vrf table 10
ip link set dev vrf10 up
ip link set dev ens192.10 master vrf10
ip addr add dev ens192.10 10.0.10.1/24
ip link set dev ens192.10 up
ip route add default via 10.0.10.254 table 10

ip link add link ens192 name ens192.20 type vlan id 20
ip link add dev vrf20 type vrf table 20
ip link set dev vrf20 up
ip link set dev ens192.20 master vrf20
ip addr add dev ens192.20 10.0.20.1/24
ip link set dev ens192.20 up
ip route add default via 10.0.20.254 table 20

ip link add link ens192 name ens192.30 type vlan id 30
ip link add dev vrf30 type vrf table 30
ip link set dev vrf30 up
ip link set dev ens192.30 master vrf30
ip addr add dev ens192.30 10.0.30.1/24
ip link set dev ens192.30 up
ip route add default via 10.0.30.254 table 30
EOF

これで OS を再起動しても ip コマンドで設定した内容が維持されるようになります。