高可用性サーバ(R31Aa,R32Aa)のbond0 LANインターフェースについて、RHEL9.6で認識されているIPアドレスとMACアドレスの対応と、本機と同じサブネットに接続されている端末やNW機器のARPテーブルに記録されるIPアドレスとMACアドレスの対応が異なる場合があるため、その場合にはbond0とは違う管理LANインターフェース(eno1またはeno2)を使用します。
対処方法を示します。(1)から(3)まで、全て実施してください。
(1)パラメータの設定
/etc/sysctl.d 配下にパラメータの設定ファイル (99-arp_parms.conf) を配置後、OSを再起動してください。
99-arp_parms.conf ファイルは、bond0, eno1, eno2 のそれぞれに対して次のパラメータの値を設定します。
パラメータ
|
設定値
|
説明
|
arp_filter
|
1
|
ARP応答の際、IPルーティングテーブルを参照して返信する。
|
arp_announce
|
2
|
ARP送信の際にIPアドレス指定する。
|
arp_ignore
|
0 (デフォルト)
|
ARP応答時のポリシ。
|
(2)bond0のルーティングとルールを追加します。
次のコマンドを全て実行します。
# nmcli connection modify bond0 +ipv4.routes "(サブネットのIPv4アドレス)/(サブネットマスクの’1’(2進数)のビット数) table=3"
# nmcli connection modify bond0 +ipv4.routes "0.0.0.0/0 (GatewayのIPv4アドレス) table=3"
# nmcli connection modify bond0 +ipv4.routing-rules "priority 100 from (bond0のIPv4アドレス) table 3"
(実行例)
# nmcli connection modify bond0 +ipv4.routes “192.168.1.0/24 table=3”
# nmcli connection modify bond0 +ipv4.routes “0.0.0.0/0 192.168.1.254 table=3”
# nmcli connection modify bond0 +ipv4.routing-rules “priority 100 from 192.168.1.10 table 3”
追加したルールは次で確認します。
# ip rule show table 3
(3)定期的に端末やNW機器のARPテーブルを更新するように、ルート権限でスケジュールを設定します。
次の例では 1分毎に設定しています。
# crontab -e
以下の行を追加します。
*/1 * * * * /usr/sbin/arping -U -c 1 -I bond0 (bond0のIPアドレス) >/dev/null 2>&1
bond0以外の10Gbpsのインターフェースをボンディングして通信する場合、別のセグメントを使用することを強く推奨します。
当事象の詳細は、次の通りです。
典型的な端末として管理PCが挙げられますが、管理PCのARPテーブルで次のように表示されたとします。
C:\Windows\System32>arp -a
インターフェース: 192.168.1.2 --- 0x3
インターネット アドレス 物理アドレス 種類
192.168.1.174 00-04-fc-f1-3e-c5 動的
192.168.1.175 00-04-fc-f1-3e-c4 動的
192.168.1.180 00-04-fc-f1-3e-c5 動的
2本のネットワークインターフェースのMACアドレスが同じ値で表示されていますが、RHELからifconfigコマンドで確認するとeno2のMACアドレスであり、bond0のMACアドレスは 00:04:fc:f1:3e:c6 となっています。
# ifconfig
bond0: flags=xxxx <UP,BROADCAST,RUNNING,MULTICAST> mtu 9000
inet 192.168.1.174 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:04:fc:f1:3e:c6
eno1: flags=xxxx <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.179 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:04:fc:f1:3e:c4
eno2: flags=xxxx <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.180 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:04:fc:f1:3e:c5
高可用性サーバ(R31Aa,R32Aa)のLANインターフェースであるbond0, eno1, eno2 は同じネットワークのサブネットに存在することで機能します。bond0はOSインストールのために自動的にコンフィグされており、eno1とeno2は ztC Enduranceコンソールでシステムを管理するために必要なインターフェースです。
RHELはARPリクエストの受信後、受信したインターフェースとは別の同じホストにあるインターフェースで応答することがありますが、このような動作はLinuxのデフォルトの仕様であり、ARP Fluxと呼ばれています。
RHELがARPリクエストを受信後、bond0のIPアドレスにeno2のMACアドレスを返すため、このような状態となることがありますが、問題点としてbond0が10Gbpsの
インターフェースであるにもかかわらず、本機と同じサブネットに接続されている端末
(管理PC)からbond0にアクセスしようとすると、eno2への経路が選択されてしまい1Gbpsの速度となり、性能が低下してしまうことが挙げられます。(それぞれのLANインターフェースの速度は ethtoolコマンドの出力「Speed」で確認できます。)
NW機器(例えばルータ)が接続されている場合、異なるサブネットにある端末との通信に影響を与えることがあります。
対処方法の実施後、RHELのbond0のIPアドレスとMACアドレスの対応が、定期的に端末やNW機器に通知されます。この通知を受けて、端末やNW機器はARPテーブルを更新するようになります。
管理PCのARPテーブルは次のように表示されます。
C:\Windows\System32>arp -a
インターフェース: 192.168.1.2 --- 0x3
インターネット アドレス 物理アドレス 種類
192.168.1.174 00-04-fc-f1-3e-c6 動的
192.168.1.175 00-04-fc-f1-3e-c4 動的
192.168.1.180 00-04-fc-f1-3e-c5 動的