C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: TcpListenerでNAT越え?


(過去ログ 126 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■75245 / inTopicNo.1)  TcpListenerでNAT越え?
  
□投稿者/ あおい (1回)-(2015/03/08(Sun) 21:33:42)

分類:[C#] 

C#とういうよりネットワークかもしれません。

ソケット通信でTCPを利用してプログラムを書いています。
ローカル内ではサーバ側でリスナー(TcpListenerクラス)を利用して待機させ、
クライント側ではサーバ側のIPとポートを指定して接続(TcpClientクラスやSocketクラス)すると思います。
これをWAN(ルータ)を挟んで通信してみたいのですが、どうすればいいでしょうか?
具体的には、クライント側のTcpListenerクラスにグローバルIPアドレスを入力して接続しようとしているのですが、エラーになります。
TcpClient client = new System.Net.Sockets.TcpClient( サーバのグローバルIPアドレス, ポート番号 ); ← グローバルIPを入れると、接続拒否されましたと叱られます(標準ではルータを超えられないからですよね?)
ルータを越えるために何かしらテクニックが必要だと思うのですが、ここをどうすれば良いか知りたいです。

とりあえず環境としては、
PC → ルータ → インターネット → ルータ → PC のような感じです。
(多重ルータは難しいそうなので、とりあえず1個でお願いします。)
http://tu3.jp/0980
上のサイトのUPnPライブラリを利用して、サーバ側でポートマッピングし、特定のポートで待機させています。
また、クライント側はサーバ側が使用するポートを知っているものとしてください。

よろしくお願いします。
引用返信 編集キー/
■75248 / inTopicNo.2)  Re[1]: TcpListenerでNAT越え?
□投稿者/ daive (45回)-(2015/03/08(Sun) 23:27:08)
2015/03/08(Sun) 23:52:45 編集(投稿者)
2015/03/08(Sun) 23:37:23 編集(投稿者)

グローバルIPを使用して通信をしたいのですがエラーになります
http://bbs.wankuma.com/index.cgi?mode=al2&namber=75161
を、診て(見てではない)欲しいのですが、

【クライアント側】
ローカルIP:LAN側
 | LAN側
ルーター:ルーター許可のみLAN内部へ、WAN外部へは、設定による。
 | WAN側
光、ADSLモデム::ISPが制限するポート以外スルー
 | 
ISP:グローバルIP
 |
The InterNet
 |
ISP:グローバルIP
 |
【サーバー】
光、ADSLモデム:ISPが制限するポート以外スルー
 | WAN側、ここまでは、クライアント側で指定したグローバルIP&ポート
ルーター:ルーター許可のみLAN内部へ、WAN外部へは、設定による。
 | LAN側、グローバルIP&ポートのデータを、ルーターのLAN側へ転送する為には、指定が必要
ローカルIP:LAN側
'
この過程で、【サーバー】、ルーター、ローカルIPになる過程で、
物理的手段:IPパケット:プロトコル(UDP/TCPなど):その上のこもごも(HTTPなど)
があって、
クライアント側からは、相手先を指定して、アクセスしても、
クライアント側から、サーバー側は、一意の割り当てが、ルーター迄は判っていても、
ルーターを介した、サーバー側LAN側内部の特定PC(サーバー機器へのアクセスルート)への割当が、不明なので、、、
NATなどで、一意のPCを、指定する必要があります。
場合によっては、一意でなくても良い場合がありますが、混乱するので省略。

VPSなどは、フィヤーウォール、ISPの制約が無ければ
まんま、届きます。(それだけに、WAN側から、野放し放題、危険状態)
⇒光、ADSLモデムにつながった状態
 都市伝説かもしれませんが、
 サーバーインスタンス有効化後、最短:数10秒で乗っ取られたとか。
引用返信 編集キー/
■75251 / inTopicNo.3)  Re[2]: TcpListenerでNAT越え?
□投稿者/ 774RR (238回)-(2015/03/09(Mon) 06:57:29)
今時の一般人の ADSL/光 等の The Internet 接続を使っている人の場合
・ TcpClient (サービス利用側) は Router/FireWall 等の設定は一切いらない(はず)
・ TcpListener (サービス提供側) は Router/FireWall の設定をする必要がある

で、その NAT(NAPT) 設定を UPnP で行ったのなら「自分以外から」の接続ができるはず、ってこと。
FireWall が開いているのが前提。

            192.168.1.1    X.Y.Z.W
PC1 ---------+-- Router/Modem --- TheInterNet
192.168.1.2  |
PC2 ---------+
192.168.1.3

PC1 でサービス提供するとき
PC2 からそのサービスに接続するには 192.168.1.2 で接続する必要がある
PC2 から X.Y.Z.W に接続してもできない
NAT/NAPT の設定は「 X.Y.Z.W/PORT1 から 192.168.1.2/PORT2 へ相互変換」で、その確認は
誰か他のユーザに X.Y.Z.W/PORT1 に接続してもらうのが一番面倒が無い、だろう
(実用するには DDNS が必要そうだけど)

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -