【AlmaLinux】VRFの作成方法

AlmaLinux Linux

AlmaLinuxでのVRF作成メモ

動作環境

  • AlmaLinux release 9.1 (Lime Lynx)

構成

  • AlmaLinuxサーバはインターフェースens192とens224を持つ
  • ens224のみVRF(VRF_TEST)に所属させる
  • vrfを設定したens224でsshdを動作させる

Ethernetインターフェースの設定

ens192

IPアドレス:192.168.0.1/24
デフォルトゲートウェイ:192.168.0.254
IPv6:無効

nmcli connection modify ens192 ipv4.method manual
nmcli connection modify ens192 ipv4.addresses "192.168.0.1/24"
nmcli connection modify ens192 ipv4.gateway "192.168.0.254"

ens224

IPアドレス:172.16.0.1/24
デフォルトゲートウェイ:172.16.0.254
IPv6:無効

nmcli connection modify ens224 ipv4.method manual
nmcli connection modify ens224 ipv4.addresses "172.16.0.1/24"
nmcli connection modify ens224 ipv4.gateway "172.16.0.254"

VRF設定

VRF作成

VRFデバイスを作成して、ルーティングテーブルに割り当てます。
ipv4やipv6についての設定は無効にします。

nmcli connection add type vrf ifname <VRF名> con-name <VRF名> table <テーブル番号> ipv4.method disabled ipv6.method disabled

EX.
VRF_TESTという名前のVRFデバイスを作成して、ルーティングテーブル100に割り当てています。

nmcli connection add type vrf ifname VRF_TEST con-name VRF_TEST table 100 ipv4.method disabled ipv6.method disabled

EthernetをVRFに接続

作成したVRFに対象の物理インターフェースを接続させます。

nmcli connection modify <IF名> master <VRF名>

EX.
end224をVRF_TESTでデバイスに関連付けることで、ens224に関するルーティング情報がルーティングテーブル100に自動的に割り当てられます。

nmcli connection modify ens224 master VRF_TEST

設定の反映

インターフェースを起動しなおすことで、設定が反映されます。

nmcli connection up <IF名>

EX.
ens224を起動しなおして、VRFの設定を反映させます。

nmcli connection up ens224

VRF確認

  • ip -br addr show vrf <VRF名>
    VRFに関連付けられている機器の IP 設定を表示します。

    [root@localhost ~]# ip -br addr show vrf VRF_TEST
    ens224       UP       172.16.0.1/24
  • ip vrf show
    VRFデバイスとルーティングテーブルを表示します。

    [root@localhost ~]# ip vrf show
    Name              Table
    -----------------------
    VRF_TEST           100
  • ip route show
    メインのルーティングテーブルを表示します。

    [root@localhost ~]# ip route show
    default via 192.168.0.254 dev ens192 proto static metric 100
    192.168.0.0/24 dev ens192 proto kernel scope link src 192.168.0.1 metric 100
  • ip route show table <テーブル番号>
    番号を指定したルーティングテーブルを表示します。

    [root@localhost ~]# ip route show table <テーブル番号>
    default via 172.16.0.254 dev ens224 proto static metric 101
    172.16.0.0/24 dev ens224 proto kernel scope link src 172.16.0.1 metric 101

全サービスをVRFでも利用可能にする設定

作成したVRFでも全サービスを利用可能にする設定を行います。

「/etc/sysctl.conf」ファイルに、以下2行を追加します。

  • net.ipv4.tcp_l3mdev_accept=1
  • net.ipv4.udp_l3mdev_accept=1
[root@localhost ~]# vi /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.tcp_l3mdev_accept=1  << 追加
net.ipv4.udp_l3mdev_accept=1  << 追加

設定の反映

# sysctl -p

サービスでVRFを指定する

httpdやsshdなどのサービスを、VRFを指定したインターフェースで使用できるようにします。
前項「全サービスをVRFでも利用可能にする設定」とは異なり、特定のサービスでは特定のVRFのみ利用を可能にする設定です。

現在のサービス設定確認(systemctl cat <サービス>)

サービスの設定がどのようになっているのかを確認します。

[root@localhost ~]# systemctl cat <サービス>
# /usr/lib/systemd/system/XXX.service
[Unit]
After=network.target

[Service]
ExecStart=/usr/sbin/XXX -D $OPTIONS

コマンド実行結果から、以下3つを確認します。

  • 設定ファイルのパス:後で複製するために、使用するため確認します
  • Unit > After :インターフェース起動後に対象のサービスを起動させる必要があります
  • Service > ExecStart:サービス起動時にVRFを指定します。

EX
SSHについて、設定をしていきます。

[root@localhost ~]# systemctl cat sshd
# /usr/lib/systemd/system/sshd.service << 設定ファイルのパス
[Unit]
After=network.target sshd-keygen.target << 設定サービス起動後に起動させる

[Service]
ExecStart=/usr/sbin/sshd -D $OPTIONS << サービス起動時に実行するコマンド

上書きファイル(override.conf)作成

先ほど確認した、設定ファイルを複製します。
設定ファイル名がXXX.serviceであるとき、複製先のフォルダは/etc/systemd/system/XXX.service.dとする。

そして、複製先のファイル名はoverride.confとする。

まずフォルダの作成です。

mkdir -p /etc/systemd/system/XXX.service.d

EX ) sshdの場合

mkdir -p /etc/systemd/system/sshd.service.d/override.conf

次に設定ファイルをファイル名「override.conf」に複製します。

cp <設定ファイルのパス> /etc/systemd/system/XXX.service.d/override.conf

EX ) sshdの場合

cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd.service.d/override.conf

override.conf修正

サービス設定ファイルから複製したoverride.confを修正します。
設定を上書きする際は、必ず初めに設定内容を空白にする必要があります。

追加する設定は以下2つで、それ以外の不要な部分は削除します。

  • Unit > After :network-online.targetを追加
  • Service > ExecStart:"/usr/sbin/ip vrf exec <VRF名>"を=直後に追加
# vi /etc/systemd/system/XXX.service.d/override.conf
[Unit]
After=
After=network-online.target network.target << "network-online.target"を追加

[Service]
ExecStart=
ExecStart=/usr/sbin/ip vrf exec <VRF名> /usr/sbin/XXX -D $OPTIONS << "/usr/sbin/ip vrf exec <VRF名>"を追加

EX ) sshdの場合

# vi /etc/systemd/system/sshd.service.d/override.conf
[Unit]
After=
After=network-online.target network.target

[Service]
ExecStart=
ExecStart=/usr/sbin/ip vrf exec VRF_TEST /usr/sbin/XXX -D $OPTIONS

systemd管理のUnitファイル変更反映

systemdで管理されているUnitファイルを追加修正したため、設定を反映させます。
反映コマンドは以下です。

systemctl daemon-reload

サービスの再起動

Unitファイルの変更が反映できたので、対象サービスの再起動を行います。

systemctl restart <サービス名>

EX ) sshdの場合

systemctl restart sshd

サービスのVRF確認

対象サービスのプロセスID(PID)を確認します。
確認ができたPIDから、関連するVRFを探します。
設定したVRFが表示されれば、設定確認が完了です。

# pidof -c <サービス名>
YYYY << 数字

# ip vrf identify YYYY
<VRF名>

EX
SSHのPIDを確認すると[3396]であることが分かりました。
PIDが[3396]のVRFを確認すると、設定した「VRF_TEST」が表示されたため、正しく設定できていることが確認できました。

# pidof -c ssh
3596

# ip vrf identify 3596
VRF_TEST

参考サイト

RedHat 第41章 分離された VRF ネットワーク内でのサービスの開始
Virtual Routing and Forwarding (VRF)

Follow me!

PAGE TOP
タイトルとURLをコピーしました