- - PR -
ソースルーティングの実装について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-18 13:56
現在以下のような環境でソースルーティング(SSRR:Strict Source and Record Route)の実験を試みています。 [ OS ] FedoraCore4 [ ネットワーク ] +------+ +------+ +------+ | PC01 |(eth1)--(eth1)| PC02 |(eth2)--(eth1)| PC03 | +------+ +------+ +------+ [ IPアドレス ] PC01 eth1 : 10.0.0.2/24 PC02 eth1 : 10.0.0.1/24 PC02 eth2 : 10.0.1.1/24 PC03 eth1 : 10.0.1.2/24 [ /etc/sysctl.confの設定(抜粋) ] # Controls IP packet forwarding net.ipv4.ip_forward = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 1 以上の設定でPC01からPC02を経由し、PC03にパケットが流れるように制御したいと考えています。 そこで、raw socketを使用し、以下のようなパケットを作成しました。(以下はPC01 eth1でのtcpdumpの結果です) 12:35:42.093964 IP (tos 0x0, ttl 5, id 60315, offset 0, flags [none], proto 17, length: 1068, optlength: 8 ( SSRR{#10.0.1.2} EOL )) 10.0.0.2.34500 > 10.0.0.1.34500: UDP, length 1032 0x0000: 4700 042c eb9b 0000 0511 2111 0a00 0002 G..,......!..... 0x0010: 0a00 0001 8907 040a 0001 0200 86c4 86c4 ................ 0x0020: 0410 846c 0000 0000 0000 0000 4865 6c6c ...l........Hell 0x0030: 6f20 576f 726c 6400 0000 0000 0000 0000 o.World......... 0x0040: 0000 0000 0000 0000 0000 0000 0000 0000 ................ 0x0050: 0000 IPヘッダのフォーマットを調べる限り、パケットは正しく作成できていると思うのですが、PC02 eth1で受信した後の行方がつかめません(PC02のeth2から宛先IPアドレスが置き換わったパケットは送信されていない)。 いろいろと、調べたのですが手詰まりになっています。 どうか、ご教授願えませんでしょうか。 | ||||||||
|
投稿日時: 2007-01-19 09:34
こんにちは。
実現したいことが解り難いので補足説明願います。
ここまでの手順は良いとして
何故、こうしているのか理解できません。 普通ならまずpingで疎通確認しませんか? # Rowソケット通信のテストを行うとしたらは疎通確認後でしょう。 # この状況では、ネットワーク環境に問題があるのかソケット通信プログラムに # 問題があるのかという切り分けさえできないのでは? と思います。 なお、Windowsの世界ではXPのSP2以降でセキュリティ上の観点からRowソケット通信に 制約をかけています。 将来性を考えるとRowソケット通信は用いない方が良さそうに思えますが・・・。 | ||||||||
|
投稿日時: 2007-01-19 11:23
ご返答に感謝いたします。
説明が不十分で申し訳ありません。 まず、pingでの疎通確認について。 私の理解では、pingは一般的なルーティングの規約(ルーティングプロトコルやスタティックルーティング)にしたがって、ルーティングされます。 つまり、PC01からPC03のeth1(10.0.1.2)にpingを行えば、PC01のeth1からPC02を経由して、PC03のeth1に到達するものと考えられます。(PC01のデフォルトゲートウェイが10.0.0.1に設定されており、かつPC03のデフォルトゲートウェイが10.0.1.1に設定されており、さらにPC02でフォワーディングを有効にしていれば) (追加:上記のように設定すれば、PC01からPC02経由でPC03にpingが行えることを先ほど確認しました) 結果だけを見れば、私の実現したいことができているのですが、私はパケットのルーティング経路をコントロールしたいと考えているしだいです。 想定しているのは、PCクラスタのように多数のPCがさまざまな経路で接続されている環境です。 つまり、特定のPC間には複数の経路が存在するため、そのどの経路を使用するかをダイナミックに変更したいのです。 そのためには、通常のルーティングでは不可能なため(ルーティングプロトコルを動作させればそうではないですが)、IPオプションのソースルーティングを使用できるのではないかと考えています。 以上のようなことから、今回の環境で最低限の動作テストを行おうと思っています。 また、raw socketのセキュリティについては、上記の通り、想定している環境が極めてローカルなため、問題ないのかなと考えています。(ソースルーティングのオプションを普通のsocketで設定できれば、最高なのですが…) [ メッセージ編集済み 編集者: うどん定食 編集日時 2007-01-19 11:43 ] [ メッセージ編集済み 編集者: うどん定食 編集日時 2007-01-19 11:46 ] | ||||||||
|
投稿日時: 2007-01-19 11:53
補足説明ありがとうございました。
そういう事情でしたか。 個人的なアドバイスですが、可能ならばRIP,OSPFとかBGPのようなルーティング プロトコルが使用できる機器(L3SW等)でLANを構成する方法を推奨します。 独自環境を構築されると、担当が替わった時などいきなり運用が破綻するケース を見ております。仕様書等がきちんと揃っていても「一般的でない方法を何故 適用しなくてはならないのか」等の意図が引き継がれないケースが多いためです。 どうしても実現したいと言われるなら止めはしませんが、現在、うどん定食様が 苦労されていることを後任者が繰り返すことになるのは悲劇とは思われませんか? [ メッセージ編集済み 編集者: BackDoor 編集日時 2007-01-19 12:19 ] | ||||||||
|
投稿日時: 2007-01-19 12:53
BackDoorさん、貴重なアドバイスありがとうございます。
確かに、ソースルーティングで複数経路を使い分けるのは、奇妙な環境だと思います。 しかし、あくまでもこれは、企業内LANとして運用するのではなく、PCクラスタという限られた環境で使用(通信遅延の削減や、耐障害性の向上を目的に)することを考えています。 書籍や、インターネットなどで情報を得ようと試みても、あまり情報がなく手詰まりな状況ですので、ネットワーク設定(ソースルーティング関連)や、パケット構成についてご指摘があればありがたく存じます。 | ||||||||
|
投稿日時: 2007-01-19 13:31
どうも誤解していたようですね。
インフラ屋なもので、つい自分の価値観中心で判断してしまったことお詫びします。 ただ予算もあるでしょうが、こうした状況でも市販のロードバランサ導入等を推奨 する姿勢は変えられませんけど(苦笑)。
こういう特殊な部分に関しては情報は集まり難いかと思われますね。 私の場合、必要とする機能を有する機材の調査、インフラ構成の検討・導入等だけで 通信プログラムの実装とは無縁ですので、情報は持ち合わせておりません。 申し訳ありませんが、他の識者のアドバイスをお待ち願います。 | ||||||||
|
投稿日時: 2007-01-20 09:56
返答が遅れて申し訳ありませんでした。
その後、友人のアドバイス(一言?)をきっかけに試行錯誤した結果、なんとかできる見込みがたちました。 とは言え、BackDoorさん、ありがとうございました。 |
1