0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更、トンネル、ポートフォーワードツールをNode.jsで作成

Posted at

大昔からポートフォーワード、リバース関連のツールはたくさんありました:
ssh, nc, socat, redir...。(tcp tunnel port forwardでgoogle画像を見れば分かる)。

ただし、Windows上は、上記のようなツールを利用しようとすると、幾つか現実問題に遭遇します:

  • インストーラや実行ファイルは、署名されていないので、信頼できません。
  • 企業のセキュリティポリシーに利用が制限されます。
  • 自分でソースからコンパイルするのは面倒。
  • 極簡単なニーズなのに、sshのような複雑なツールに苦労しなければなりません。
  • socatなどは接続情報不明瞭。
  • socatなどのポートフォーワードは効率良くない(forkを利用するので)。

一方、Windows上は、IPHelperサービスにより提供しているportproxy機能はあります(netsh portproxyコマンドでポートフォーワードを設定できます)。ただし、パフォーマンスが良くないし、変なエラーが出てます(接続は切られたり)。これはおそらく、HalfOpen関連の処理に不十分です。

Node.jsの世界にもこのへんのツールは少しありますが、期待通りのシンプルではありません。

いいや、納得できません。やはり、作りましょう。

  • tunnel.js
    これはsshトンネルの超簡潔版です:TCPポートのフォーワードやリバース over TCPトンネル。設定なし、パスワードなし! adb forwardやreverseの感じです。

 利用例:tunnel-listen.js 8888でTCPトンネルサーバを起動し、tunnel-connect.js トンネルサーバ:8888 forward 8080 宛先:80で現在マシンの8080をトンネルサーバ経由宛先:80へフォーワードする。逆に、tunnel-connect.js トンネルサーバ:8888 reverse 8080 宛先:80はトンネルサーバ上の8080を現在マシン経由www.yahoo.co.jp:80へフォーワードする。

  • forward.js
    これは単純なポートフォーワドです。パフォーマンスはいい。それに、ENTERキーで中継情報(接続や、データ)は見れます。もう一つ特長は、フォーワード先のソケットサーバはAllowHalfOpenである場合でも対応しています。

ちなみに、ncの超簡潔版nc.jsも作りました。既存のncのサーバモードのコマンドラインの不統一、入力を複数クライアントに送信できないなど、接続情報不明など問題を解消しました。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?