デフォルト ルートとは別に、追加のルートを構成することもできます。
たとえば、サーバーに 2 つのインターフェイス (eth0 と eth1) があるとします。デフォルトでは、eth1 で構成した IP アドレスに関係なく、すべてのトラフィックがインターフェイス eth0 を介してルーティングされます。
デフォルト ルート (eth0) 以外の eth1 を介して着信および発信トラフィックをルーティングするには、eth1 の追加ルートも追加する必要があります。
このチュートリアルでは、次の例を使用します。
- eth0 は IP アドレス 19.86.101.54、ネットマスク 255.255.255.0、デフォルト ゲートウェイ 19.86.101.1 で構成されています
- eth1 は IP アドレス 19.86.100.176、ネットマスク 255.255.255.0 で構成されており、ゲートウェイ IP アドレスは 19.86.100.1 です
以下に示すように、ifconfig コマンドを使用して、インターフェイス カードの現在の IP アドレスを表示できます。
# ifconfig -a eth0 Link encap:Ethernet HWaddr 00:50:56:8E:0B:EC inet addr:19.86.101.54 Bcast:19.86.101.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3735 errors:0 dropped:0 overruns:0 frame:0 TX packets:336 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:295679 (288.7 Kb) TX bytes:50312 (49.1 Kb) eth1 Link encap:Ethernet HWaddr 00:50:56:8E:27:0D inet addr:19.86.100.176 Bcast:19.86.100.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:840 (840.0 b) TX bytes:0 (0.0 b)
また、netstat コマンドの出力は、デフォルト ゲートウェイが eth0 を指していることを示しています。
# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 19.86.101.1 0.0.0.0 UG 0 0 0 eth0 19.86.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 19.86.101.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
上記の設定により、両方のゲートウェイに ping を実行し、問題なく他のデバイスと通信できる場合があります。ただし、すべてのトラフィックはデフォルトで eth0 経由でルーティングされることに注意してください。
ネットワークの外部から IP アドレス 19.86.100.176 に ping を実行すると、ping できないことに気付く場合があります。
これを実装するには、ルーティング テーブルに新しいポリシーを作成する必要があります。ルーティング テーブルは /etc/iproute2/rt_tables にあります。設定前の最初のルール ファイルは、次のようになります。
# cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep #
現在のルールをすべて表示するには、次のように ip コマンドを使用します:
# ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
まず、変更を行う前に rt_Tables のバックアップを取ります。
cd /etc/iproute2 cp rt_tables rt_tables.orig
次に、/etc/iproute2/rt_tables ファイルに新しいポリシー ルーティング テーブル エントリを作成します。
echo "1 admin" >> /etc/iproute2/rt_tables
次に、管理テーブルにルーティング エントリを追加します。
ip route add 19.86.100.0/24 dev eth1 src 19.86.100.176 table admin ip route add default via 19.86.100.1 dev eth1 table admin
上記の例では:
- 最初の ip コマンドでは、サブネット 19.86.100.0 とネットマスク 255.255.255.0、送信元 IP アドレス 19.86.100.176 およびデバイス eth1 を管理テーブルに追加しています。
- 2 番目の ip コマンドでは、ルート 19.86.100.1 を管理テーブルに追加しています。このように、管理テーブルで定義されたすべてのルールは、トラフィックをデバイス eth1 経由でルーティングします。
上記のコマンドが正常に実行されたら、このテーブルの使用方法を OS に指示する必要があります。
「ip rule show」で、「32766:from all lookup main」という行に気付くかもしれません。これは、デフォルト ゲートウェイである「メイン」テーブルで定義されたすべてのトラフィックをルーティングするよう OS に指示する行です。
すべてのルールは昇順で実行されます。そのため、「メイン」テーブルの上にルール エントリを追加します。
ip rule add from 19.86.100.176/24 table admin ip rule add to 19.86.100.176/24 table admin ip route flush cache
上記の例では:
- 最初のコマンドは、eth1 の IP に向かうすべてのトラフィックが「メイン」ルーティング テーブルではなく「管理」ルーティング テーブルを使用する必要があるというルールを追加します。
- 2 番目のコマンドは、eth1 の IP からのすべての送信トラフィックが「メイン」ルーティング テーブルではなく「管理」ルーティング テーブルを使用する必要があるというルールを追加します。
- 3 番目のコマンドは、前のコマンドでのこれらすべての変更をコミットするために使用されます
最後に、次のコマンドを使用して、変更が適切に行われたことを確認します:
# ip rule show 0: from all lookup local 32764: from all to 19.86.100.176/24 lookup admin 32765: from 19.86.100.176/24 lookup admin 32766: from all lookup main 32767: from all lookup default
この時点で、外部ネットワークから IP アドレス 19.86.100.176 に ping を実行し、eth1 を使用していると思われるすべてのトラフィックが期待どおりに機能していることを確認できるはずです。
これらの変更を再起動後も永続化するには、これらのコマンドを /etc/init.d/boot.local (SUSE Linux の場合) または /etc/rc.d/rc.local (Redhat、CentOS の場合) に追加します。
別のサブネットにもう 1 つの IP アドレスを構成する場合は、上記のすべての手順を繰り返しますが、別のテーブル名を使用します。 「admin」テーブルの代わりに、「admin-new」テーブルを使用してください。