PPPoEのマルチセッションとルーティング イイ(・∀・)!!

前々回のエントリーの続きです。
PPPoEでマルチセッションを張るにあたっての構成で考えられるのは、
以下の2パターンかと思います。

1)ethポートを2つ使う場合:

 

2)ethポートを共有する場合:

 

これらの設定は、pppoe.conf内や、ifcfg-pppX内の該当箇所を変更するだけです。(・◇・)

ところで、どちらにしても2回線以上のセッションが張られている場合で、

ping google.co.jp

を実行した場合は、どちらの回線から外に出て行くのか分かります?
これを制御する為の設定がlinuxのルーティング設定(ipコマンド)になります。

どっちの回線から出力されるのか?

自分も最初これが分からなかったです。
マルチセッションを張ったものの、出力先回線の振り分けってどうなっているの?って。
マルチセッションが出来て、外側からそれぞれのIP宛にsshしたりして、繋がった繋がったと
喜んでいたのですが、ふと内部からtracerouteを掛けてみた所、何回やっても片方からしか出て行かず。
(#`Д´)ゴ---!!

そこで分かったのが、defaultルート設定されている側のpppからしか、外へ出て行かないという事でした。
当たり前と言えばそうですが、これでは出力時は片方からしか出て行きません!!
幸い?defaultルート設定を切り替えるコマンドは知っていたので、以下のようにしてました。

ip route replace default via X.X.X.X   ←回線1から出す場合
ip route replace default via Y.Y.Y.Y   ←回線2から出す場合

ただこれだと静的な設定なので、あまり役に立ちません。
出来れば、何処そこ行きのデータは回線1を使うとかを自動で切り替えて欲しいです。
また、例えばルータとして使う場合などは、配下のサーバ1から来たパケットは回線1を・・・とか。

ルーティングの設定

これらの事をしてくれるのが、linuxのルーティング設定コマンドになります。
自分も最初はよく分からなかったのですが、イロイロ弄っているうちになんとなく分かって来ました。(・◇・)

  • ip route ⇒ 現在のルーティング情報を表示(最後の行でdefaultルートが分かる)
# ip route
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.31
169.254.0.0/16 dev eth1  scope link
10.0.0.0/8 dev eth1  proto kernel  scope link  src 10.0.0.50
default via 192.168.1.1 dev eth0

とりあえずこんな感じです。
pppセッションが張られてたり、ethポートが複数あるともっと表示が違ってきます。

  • ip rule ⇒ 現在設定されているルーティングの優先順位を表示
# ip rule
0:      from all lookup 255
32766:  from all lookup main
32767:  from all lookup default

どちらかと言えばコチラの方がミソです。
右端の「255」や「main」や「default」は、ルーティングが設定されているtableと呼ばれるものです。
その各tableが左側に書かれている数字の順番事に評価され、実行されていくという感じの動作です。

次のコマンドで、これらのテーブルの定義が分かります。

  • ip rule show table table名 ⇒ 現在設定されているルーティングテーブルの中身を表示
# ip route show table 255
broadcast 192.168.1.0 dev eth0  proto kernel  scope link  src 192.168.1.31
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 10.0.0.0 dev eth1  proto kernel  scope link  src 10.0.0.50
local 10.0.0.50 dev eth1  proto kernel  scope host  src 10.0.0.50
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.31
broadcast 10.255.255.255 dev eth1  proto kernel  scope link  src 10.0.0.50
local 192.168.1.31 dev eth0  proto kernel  scope host  src 192.168.1.31
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1

いろいろあって分かりにくいですが、要はどこから来たパケットを何処へ出すか(どう処理するか)
といった感じの定義がずらずらっと書いてあります。(・◇・)

でもって、このテーブルを増やしたり、編集したりする事で、ルーティングの制御が可能になります。
以下に、覚書き的に羅列します。

  • ipコマンド覚書

■デフォルトルート関連

・今あるやつの置き換え

#ip route replace default via 192.168.1.100

・削除してから追加

#ip route del default ←最初これで設定済みのやつを削除しておく。

追加は、以下のどれでもOK
#ip route add default via 192.168.1.100
#ip route add 0/0 via 192.168.1.100
#ip route add via 192.168.1.100
#ip route add default dev ppp0 ←IP指定じゃなく、pppインタフェースも指定可能。

#ip route show table main ←これで確認。

■ルーティング関連

・既存テーブルを編集(追加とか削除とか)

既存tableは、255とmainとdefaultがありますが、基本的にはmainをイジル感じです。
ってゆーか、テーブルを指定しないとmainになるみたいです。
上の、デフォルトルートのやつもmainテーブルの中身が書き換わる感じです。

192.168.0.0/24からのやつは、192.168.0.100から出ろ!!
#ip route add 192.168.0.0/24 via 192.168.0.100 ←これでmainテーブルに追加
#ip route del 192.168.0.0/24          ←これでmainテーブルから削除

#ip route show table main ←確認


・新規テーブルを作ってしまう方法

192.168.0.0/24からのやつは、192.168.0.100から出ろ!!
#ip route add 0/0 via 192.168.0.100 table 1     ←1というテーブルを新規生成
#ip rule add from 192.168.0.0/24 table 1 pref 34000 ←新規追加したテーブルをruleに反映

#ip rule ←これで確認。
0:      from all lookup 255
32766:  from all lookup main
32767:  from all lookup default
34000:  from 192.168.0.0/24 1   ←ここに追加される。

■キャッシュのクリア

ルーティングの設定を更新しても反映されない時は、キャッシュの仕業なので、これでクリア。

ip route flush cache

取りあえずこんな感じで、なんとかやりたい事は出来るようになりました。イイ(・∀・)!!