Hogex spotted

Feed Rss

Linuxでポリシーベースルーティング

07.03.2015, 未分類, by .

先日NIC2枚刺し+同一サブネットという個人的にはBondingでもすりゃいいじゃん的な用途を扱う事になりまして、ちょいハマったのでメモしておきます。

単純に同一サブネット内でのネットワークについては特に何も考えなくていいんですが、これ1つ以上ルータをホップするケースになると話がややこしい。要はeth1に飛んできたパケット、受信はちゃんと出来るんですが応答するときに他所のネットワーク経由だとデフォルトゲートウェイを通りたいからeth0から返したいってな具合になっちゃうと。

というわけで、これをどうにかするのがPolicy Routingです。
要するに、Source IP Addressと通信するIFの組み合わせのルールを作って、そのポリシーに従ってルーティングテーブル書いてやるわけですね。

お手軽にAWSで環境作ってみましょう。
通信可能な異なるサブネットに所属するインスタンスを2つ作って、片方にはENIを2つくっつけます。
Amazon Linuxはこの辺、ENIをアタッチすると非常に気を利かせてくれて全自動でやってくれちゃうので、今回はRHEL7.1のインスタンスを使います。何か特別な理由が無い限り、やっぱAWSではAmazon Linux使うのが一番無難ですね。

まずインスタンスを2つ立ち上げる

これで準備完了です。今回は各インスタンスのIPアドレスは次のように振られました。
インスタンスA eth0 172.31.4.246 eth1 172.31.9.117
インスタンスB eth0 172.31.17.18
※グローバルアドレスは省略しています。

この状態でインスタンスBからインスタンスAのそれぞれのアドレスにpingを打ってみます。
結果は次の通り

では、ポリシールーティングの設定をしてみましょう。
まずインスタンスAの現在のルーティングテーブルを確認します。

ip route show の結果の通り、eth1のインターフェースにはゲートウェイが何もありません。
そこで、Source IP Addressが172.31.9.117の場合、というルールを作ってそこにゲートウェイを設定するわけですね。

これでルータを跨いでもそれぞれのIFで正常に通信できます。
恒久的に設定を保存する時はいろいろ設定ファイルを書いてやります。

・/etc/sysconfig/route-eth1

・/etc/sysconfig/rule-eth1

・/etc/iproute2/rt_tables

 

ただ、RHEL7ではなぜかrule-eth1が上手く反映されず・・・。この辺は分かったらまた追記予定。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


   Beat diabetes   Diabetes diet