Raspberry PiをFirewall/NAT越しにSSH・RDPをする【ngrok】
前回のエントリーに引き続きngrokに関連した話題になります。
前回の話題でhttp、httpsに関しては無事にngrokを経由して公開をおこなうことができました(httpsに関しては言及してませんでしたが、URLは同時に発行されますのでそのまま使用できます。あと、httpなサーバーブログラムでも、ngrok側で対応してくれるようです。)
後はその他のサービスはどうなるかになります。ngrokはレジストしていないとhttp関連しか対応することができないのですが、サービスにユーザ登録を行うと別のサービスなどにも対応することができるというメリットがあります。
ユーザ登録
メインページに行って画面上部の【Login】をクリックします。

画面が切り替わります。

メールアドレスやパスワードを使っても新規登録を行うことはできるのですが、Githubアカウントやgoogleアカウントでもログインが可能です。今回はGithubアカウントを使用してみます。画面内の【Login with Github】のボタンをクリックします。
すると、画面が切り替わりログインが完了し(登録状態になります。)、【Get Started】という画面の表示になり自分のサービストークンなどが表示される画面になります。

この【Get Started】の画面の手順通りに進めます。発行されたトークンを引数に以下のコマンドを実行します。実行すると~/.ngrok2/ngrok.yamlにトークン情報が保存されます。CLIで実行する度に指定することもできるのですが面倒なのでこの方法のほうがおすすめです。
$ ./ngrok authtoken 【発行されたAuthkey】 Authtoken saved to configuration file: /home/pi/.ngrok2/ngrok.yml
以降はトークンの指定は自動的に行われます。
後は該当するポートなどを指定してngrokを起動します。
SSH接続を行う
例えば、SSHであればport番号は22でtcp接続になりますので
$ ./ngrok tcp 22
となります。実行するとこんな風な画面になります。

あとは画面に記載されたForwardingの値を使用して接続をします。 teratermの場合にはログインダイアログで

【host】と【port番号】を変更します。これで接続はOKです。
RDP接続を行う
RDPであればポート番号は3386になりますので以下のようにします。ネットを検索していたところ、デフォルトではサービスリージョンがus(アメリカ)になってしまうのですが、コマンドラインでサービスリージョンを変更できるようです。(-regionオプションがそれになります)。今回は流れるデータが大きくなるのでap(アジアパシフィック)にしました。
$ ./ngrok tcp -region=ap 3389
となります。
【参考】
情報ありがとうございます。
実行すると以下のような画面になります。RegionもAsia Pacificに変更されているのがわかります。

これで準備完了です。接続はWindowsのリモートデスクトップ接続で行います。xrdpなどはインストールされている前提となります。Forwardingの値を【コンピュータ】のパラメータに設定して【接続】をクリックします。

vncのログインダイアログが表示されるのでいつも通りログインすれば…

Xが起動します。まあ、実用できるかというとやっぱり反応はそれほど良くないので、保険のような感じなるのかもしれませんが。

ちなみにngrokでも接続ステータスもみることができるので色々良さそうです。

終わりに
ngrokを使用することでローカルの環境を比較的自由にネットワークサービスを公開できるようになりました。あくまでも、デバッグやハッカソンなどでの短時間の使用になるかと思います。ご使用にはごくれぐれもご注意ください。