同一セグメントにて複数インターフェースがある時のNW設定

By | 2015年11月30日

はじめまして、hatです。

EC2上にてCentOSのマシンを稼動させ、複数のIPを持たせる必要があり作業をしたときのことです。
NWに詳しい方は想定できるかもしれませんが、備忘録をかねて作業内容を書いていきたいと思います。

環境情報

・EC2インスタンス (CentOS5.4を利用)
・ENIを2つ追加し、複数のIPアドレスを追加
・IFのセグメントはすべて同一(eth0,eth1,eth2)

  • eth0:10.6.3.92
  • eth1:10.6.3.96
  • eth2:10.6.3.100

最初にAWSコンソールにてログインし、EC2インスタンスのネットワークインターフェースの追加し、
それぞれのインターフェースにEIPを割り当てました。それではsshにてアクセスしてみます。
結果は下記のようになりました。

  • eth0 → sshアクセス可能
  • eth1  → 応答なし
  • eth2 → 応答なし

あれ、なぜつながらない・・・。ここでしばらく悩んでしまいました。
ふとルーティングテーブルを見てみると下記の状態になっていることに気づきました。

 

【ルーティングテーブルの情報】

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.6.3.0        *               255.255.255.0   U     0      0        0 eth0
10.6.3.0        *               255.255.255.0   U     0      0        0 eth1
10.6.3.0        *               255.255.255.0   U     0      0        0 eth2
169.254.0.0     *               255.255.0.0     U     0      0        0 eth2
default         10.6.3.1        0.0.0.0         UG    0      0        0 eth0

 

ローカルリンクの接続は問題ありませんが、eth1とeth2の外部からの通信は
デフォルトGWであるeth0を通って返されてしまっていました。
これでは正常な通信のやり取りができません。

調べてみるとipコマンドにてルーティングの設定ができるようなので
こちらを利用して設定の導入を進めて行くことにしました。
以下はその時に実施した内容です。

ルーティングテーブルの作成

まずはルーティングテーブルを追加します。
1~252の範囲(0、253~255は予約されている)から作成します。
ここでは100、101を利用しました。

【コマンド】

vi /etc/iproute2/rt_tables

【記載内容】

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
100     subroute-eth1    → ★追加
101     subroute-eth2    → ★追加

 

ルーティングの追加

ルートテーブルにルーティングを追加します。

【コマンド】(eth1の設定)

ip route add table subroute-eth1 10.6.3.0/24 dev eth1 scope link proto kernel
ip route add table subroute-eth1 default via 10.6.3.1 dev eth1

 

【コマンド】(eth2の設定)

ip route add table subroute-eth2 10.6.3.0/24 dev eth2 scope link proto kernel
ip route add table subroute-eth2 default via 10.6.3.1 dev eth1

 

実際に反映されているか確認します。

【コマンド】

ip route show table subroute-eth1

【表示結果】

10.6.3.0/24 dev eth1  proto kernel  scope link
default via 10.6.3.1 dev eth1

 

【コマンド】

ip route show table subroute-eth2

【表示結果】

10.6.3.0/24 dev eth2  proto kernel  scope link
default via 10.6.3.1 dev eth2

ルートテーブル参照条件のルールを追加

作成したルーティングテーブルが参照されるようにルールへ追加します。
mainのテーブル(routeコマンドで参照できるもの)よりも優先的に参照するように
優先度を上げておきます。

【コマンド】

ip rule add from 10.6.3.96 table subroute-eth1 prio 100
ip rule add from 10.6.3.100 table subroute-eth2 prio 110

 

ルーティングテーブルのルール情報を確認します。
【コマンド】

ip rule show

【表示結果】

0:      from all lookup 255
100:    from 10.6.3.96 lookup subroute-eth1   →★追加
110:    from 10.6.3.100 lookup subroute-eth2  →★追加
32766:  from all lookup main                  →routeコマンドで表示されるテーブル
32767:  from all lookup default

OS起動時/ネットワーク再起動時の対処

1.OS起動時対応用、スクリプトを作成しておきます。

【コマンド】

vi /usr/local/sbin/subroute.sh

【記載内容】

#!/bin/sh

#ルーティングルートテーブル追加
#[eth1用]
ip route add table subroute-eth1 10.6.3.0/24 dev eth1 proto kernel scope link
ip route add table subroute-eth1 default via 10.6.3.1 dev eth1

#[eth2用]
ip route add table subroute-eth2 10.6.3.0/24 dev eth2 proto kernel scope link
ip route add table subroute-eth2 default via 10.6.3.1 dev eth1

#ルーティングルール追加
#[eth1用]
ip rule add from 10.6.3.96 table subroute-eth1 prio 100

#[eth2用]
ip rule add from 10.6.3.100 table subroute-eth2 prio 110

 

2.ネットワークコマンド実行時用のファイルを作成します。

【コマンド】

vi /usr/local/sbin/subroute2.sh

【記載内容】

#!/bin/sh

#ルーティングルートテーブル追加
#[eth1用]
ip route add table subroute-eth1 10.6.3.0/24 dev eth1 proto kernel scope link
ip route add table subroute-eth1 default via 10.6.3.1 dev eth1

#[eth2用]
ip route add table subroute-eth2 10.6.3.0/24 dev eth2 proto kernel scope link
ip route add table subroute-eth2 default via 10.6.3.1 dev eth1

 

3.ツールに実行権限を付与

chmod 755 /usr/local/sbin/subroute.sh
chmod 755 /usr/local/sbin/subroute2.sh

 

4.自動起動に対応させるための修正

OS起動時用の登録

vi /etc/rc.local

【記載内容】

sh /usr/local/sbin/subroute.sh

 

5.ネットワークコマンド実行時用の登録

vi /etc/init.d/network

【記載内容】

[抜粋]
         sh /usr/local/sbin/subroute2.sh
         ;; ←閉じ前に記載すること
  stop)  
[抜粋]

終わりに

何とか想定どおりの動きになってくれました。ルーティングについては、奥が深く難しく感じましたが、苦労して分つながるとうれしいものです。すこしでも参考になっていただければ幸いです。