2012-03-21 10 views
0

自分のユーザーモードのNATアプリケーションを作りたいと思います。バインディングポートなしでユーザーモードNATを作成するにはどうすればよいですか?

VM2 [192.168:

私はfolowingスキームを持っています。 8.2] ------ [192.168。 8.1] Win2003 [192.168。 9.1] ------ [192.168。 9.2] VM1

VM3 [192.168。 8.3]/

VM4 [192.168。 8.4] _/

  1. Iは、8.1と9.1のインターフェイスで生のIPパケットをキャプチャしています。 8.2-> 9.2 9.1-> 9.2
  2. に置き換え9.1から一部のパケットが8.1インターフェイスに、このように転送されます::8.1から
  3. いくつかのパケットが9.1インターフェイスに、このように転送されます9.2-> 9.1は9.2-> 8.2に置き換え

私のアプリケーションはポートをまったくバインドしません。インターフェイスからのキャプチャだけです。

私はこのシナリオを見た:> 9.2 9.1-に翻訳

  1. 8.2-> 9.2は、SYNフラグに
  2. 9.2-> 8.2 containtのSYN + ACKフラグ
  3. に翻訳
  4. 9.2-> 9.1が含まれていますそして手順2にはRSTフラグ付きの9.1 - > 9.2が含まれています...

Windows Server 2003はNATed接続をリセットします。私はすべてのポートをバインドしたくありません。

どうすれば対応できますか?

UPDATE:あなたの ユーザー空間NATが使用するポートからRSTパケットをブロックするように

使用Windowsファイアウォール:それはすることが可能であるか

user1202136、。

独自のNDISドライバを記述しないでください。

答えて

5

TCP仕様では、プロセスにバインドされていないポートでACK(またはSYN + ACK)が受信されると、常にRSTが送信されます。これは、ノードクラッシュが確実に検出されることを保証するために行われます。

Windows Server 2003では、RSTパケットを生成するのはTCP/IP実装です。 ACKがTCPレイヤーに到達しないようにするか、RSTがワイヤーに到達するのをブロックする必要があります。

  1. インターフェイスでTCP(ただしIPではなく)を無効にすることができます。
  2. Windowsファイアウォールを使用して、ユーザースペースNATが使用するポートからのRSTパケットをブロックします。
  3. (これは機能していません)Windowsファイアウォールを使用して、ユーザースペースNATが使用するポートへのすべてのTCPパケットをブロックします。私はこれがパケットがあなたのRAWソケットに到達するのを妨げるのではないかと心配しています。
+2

+1、間違った 'RST'パケットをフィルタリングする正しい方法、正しい方法。ああ、人々が初めてISPのダウンロードを殺すのを防ぐためにこれをやってきたときの思い出を思い出しました... \ * shake cane \ * – MrGomez

+1

...またはusermode以外のコンポーネントを追加したい場合は、 TCPスタックを見たくないRSTパケットをドロップするための中間のNDISドライバを作成します。 – Kimvais

+0

私はちょうどあなたのrespounceのために、私の質問、高校を更新しました! – k06a

関連する問題