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

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

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

Re[2]: グローバルIPを使用して通信をしたいのですがエラーになります


(過去ログ 126 を表示中)

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

■75161 / inTopicNo.1)  グローバルIPを使用して通信をしたいのですがエラーになります
  
□投稿者/ 樹 (1回)-(2015/03/04(Wed) 07:47:06)

分類:[ネットワーク全般] 

こんにちは、いつも参考にさせてもらっています。
長文失礼します。
ネットワークプログラミングに挑戦しているのですが、
ソケット通信でグローバルIPを用いて通信しようとすると、どうしてもエラーになるので質問させてください。

ソケット通信を利用して簡単にメッセージのやりとりをするプログラムを作成しました。
ローカル内のパソコン同士では普通にやりとりができ、特に異常もありません。
しかし、クライント側でグローバルIPを通してサーバと通信をしようとするとエラーになります。

環境は次の通りです。
C# .NET 4.5
ポート:適当と80
ルータ:Aterm W R 8 3 7 0 N ポートマッピングで使用するポートとローカルIPを追加済
ネットワーク環境:上記のルータに、ローカル側に端末を4台、WAN側はNTT東のモデムを挟んでインターネットです。ルータが2重になっているなどはありません。
プロバイダ:OCN フレッツ光
ポート開放確認:ウェブサイトにて確認済み(開放できています)
PC内ファイアウォール:無効化
よくあるコードですが、クライント側のコードは以下の通りです。
TcpClient tcpClient = new System.Net.Sockets.TcpClient( globalIP, serverPort ); // localIP(192.168.0.2)を指定すると普通に通信できます。
この部分で「対象のコンピューターによって拒否されたため、接続できませんでした。」の例外を吐きます。
TraceSourceを使用した場合以下のようなエラーになっていました。
UpdateStatusAfterSocketError() - ConnectionRefused
即、接続エラーとなり例外を吐きます。
しかし、80番ポートを使用した場合、しばらく接続を試みているのか(?)何故かタイムアウトとなります。
UpdateStatusAfterSocketError() - TimedOut
また、サーバ側のコードもよくあるものですが、以下のようになっています。
IPAddress ip = new IPAddress( new byte[] {192, 168, 0, 2} );
TcpListener listener = new TcpListener( ip, serverPort );

他に設定等必要でしょうか?
何処で通信エラーになっているのか検討がつきません。
パソコンを4台ほど変えて実行してみたりしているのですが、どうしてもうまくいきません。
無関係かもしれませんが、昔ApacheでHTTPサーバを作ってみたさいも、ローカルIPを指定するとうまく表示されるのですが、
グローバルIPを指定して表示させるとうまくいかなかった記憶があります。
また、その他のポート開放を伴うアプリケーションは普通に動いていますし、ルータの機能としてあるUSBストレージをグローバルIPを使ってWAN側から参照しても普通に表示されます。

ネットワークに詳しいかた、アドバイスをお願いします。






引用返信 編集キー/
■75164 / inTopicNo.2)  Re[1]: グローバルIPを使用して通信をしたいのですがエラーになります
□投稿者/ daive (44回)-(2015/03/04(Wed) 10:40:55)
よくあるサイト例:ヤマハ RT-58i / 57i などの設定を解説したサイト。
         お家WEBサーバーを立てる設定を解説したサイト、お家ゲームサーバーを立てる設定を解説したサイト
間違っている部分、機器構成によって適用できない、内容もあるかもしれません。全く役にたたないかも。
’
固定回線を2つ以上もっている個人は多くないと思うので、
サーバー側:有線、クライアント側:無線WIFI端末(DoComo:L-09Cみたいなやつ)+PCや、テザリング可能スマホ+PC
の構成で設定の練習をしてみるとか。考えれば、他の方法もあります。
’
’
例えば、
以下の書込みの要旨は、サーバー側で、NAT等の設定しましたか?という事です。

’
【Client】
|-Client-PC1 , IP:DHCP 割当
|-Client-Router , LAN:192.168.x1x.x2x , DHCP割当ゾーン , DHCP割当IP数、x1x:は、サーバー側と重ならない様にすると、VPN接続可かも:設定、機能によります。
|     WAN: xxx.xxx.xxx.xxx
|
|-ISP(プロバイダ、プロバイダ規制ポート以外,例:Docomo網は、特定ポートは外部接続不可)
 |
 |
 The Inernet
 |
 |
【Server】
|-ISP(プロバイダ、プロバイダ規制ポート以外)
|
|     WAN: xxx.xxx.xxx.xxx
|-Server-Router , LAN:192.168.x1x.x2x , DHCP割当ゾーン , DHCP割当IP数
| NAT等で、WAN IP + Port +プロトコルで来たデータを、
| LAN内の、固定IP又は、MACアドレス割当IPの、待受けポートへ、転送するように、設定。
| (使用機器により、設定方法、内容が異なるので、機器毎のマニュアル、設定資料必須)
|-Server-PC,IP:固定又は、MACアドレスによるDHCPでの固定割当、
  Server PC 側アプリは、動的/プライベートポートで待ち受け。 
 (少なくとも、0〜1023は避ける、通常は、49152〜65535)
  Wiki他、IANAの情報など要参照

テスト手順
0.事前準備:ルーター設定のバックアップ
       ISP接続情報等の確認、メモできるものは、すべてメモする、
       必要であれば、ルーターファームのアップデート
1.ルーターにWAN側で、PING応答する様に設定、
  ルーターの管理画面から、互いのPING応答を確認
  使用後は、設定を解除しておく。
  プロバイダ契約が固定IPでない場合は、ルーターリセット等で、
  グローバルIPが変わるかもなので、注意する。
2.リモートデスクトップ設定のポート解放、待受け設定をして
  リモートデスクトップ接続を試す。使用後は、必ず閉じておく。
  または、VPN接続可能なルータどうしの場合は、
  VPN接続設定を試してみる。相手側ルーターの設定が可能になるかも。
  が、ルーター再起動などで、中途半端に、無応答になるかも。
  または、WAN側から相手側ルーターの設定可能として、
  自分で設定可能としてみる。使用後は、WAN側操作不可とする。
  リモートデスクトップ用ポート解放とルーティング設定は、
   TCP:3389
   UDP: 500 , 4500 , 1701
  他が、必要かどうかは調べて、適切に設定します。
  有名なポートは開けっ放しだと、餌食になるので、必要時のみ解放&別ポート番号が望ましい
3.2.で雰囲気が掴めたら、実際用の設定をする。

80ポートは、WAN側からのアクセスの場合に、
ルーターのWEBサーバー機能に繋がるのか、
ルーティングされている、PCのWEBサーバー機能に繋がるのか、
きちんと確認して、設定しないと、わけが解らなくなる。

引用返信 編集キー/
■75168 / inTopicNo.3)  Re[2]: グローバルIPを使用して通信をしたいのですがエラーになります
□投稿者/ 774RR (230回)-(2015/03/04(Wed) 11:27:27)
こういう件は、障害となりうるポイントがたくさんあって、全部クリアにならないと成功しないわけで
その意味でトラブルシューティングとしては難しい案件だ。

ポート開放を伴うアプリケーションってのが bittorrent とか リモートアシスタンス とかなら、
こういうツールはたいてい UPnP で自力ポート開放してるのであまり参考にならない。
チェック項目としては既にきわめて有効なレスがあるので、
俺なら「まずこれを」チェックする点を指摘するだけにしておこう。

(WR8370/各種ツールの) UPnP 無効にして bittorrent/リモートアシスタンス あたりが使えなくなるようなら、
・ UPnP 対応ツールは自力でポート開放してる
・この目的のためのポート開放設定が正しくできていない
だ。

あと NEC の Aterm 系ルータあるあるなんだけど
・設定画面の「設定」ボタンを押しただけだと、設定内容が不揮発性メモリに保存されない
・「保存」を押さずに電源再投入すると設定値が元に戻っている
俺、これを3回くらいやっちゃったので・・・

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -