2016年12月14日星期三

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

大昔からポートフォーワード、リバース関連のツールはたくさんありました:
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のサーバモードのコマンドラインの不統一、入力を複数クライアントに送信できないなど、接続情報不明など問題を解消しました。

没有评论:

发表评论