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)