プロキシ経由でksocketを使用する

ksocket を使用するためには、 ksocketとKompira cloudの間でwebsocket通信を確立する必要があります。
ここでは、インターネットに接続するためにプロキシサーバを経由するような環境下で ksocket を実行するための方法を解説します。

ksbridge について

ksbridge は、プロキシサーバを経由する環境下で ksocketとKompira cloud間の通信を行えるようにするミドルウェアです。
以下の図のように、ksocketとKompira cloudの間のブリッジとして動作します。
この図では ksocketとksbridge間の通信に8080ポート、ksbridgeとプロキシサーバ間の通信に3128ポートを例として記載していますが、設定により変更可能です。

+---------------------------------------------+
| intranet                                    |
|                                             |
| +--------------------------------+          |
| | localhost                      |          |
| | +---------+      +----------+  |      +-------+     +---------------+
| | | ksocket | 8080 | ksbridge |  | 3128 | proxy | 443 | Kompira cloud |
| | |         |<---->|          |<-=------=-------=---->|               |
| | |         |  IN  |          |  | OUT  |       |     |               |
| | |         |      |          |  |      |       |     |               |
| | |         |      |          |  |      |       |     |               |
| | +---------+      +----------+  |      +-------+     +---------------+
| +--------------------------------+          |
|                                             |
+---------------------------------------------+

ksbridge を使用する場合、こちらのページ からダウンロードしてください。

使用方法

ksbridge の起動

ksocket をインストールしたサーバに ダウンロードしたksbridgeのファイルを配置し、展開してください。

$ tar zxf ksbridge_0.2.0_linux_x86_64.tar.gz
$ cd ksbridge_0.2.0_linux_x86_64
$ ls
ksbridge  README.md

ファイルが展開できたら、ksbridgeを起動してみましょう。
起動の前に、使用しているプロキシサーバのアカウント情報とポート番号を確認してください。

ここでは、以下のような環境であると仮定して、対応したksbridgeの起動コマンドを記載します。

項目
Kompira cloudのスペースURL yourspace.cloud.kompira.jp
プロキシサーバURL your.proxyserver.co.jp
プロキシサーバのポート番号 3128
プロキシサーバのアカウント名 username
プロキシサーバのアカウントパスワード password
ksocketとksbridge間の接続に使用するポート 8080
$ ./ksbridge -bind 127.0.0.1:8080 -host yourspace.cloud.kompira.jp -proxy http://username:password@your.proxyserver.co.jp:3128
********************************************************************************
ksbridge - Tiny websocket connection bridge server

  listen: ws://127.0.0.1:8080/api/ksocket/connect
  server: wss://yourspace.cloud.kompira.jp/api/ksocket/connect
  proxy:  http://username:password@your.proxyserver.co.jp:3128

********************************************************************************

プロキシサーバへのアクセスにアカウントが必要ない場合は、以下のように指定します。

$ ./ksbridge -bind 127.0.0.1:8080 -host yourspace.cloud.kompira.jp -proxy http://your.proxyserver.co.jp:3128

実行すると、ksbridgeはksocketからの通信を待つ状態となります。

ksocket の設定

次に、ksocketの設定を行います。 まずは、 ksocketドキュメント を参照し、ksocketのインストールを行いましょう。
通常 ksocket の設定ファイルには Kompira cloudのスペースURLを指定するのですが、 ksbridgeを使用する場合、スペースURLは前述のとおり ksbridge 側に設定することになります。
ksocket の設定ファイルには、代わりに ksbridge に対して接続する情報を設定します。

ksocket の設定ファイルである、ksocket.yml を以下のように編集してください。

connect:
  host: '127.0.0.1'   
  port: 8080             # ksbridge の bindポートに変更する
  protocol: ws          # wss から ws に変更する。設定行が存在しない場合は追加する
  token: FrKc+82kZGG9sdRS5AXnemPN8u6sDdY3PXxbqdB4    # Kompira cloud上で発行したksocketトークンを設定する

(以下省略)

ksocket の起動

ksocket.yml の設定を反映するために、 ksocket サービスの再起動を行います。

$ systemctl restart ksocket

再起動をすると、ksocketは設定に従って自分の8080ポートにアクセスをしにいきます。 正常に接続ができた場合、ksbridgeでは以下のような表示となります。

$ ./ksbridge -bind 127.0.0.1:8080 -host yourspace.cloud.kompira.jp -proxy http://username:password@your.proxyserver.co.jp:3128
********************************************************************************
ksbridge - Tiny websocket connection bridge server

  listen: ws://127.0.0.1:8080/api/ksocket/connect
  server: wss://yourspace.cloud.kompira.jp/api/ksocket/connect
  proxy:  http://username:password@your.proxyserver.co.jp:3128

********************************************************************************
INFO[0011] connecting to client...
INFO[0011] client has connected
INFO[0011] connecting to server...
INFO[0011] server has connected

また、Kompira cloud にアクセスし「全体設定 > ksocket」を表示後、対象の ksocket を選択してください。 接続状況が「接続済」となっていれば ksocket は正常に Kompira cloud に接続できています。

f:id:kompiracloud:20181212193113p:plain

これで ksbridge を介した ksocket と Kompira cloudの接続は完了です。



トラブルシューティング

ksbridge に何も出力されない

ksocketの設定を行い再起動を行っても ksbridge にログが表示されない場合、ksocketがksbridgeに接続しにいけていない可能性があります。
このような場合は、 ksocket のログファイル (デフォルトであれば /opt/fixpoint/ksocket/var/log/ksocket/ksocket.log ) を確認してみましょう。

2018-12-12T19:40:13+0900  DEBUG  ksocket.channel.session:_connector:241  Resumer is waiting disconnection...
2018-12-12T19:40:13+0900  DEBUG  ksocket.channel.session:_connector:243  Disconnected from the peer. Resume connection...
2018-12-12T19:40:13+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...
2018-12-12T19:40:13+0900  WARNING  ksocket.channel.session:_resume:225  Failed to start/resume session: [Errno 111] Connect call failed ('127.0.0.1', 8080). Wait 0 sec... [1/120]
2018-12-12T19:40:13+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...
2018-12-12T19:40:13+0900  WARNING  ksocket.channel.session:_resume:225  Failed to start/resume session: [Errno 111] Connect call failed ('127.0.0.1', 8080). Wait 0 sec... [2/120]
2018-12-12T19:40:13+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...
2018-12-12T19:40:13+0900  WARNING  ksocket.channel.session:_resume:225  Failed to start/resume session: [Errno 111] Connect call failed ('127.0.0.1', 8080). Wait 0 sec... [3/120]

例えば上記のようなログがksocket.logに出力され続けている場合、ksbridge に接続できていない状態です。ksocket.yml での設定を再度確認してみてください。

また、別のパターンとして以下のようなログが出力される場合があります。

2018-12-12T19:45:54+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...
2018-12-12T19:45:54+0900  WARNING  ksocket.channel.session:_resume:225  Failed to start/resume session: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:833). Wait 0 sec... [1/120]
2018-12-12T19:45:54+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...
2018-12-12T19:45:55+0900  WARNING  ksocket.channel.session:_resume:225  Failed to start/resume session: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:833). Wait 0 sec... [2/120]
2018-12-12T19:45:55+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...
2018-12-12T19:45:55+0900  WARNING  ksocket.channel.session:_resume:225  Failed to start/resume session: [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:833). Wait 0 sec... [3/120]
2018-12-12T19:45:55+0900  DEBUG  ksocket.channel.session:_resume:213  Connecting to the peer. Wait 60.000000 seconds...

このときは、ksocket.yml に protocol: ws という接続方式を変更する設定が正しく読み込まれていません。上述の「ksocketの設定」の項を確認し、protocol行の設定を行いましょう。

「failed to connect server」と表示される

ksbridgeのログで、 failed to connect server と表示される場合、ksocketとksbridgeは疎通できていますが、ksbridgeとプロキシサーバ間の通信が確立できていない場合が考えられます。

$ ./ksbridge -bind 127.0.0.1:8080 -host yourspace.cloud.kompira.jp -proxy http://username:password@no.proxyserver.co.jp:3128
********************************************************************************
ksbridge - Tiny websocket connection bridge server

  listen: ws://127.0.0.1:8080/api/ksocket/connect
  server: wss://yourspace.cloud.kompira.jp/api/ksocket/connect
  proxy:  http://username:password@no.proxyserver.co.jp:3128

********************************************************************************
INFO[0012] connecting to client...
INFO[0012] client has connected
INFO[0012] connecting to server...
ERRO[0012] failed to connect server                      err="dial tcp: lookup no.proxyserver.co.jp on 10.10.10.0:53: no such host" uri="{wss   yourspace.cloud.kompira.jp /api/ksocket/connect  false  }"
INFO[0069] connecting to client...
INFO[0069] client has connected
INFO[0069] connecting to server...
ERRO[0069] failed to connect server                      err="dial tcp: lookup no.proxyserver.co.jp on 10.10.10.0:53: no such host" uri="{wss   yourspace.cloud.kompira.jp /api/ksocket/connect  false  }"

このような場合は、ksbridgeの実行時に指定しているプロキシサーバのサーバ名、アカウント、パスワードが正しいかどうかを確認してください。

Kompira cloud 製品紹介ページはこちら
Kompira cloud 資料ダウンロードはこちら