NetworkManagerで複数のデフォルトゲートウェイを設定する方法 -keyfile編-

NetworkManagerで複数のデフォルトゲートウェイを設定する方法 -keyfile編- Linuxサーバ

RHELサーバで複数のネットワークインターフェース(NIC)にそれぞれデフォルトゲートウェイを設定する方法について3ステップで解説します。
※下記、図の「デフォルトゲートウェイ(GW)の設定が2つ」の設定を解説


特に、ネットワークインターフェースの設定が「keyfile」形式(RHEL9より採用)の場合、異なるネットワークセグメントに属する複数のインターフェースがあり、それぞれのセグメントを越えて通信を行う場合に非常に重要です。
片方のインターフェースにのみデフォルトゲートウェイを設定すると、もう片方のインターフェースは同セグメント内でしか通信できないという問題が発生します。

「ifcfg-xxx」形式でネットワーク設定する場合はこちらを参照ください。

■サーバAの通信可能なセグメント(範囲)

デフォルトゲートウェイ(GW)の設定が1つ

通信可能:
10.1.1.0/24
172.16.0.0/24
10.10.10.0/24


通信不可:
192.168.1.0/24

デフォルトゲートウェイ(GW)の設定が2つ

通信可能:
10.1.1.0/24
172.16.0.0/24
10.10.10.0/24
192.168.1.0/24

通信不可:
なし




スポンサーリンク

ステップ1.ネットワークインターフェースの設定

それぞれのNICに対して基本的なIP設定を行います。
keyfileでデフォルトゲートウェイの設定を行いません。

※以下の設定では、デフォルトゲートウェイを指定しますが、never-default=trueとなっているため、この段階ではデフォルトゲートウェイは有効になりません。
※「gateway」と「never-default」の行を削除した状態と同様の設定となります。

■enp0s3.nmconnectionの設定

[connection]
id=enp0s3
uuid=YYYYY~
type=ethernet
interface-name=enp0s3

[ipv4]
method=manual
addresses=10.1.1.10/24
gateway=10.1.1.1
never-default=true

/etc/NetworkManager/system-connections/enp0s3.nmconnection

■enp0s8.nmconnectionの設定

[connection]
id=enp0s8
uuid=ZZZZZ~
type=ethernet
interface-name=enp0s8

[ipv4]
method=manual
addresses=10.10.10.10/24
gateway=10.10.10.1
never-default=true

/etc/NetworkManager/system-connections/enp0s8.nmconnection


■keyfileのネットワーク設定ファイルのサンプル




ステップ2.複数のデフォルトゲートウェイを永続的に設定する方法

複数のデフォルトゲートウェイを永続的に設定するために、カスタムスクリプトを作成します。
このスクリプトは、NetworkManagerがインターフェースを有効化した際に自動的に呼び出され、各インターフェースに適切なルーティングルールを設定します。

■ルーティングテーブルの追加
/etc/iproute2/rt_tablesファイルに新しいルーティングテーブルを追加します。

vi /etc/iproute2/rt_tables

以下の行を追加します:

100 rt2
200 rt3



■ルーティングルールのカスタムスクリプトの設定

vi /etc/NetworkManager/dispatcher.d/10-custom-routes.sh

スクリプトの内容:

#!/bin/bash

if [ "$2" == "up" ]; then
    case "$1" in
        enp0s3)
            ip rule add from 10.1.1.0/24 table rt2
            ip route add default via 10.1.1.1 dev enp0s3 table rt2
            ;;
        enp0s8)
            ip rule add from 10.10.10.0/24 table rt3
            ip route add default via 10.10.10.1 dev enp0s8 table rt3
            ;;
    esac
fi

スクリプトに実行権限を付与:

chmod +x /etc/NetworkManager/dispatcher.d/10-custom-routes.sh


「keyfile」形式でのネットワーク設定を実施した場合
「ifcfg-xxx」形式のように「NetworkManager-dispatcher-routing-rules」のインストールは不要です。
また、/etc/sysconfig/network-scripts/配下に「rule-enpXXX」と「route-enpXXX」ファイルを作成してルーティング設定はできません。
※「keyfile」形式ではファイルを読み込みされません。




ステップ3.デフォルトゲートウェイの確認方法

■ip rule listコマンド
現在設定されているルーティングポリシールールを一覧表示します。

ip rule list


■ip route list tableコマンド
特定のルーティングテーブルを表示します。

ip route list table main
ip route list table rt2
ip route list table rt3


■すべてのルーティングテーブルを表示

ip route list table all



---コマンド実行結果---


「netstat -rn」コマンドでは、main(ip rule listコマンドで確認)のルーティングテーブルのみが表示されます。
ポリシールーティングを使用している場合は、必ず「ip rule list」と「ip route list table」コマンドを使用してルーティングの確認を行ってください。




まとめ

以上の手順で、keyfile形式で設定された複数のネットワークインターフェースを持つRHELサーバに対して、各インターフェースにデフォルトゲートウェイを設定する方法を説明しました。

カスタムスクリプトを使用したポリシールーティングの設定により、柔軟なルーティングを実現し、ネットワークの冗長性と効率性を向上させることができます。

設定の際には、適切なルーティングルールを適用し、必要に応じて永続化することを忘れずに行ってください。

■まとめポイント

  1. 今回の設定方法は、RHEL9より採用された「keyfile」のネットワーク設定で有効

  2. 永続的に複数のデフォルトゲートウェイを設定する場合は
    「rt_tables」ファイルと「/etc/NetworkManager/dispatcher.d/10-custom-routes.sh」のスクリプトを利用してルーティング設定を定義する

    ※「ifcfg-XXX」でネットワーク設定するときとルーティング設定方法は異なる

  3. never-default=trueとするとkeyfileに「gateway」設定をしても有効にならない

  4. NetworkManager-dispatcher-routing-rulesパッケージのインストールは不要
    ※「ifcfg-XXX」でネットワーク設定するときは必要

コメント

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