- PR -

Windows上でのNAPTの実装方法について

1
投稿者投稿内容
とっくまん
会議室デビュー日: 2007/02/22
投稿数: 2
投稿日時: 2007-02-22 07:10
初めて投稿させて頂きます。

Windows2000 VC2003 c#において、NAPTを行うツールを書いているのですが、TCPの扱いで
躓いています。

状況
1. LAN側192.168.1.1:10000 からのSYNパケットをNAPTにてソースIPアドレス、Port番号をWAN側123.456.78.90:20000(仮)に書き換えてサーバーに送信

2. WAN側123.456.78.90:20000に戻ってきたSYN/ACKパケットをNAPT処理して192.168.1.1:10000に送信

3. LAN側192.168.1.1:10000 からACKパケットをNAPT処理してサーバーに送信

この時、NAPTを走らせているPCに2.のパケット来た段階で、このPCがサーバーに対しRSTを返信してしまいます。そのため、3.のパケットを送っても接続が出来ません。
123.456.78.90:20000からconnectした訳ではないので当然の反応なのですが、NAPTとして働かせるために、この反応を止めさせたいのです。

NAPTの送受信部分はRawパケットを使用しています。
もしかしたら、NAPTのPCからconnectしなければならない等、根本的な考え方が間違っているのかもしれませんが、ネット関係は詳しくないため、色々資料を漁ったのですが分かりませんでした。
どうかご教授お願いいたします。


甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-02-22 10:57
標準のTCP/IPプロトコルスタックにデータが渡った時点で、標準TCP/IPプロトコルスタックの挙動と衝突してしまうので駄目だと思う。TCP/IPプロトコルスタックをアンインストールするか、TCP/IPプロトコルスタックにデータが渡る手前で処理するためにフィルタドライバとして製作する必要があるかと。

NAPT機能は標準のWindowsに含まれているのに、あえて自作する目的はなんでしょう?
とっくまん
会議室デビュー日: 2007/02/22
投稿数: 2
投稿日時: 2007-02-23 03:08
甕星さま

確かに、TCP/IPプロトコルスタックに行く前にパケットの破棄等が出来ないかと思っていたのですが、ドライバレベルまで下がらないと駄目そうですね。

自作の目的としては、どうせならパケットのモニタやロスト、遅延などの処理も組み込みたかったからです。

とりあえずドライバ関係も調べてみることにします。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)