0

環境

2 つの異なる LAN にある 3 台のマシンを想像してください。

Machine1 (1 NIC) : NIC_IP=10.1.1.1
Machine2 (2 NIC) : NIC(1)_IP = 10.3.3.3 ; NIC(2)_IP= 10.1.1.1
Machine3 (1 NIC) : NIC_IP=10.3.3.3

LAN は次のように構成されています。

LAN(1) = Machine1.NIC, Machine2.NIC1
LAN(2) = Machine3.NIC, Machine2.NIC2

したがって、Machine2 だけが両方の LAN のメンバーです。


質問

次に、Machine2.Nic2 から Machine3.NIC への 1 つの接続を確立します。これは、machine2 の 10.1.1.1 から machine3 の 10.3.3.3 への接続です。

Machine2 の TCP/IP スタックに、localhost ではなく LAN(2) で宛先アドレスを見つけるように指示するにはどうすればよいでしょうか!? (明らかに、Machine3 が接続を開始した場合、目的のエンドポイントが接続に参加します [ただし、この場合は machine2 がイニシエーターです])


使用シーン(欲しいもの)

[Machine3=] ______LAN 2 _____ [=Machine2=]_______LAN 1________ [=Machine1]
   |                                                               |
   |_ _  _ _ _ _ _ _ _ _ _ _ virtually connected_ _ _ _ _ _ _ _ _ _|

Machine2 が、Machine1 と Machine3 の通信のために、LAN(1) と LAN(2) の間で一種の「ブリッジング サービス」を何らかの方法で提供するとします。このようにして、machine1 は machine3 に接続しようとします (それらが同じ LAN にあるかのように考えます) が、ここでは、machine1 から見える machine3 の目的の IP を使用して、途中で machin2 が接続されます。このプロセスでは、マシン 2 はマシン 1 からマシン 3 にデータを渡すことができます (したがって、選択的な手動ブリッジングのようなものです)。


さらに考えた後...(回避策)

[Machine3=] __LAN 2 __ [=Machine2A=]__LAN3__ [=Machine2B=]___LAN 1___ [=Machine1]
   |                                                                       |
   |_ _  _ _ _ _ _ _ _ _ _ _ virtually connected_ _ _ _ _ _ _ _ _ _ _ _ _ _|

Machine2B (2 NIC) : NIC(1)_IP = 10.3.3.3 ; NIC(2)_IP= 10.x.y.z
Machine2A (2 NIC) : NIC(1)_IP = 10.w.s.t ; NIC(2)_IP= 10.1.1.1

シナリオに別のマシンと別の LAN を追加することで、同じことを達成できることがわかります [ただし、現在は単なる回避策です (少なくとも現時点での答えではありません)]。


PS:パケット スニファーを作成していて、おそらく接続を確立しておらず (パケットの読み取り/注入など)、IP アドレスをインターフェイスに割り当てていないため、同じフィールドに質問があります。 1 つはローカルホストに、もう 1 つは LAN に 2 つの異なる宛先があります。

4

2 に答える 2

1

基本的な問題は、LAN1およびLAN2上の他のマシンと同じIPアドレスにmachine2があることです。それはうまくいきません。同じサブネット上に同じIPアドレスを持つ2つのホストを持つことはできません。そうしないと、すべてのホストが混乱します。

それが本当にあなたが意図したものなのか、それともあなたの説明の単なる見落としだったのかはわかりません。

次が構成である場合

LAN1: Network: 10.1.1.0 (8-bit subnet)
LAN2: Network: 10.3.3.0 (8-bit subnet)

Machine1: 10.1.1.1 on LAN1
Machine2: 10.1.1.2 on LAN1 and 10.3.3.4 on LAN2
Machine3: 10.3.3.3 on LAN2

この構成では、適切なNICを介して接続するために、ソケットリスニングコードで特別なことをする必要はありません。アウトバウンドクライアント接続の場合、ルーティングテーブルは正しいことを行い、接続する適切なインターフェイスを選択します。ソケットを作成するときはいつでも、バインドする特定のポートを指定できますが、バインドするIPに0(INADDR_ANY)以外は指定しないでください。ルーティングテーブルが構成されている場合は、すべてが「正常に機能」します。

int localport = /* 0 for clients, a specific port for server sockets */
socket.Bind(new IPEndpoint(0,localport));
于 2012-12-12T09:22:53.640 に答える
0

私はこのバッチスクリプトを書くことになりました。これにより、静的 MAC アドレスが arp テーブルに追加され、ルート テーブル エントリが追加されます。ルート エントリでデフォルト ゲートウェイを正しく設定するには、他のクラスに 2 つの新しい任意の IP アドレスを導入する必要がありました。さらに、MAChine2 の NIC で「自動メトリック」のチェックを外し、30 に設定しました。

NICのIDは「route print」に表示されているものです

SET ID_Nic1=0x3
SET ID_Nic2=0x10005

SET IF_Left=%ID_Nic1%
SET IF_Right=%ID_Nic2%

SET IP_Left=10.1.1.1
SET IP_Right=10.3.3.3

SET AUX_Left=172.16.1.1
SET AUX_Right=172.16.3.3

SET MAC_Left=00-11-22-33-44-55
SET MAC_Right=66-77-88-99-11-22


REM Delete all ARP entries
arp -d *


arp -s %IP_Left% %MAC_Left% %AUX_Left%
arp -s %IP_Right% %MAC_Right% %AUX_Right%


ROUTE ADD %IP_Left% MASK 255.255.255.255 %AUX_Left% METRIC 1 IF %IF_Left%
ROUTE ADD %IP_Right% MASK 255.255.255.255 %AUX_Right% METRIC 1 IF %IF_Right%
于 2012-12-16T12:23:53.133 に答える