イーサネットループネットワークの作成-ルートの構成方法


2

ループとして構成する必要があるネットワークがあります。それぞれ2つのインターフェースを持つ3つのノードで構成されます。以下の図で説明します。

+--->(eth0) Node 1 (eth1)--->(eth0) Node 2 (eth1)--->(eth0) Node 3 (eth1)--->+
|    10.0.3.1     10.0.1.1  10.0.1.2     10.0.2.2  10.0.2.3      10.0.3.3    |
+--<----------------------------<--------------------------------------------+

ノード1からノード3にpingを送信して、要求がノード2を通過し、応答がノード3からノード1に直接送信されるようにします。

node1$ ping 10.0.2.3

ノードを次のように構成しました。

node1# route add -net 10.0.2.0/24 gw 10.0.1.2

node2# route add -net 10.0.3.0/24 gw 10.0.2.3

node3# route add -net 10.0.1.0/24 gw 10.0.3.1

pingを実行すると、ノード1からの要求はノード3に到着します。ただし、ノード3は応答せず、応答さえ生成しません(少なくともWiresharkでキャプチャできること)。

ヒントを教えてください。

TA

回答:


2

ノードは、発信元のパケットのソース IPアドレスを選択するとき、特に制限されない限り、通常、パケットの宛先へのルート上の次のホップに「最も近い」IPアドレスを選択します。

ノード1から見ると、ノード3への次のホップは10.0.1.2です。ノード1のIPアドレスに最も近いがする10.0.1.2ある10.0.1.1、ありません10.0.3.1。(宛先と同じサブネット上のIPアドレスは、同じサブネット上にないIPアドレスよりも宛先に「近い」と見なされます。)

pingの送信元IPアドレスを確認します。ほとんどの場合、そうで10.0.1.1はありません10.0.3.1。ノード3にへのルートがない場合10.0.1.1、応答できません。


ループを作ることができました。応答を生成するには、net.ipv4.conf.all.rp_filter = 0を含める必要があります。ただし、パッケージが他のインターフェイスの宛先ノードに到着すると、pingはパケットを良好とみなさないため、pingは成功しませんが、パケットはそこに到達します。返信の宛先と送信元のアドレスがリクエストの宛先と一致しません。これが理由だと思います。
jlanza

それは奇妙です。NATを実行していない場合、アドレスが一致しない理由はありません。
デビッドシュワルツ

私がリコールした場合に受信したパケット(システムの前ではない)が同じアドレスを持っている(申し訳ありません)問題は、パケットが異なるインターフェースを介して受信されるため、それを認識していないように見えることです。時間があれば、さらにテストする必要があります。
jlanza

1

暴走ブリッジのブロードキャストを防ぐために、ノードは正しく繰り返されません。Spanning Tree Protocolを実行することをお勧めします。これにより、すべてのノード間に完全に機能するルートを配置できます。レイヤー2またはレイヤー3の特定のリンク間の接続を制限しない限り、これを行う別の方法を考えることはできません。


彼はルーティングではなく、ブリッジングです。彼のノードは何も繰り返していません。
デビッドシュワルツ

ブリッジを使用することを考えていましたが、@ David Schwatzが言うように、インターフェイスごとに異なるフローが必要です。また、インターフェイスの1つはWLANであるため、ブリッジに含めることはできません。
jlanza

0

/sbin/route非推奨ですip route。代わりに使用してください)。

パケットが一方向にのみ移動するようにしたい場合は、宛先が何であれ、すべてのノードがゲートウェイとして次のノードを使用する必要があることを意味します。

node1# ip route add 10.0.0.0/22 via 10.0.1.2
node2# ip route add 10.0.0.0/22 via 10.0.2.3
node3# ip route add 10.0.0.0/22 via 10.0.3.1

ただし、ほとんどのディストリビューションでは、多くの場合、デフォルトでリバースパスフィルタリングが有効になっています。リバースパスフィルタリングは、このパケットへの回答がパケットを受信したのと同じインターフェイスに送信されることを確認しようとする着信パケットのフィルタです。これは、ルーティングが対称的である一般的なネットワークでは良いことですが、あなたの場合は、非対称ルーティングが必要なので、パケットを受信するインターフェイスでリバースパスフィルタリングを無効にするか、少なくともそれを減らして、ソースIPはルーティング可能です:

node1# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node2# sysctl -w net.ipv4.conf.eth0.rp_filter=2
node3# sysctl -w net.ipv4.conf.eth0.rp_filter=2

リバースパスフィルタリングおよびその他のノブに関するドキュメントは、カーネルのドキュメントで入手できますDocumentation/networking/ip-sysctl.txt。それを見つける場所は、ディストリビューションによって異なります(または単にWebを参照してくださいip-sysctl.txt)。

ハッピーループ!


net.ipv4.conf.eth0 = 2の意味は何ですか?詳細情報はどこで入手できますか?
jlanza

@jlanza:おっと、これらの行は間違っていました(rp_filter行方不明でした)。これを修正し、ドキュメントポインターを使用して回答を更新しました。
BatchyX
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.