1台のサーバーで複数のネットワークカードを使用して冗長構成などを行う場合、スタティックルーティング設定だけではパケットの経路が定まらない場合があります。この様なケースではポリシーベースルーティング(ルーティングルール)設定を行う必要があるようです。マルチホーミングとも呼ばれています。
以下のようなネットワーク構成を例にCentOSの設定方法を説明します。

それぞれのNICには異なるサブネットの固定IPアドレスが設定されていて、デフォルトゲートウェイが未設定になっていることを前提とします。またL3スイッチにより各VLAN間のルーティングが設定されていることも前提とします。
1. HOST Aにスタティックルーティングを追加
# vi /etc/sysconfig/network-scripts/route-eth0
192.168.102.0/24 via 192.168.101.1 dev eth0
192.168.103.0/24 via 192.168.101.1 dev eth0
# service network restart
# route
------------
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.102.0 192.168.101.1 255.255.255.0 UG 0 0 0 eth0
192.168.101.0 * 255.255.255.0 U 0 0 0 eth0
192.168.103.0 192.168.101.1 255.255.255.0 UG 0 0 0 eth0
ink-local * 255.255.0.0 U 1002 0 0 eth0
------------
2. HOST BにHOST Aへの経路(スタティックルーティング)を追加
# vi /etc/sysconfig/network-scripts/route-eth0
192.168.101.0/24 via 192.168.102.1 dev eth0
# vi /etc/sysconfig/network-scripts/route-eth1
192.168.101.0/24 via 192.168.103.1 dev eth1
# service network restart
経路に問題がある旨のメッセージが出ます。宛先のネットワークが重複しているので一方の経路定義しか有効になりません。
ping結果
HOST A → HOST B (192.168.102.20) OK
HOST A → HOST B (192.168.103.20) NG
3. ルーティングルールの設定
いろいろ調べた結果、ルーティングに条件設定を行う方法が分かりましたので、以下にHOST Bへの設定手順を説明します。
経路テーブルIDの登録
# vi /etc/iproute2/rt_tables
以下の行を追加
200 rule102
201 rule103
ルールファイルの作成
# vi /etc/sysconfig/network-scripts/rule-eth0
from 192.168.102.20 table rule102
「192.168.102.20からの要求があったらrule102に従いなさい」というルールを定義
# vi /etc/sysconfig/network-scripts/rule-eth1
from 192.168.103.20 table rule103
「192.168.103.20からの要求があったらrule103に従いなさい」というルールを定義
ルーティングファイルの修正
# vi /etc/sysconfig/network-scripts/route-eth0
192.168.101.0/24 dev eth0 src 192.168.102.20 table rule102 ...(1)
default via 192.168.102.1 table rule102 ...(2)
(1) 「192.168.101.0/24ゾーンを参照する元ホストがeth0の192.168.102.20だったらrule102に従いなさい」というポリシーを定義
(2) 「rule102のデフォルトゲートウェイは192.168.102.1ですよ」という意味
# vi /etc/sysconfig/network-scripts/route-eth1
192.168.101.0/24 dev eth1 src 192.168.103.20 table rule103
default via 192.168.103.1 table rule103
ネットワークの再起動
# service network restart
エラーが出なければ矛盾は解消されたはずです。
双方のサーバからそれぞれのIPアドレスに対してpingが通れば完了です。
4. まとめ
通常のルーティングテーブルにはルール設定情報は反映されません
# route
------------
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.102.0 * 255.255.255.0 U 0 0 0 eth0
192.168.103.0 * 255.255.255.0 U 0 0 0 eth1
ink-local * 255.255.0.0 U 1002 0 0 eth0
ink-local * 255.255.0.0 U 1003 0 0 eth1
------------
ルーティングルールの確認方法はこちらになります
# ip rule
0: from all lookup local
32764: from 192.168.102.31 lookup rule102
32765: from 192.168.103.31 lookup rule103
32766: from all lookup main
32767: from all lookup default
# ip route show rule102
192.168.101.0/24 dev eth0 scope link src 192.168.102.20
default via 192.168.102.1 dev eth0
# ip route show rule103
192.168.101.0/24 dev eth1 scope link src 192.168.103.20
default via 192.168.103.1 dev eth1
以下のようなネットワーク構成を例にCentOSの設定方法を説明します。

それぞれのNICには異なるサブネットの固定IPアドレスが設定されていて、デフォルトゲートウェイが未設定になっていることを前提とします。またL3スイッチにより各VLAN間のルーティングが設定されていることも前提とします。
1. HOST Aにスタティックルーティングを追加
# vi /etc/sysconfig/network-scripts/route-eth0
192.168.102.0/24 via 192.168.101.1 dev eth0
192.168.103.0/24 via 192.168.101.1 dev eth0
# service network restart
# route
------------
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.102.0 192.168.101.1 255.255.255.0 UG 0 0 0 eth0
192.168.101.0 * 255.255.255.0 U 0 0 0 eth0
192.168.103.0 192.168.101.1 255.255.255.0 UG 0 0 0 eth0
ink-local * 255.255.0.0 U 1002 0 0 eth0
------------
2. HOST BにHOST Aへの経路(スタティックルーティング)を追加
# vi /etc/sysconfig/network-scripts/route-eth0
192.168.101.0/24 via 192.168.102.1 dev eth0
# vi /etc/sysconfig/network-scripts/route-eth1
192.168.101.0/24 via 192.168.103.1 dev eth1
# service network restart
経路に問題がある旨のメッセージが出ます。宛先のネットワークが重複しているので一方の経路定義しか有効になりません。
ping結果
HOST A → HOST B (192.168.102.20) OK
HOST A → HOST B (192.168.103.20) NG
3. ルーティングルールの設定
いろいろ調べた結果、ルーティングに条件設定を行う方法が分かりましたので、以下にHOST Bへの設定手順を説明します。
経路テーブルIDの登録
# vi /etc/iproute2/rt_tables
以下の行を追加
200 rule102
201 rule103
ルールファイルの作成
# vi /etc/sysconfig/network-scripts/rule-eth0
from 192.168.102.20 table rule102
「192.168.102.20からの要求があったらrule102に従いなさい」というルールを定義
# vi /etc/sysconfig/network-scripts/rule-eth1
from 192.168.103.20 table rule103
「192.168.103.20からの要求があったらrule103に従いなさい」というルールを定義
ルーティングファイルの修正
# vi /etc/sysconfig/network-scripts/route-eth0
192.168.101.0/24 dev eth0 src 192.168.102.20 table rule102 ...(1)
default via 192.168.102.1 table rule102 ...(2)
(1) 「192.168.101.0/24ゾーンを参照する元ホストがeth0の192.168.102.20だったらrule102に従いなさい」というポリシーを定義
(2) 「rule102のデフォルトゲートウェイは192.168.102.1ですよ」という意味
# vi /etc/sysconfig/network-scripts/route-eth1
192.168.101.0/24 dev eth1 src 192.168.103.20 table rule103
default via 192.168.103.1 table rule103
ネットワークの再起動
# service network restart
エラーが出なければ矛盾は解消されたはずです。
双方のサーバからそれぞれのIPアドレスに対してpingが通れば完了です。
4. まとめ
通常のルーティングテーブルにはルール設定情報は反映されません
# route
------------
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.102.0 * 255.255.255.0 U 0 0 0 eth0
192.168.103.0 * 255.255.255.0 U 0 0 0 eth1
ink-local * 255.255.0.0 U 1002 0 0 eth0
ink-local * 255.255.0.0 U 1003 0 0 eth1
------------
ルーティングルールの確認方法はこちらになります
# ip rule
0: from all lookup local
32764: from 192.168.102.31 lookup rule102
32765: from 192.168.103.31 lookup rule103
32766: from all lookup main
32767: from all lookup default
# ip route show rule102
192.168.101.0/24 dev eth0 scope link src 192.168.102.20
default via 192.168.102.1 dev eth0
# ip route show rule103
192.168.101.0/24 dev eth1 scope link src 192.168.103.20
default via 192.168.103.1 dev eth1
コメント