質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

1回答

1989閲覧

WANからwebsocket接続したい

masabs

総合スコア13

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2020/07/05 05:02

前提・実現したいこと

WebSocketを使用したく、門外漢ですが基礎的なところを勉強しています。
LAN外のクライアントからサーバにWebSocketで接続したいのですが、うまくいきません。
クライアントをサーバと同一LAN内におくと接続できるので、WANから接続するための設定ができていないのだと思いますが、
何を設定する必要があるのでしょうか?

発生している問題・エラーメッセージ

Node.jsで8081番にWebSocketサーバを立てています。
クライアント端末のChromeのデベロッパーツールのコンソールから接続を試みていますが、

まず、クライアント端末をサーバと同一LAN内に置いた場合
const con = new WebSocket('ws://(サーバのローカルIP):8081');
で問題なく接続できます。

次に、クライアント端末をサーバのLANの外側に置いた場合、
const con = new WebSocket('ws://(サーバのグローバルIP):8081');
とすると以下のエラーが出ます

VM233:1 WebSocket connection to 'ws://XXX.XXX.XXX.XXX:8081/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED (anonymous) @ VM233:1

インターネットルータのポートマッピングは
WAN側8081をLAN側サーバアドレスの8081番にマッピングしています。

該当のソースコード

Nodejs

1//サーバ側のソースコード 2const server = require('ws').Server; 3const ws = new server({ port: 8081 }); 4 5ws.on('connection', socket => { 6 console.log('connected!'); 7 8 socket.on('message', ms => { 9 console.log(ms); 10 }); 11 12 socket.on('close', () => { 13 console.log('good bye.'); 14 }); 15});

試したこと

補足情報(FW/ツールのバージョンなど)

クライアント:Windows10, Chromeデベロッパーツール
サーバ:Ubuntu, Node.js
ネットワーク環境:KDDI ポケットWifi(グローバルIPあり)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

あなたんちのルータ(ポケットWifi)の設定で、当該ポートをアクセスするサーバに向けて転送させる設定を行う必要があります。

そのポートでWebサーバでも建てて、ブラウザでアクセスしてみてはどうでしょう。
設定がきちんと設定できていれば、スタートページなりが見えるはずですが

投稿2020/07/05 07:16

編集2020/07/05 07:19
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masabs

2020/07/05 08:45 編集

ご回答ありがとうございます。 ご指摘いただいたように、webサーバをたててアクセスできるように確認しながら設定を変更しました。 ルータの設定をWAN側80番をLAN側8081番に転送する設定にするとwebサーバにアクセスでき、同じポート設定で受けるとWebSocketサーバも接続できるようになりました。 もし追加で教えていただけると大変ありがたいのですが、 ルータの設定をWAN側8081番からLAN側8081番に転送する設定にして、WANのクライアントから"ws://(グローバルIP):8081" のようにアクセスすることは一般的に許されていないのでしょうか?
y_waiwai

2020/07/05 08:59

べつにそれはかまいません。 ただ、同じLAN内からではグローバルIPでアクセスできない場合が多いので、そこらへん注意する必要があります。 まあ、この場合はWebサーバが見れたと言うなら問題はないでしょうが。
masabs

2020/07/05 11:30

ありがとうございました。おかげさまで、理解を進めることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問