GNU/Linux >> Linux の 問題 >  >> Linux

Linux で ip コマンドの例を使用して複数のルートを追加する方法

デフォルト ルートとは別に、追加のルートを構成することもできます。

たとえば、サーバーに 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」テーブルを使用してください。


Linux
  1. コマンドラインを使用してLinuxを再起動する方法

  2. コマンドを使用してLinuxでプロセスを強制終了する方法は?

  3. MTR コマンドの例を使用して Linux で Ping と Traceroute を組み合わせる方法

  1. 5 実用的な Linux fuser コマンドの例

  2. キーバインドを使用して Linux コマンド ラインをナビゲートする方法 (Linux Ctrl コマンドの例)

  3. Startpar コマンドの例を使用して Linux の起動プロセスを高速化する方法

  1. 例を使用してLinuxでIPコマンドを使用する方法

  2. Linuxエイリアスコマンド:例で使用する方法

  3. Linux での dmsetup コマンドの使用例