24
21

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.

ngrokでRaspberry Piのデスクトップをインタネットに公開

Last updated at Posted at 2016-07-03

#導入
 Raspberry Piは手軽に手に入れるIoTデバイスの代表として、技術者や愛好家の間で多く利用されています。そしてRaspberry Pi 3BはBlueToothとWiFiモジュールをハードの中に組み込んでいたことで、さらに使いやすくなっています。
 ngrokは、ローカルのポート(主にHttpやTCPプロトコルの)をインタネットに一時的に公開できるサービスです。windows,mac,linuxなどいろんなOSに対応でき、使い方も簡単です。使い慣れたら、本当に「文明の利器だ」という実感がわきます。
 リモートデスクトップサービス(RDS)は本来、Microsoft社が自社製品であるWindows Serverをより便利に管理できるために開発したサービスです(windowsのCUIの使い辛さを考えてみればわかる気がします)。その後開発が重なり、Remote Desktop Protocol (リモート デスクトップ プロトコル、RDP)と変貌して、linuxでも使えるようになりました。RDPプロトコルはTCPポート 3389 およびUDPポート3389を使用して接続します。

#本文
##材料:

##方法:
###1. ローカルでRDPを使う
まずはRaspberry Piと接続用のパソコンが同じWiFi回線に入っていることを確保します。
そして、IPスキャンアプリを使ってスキャンします
Desctop screenshot.png
私の場合、Raspberry Piのホスト名を変更しましたが、変更していないRaspberry Piではraspberrypi.localというホスト名です。
そのホスト名のIPアドレスを使ってsshで入ります。

ssh pi@RaspberryPiのIP
password:初期設定だと「raspberry」

こんな画面が出れば、SSHで入りました。Raspberry PiのCPUは弱小なので、出るまで時間かかる可能性があります。
Desctop screenshot2.png

そして一刻も早く、RDPを使えるようにします
今回使うのはxrdpというアプリケーションです。「Raspberry Pi」「xrdp」をキーワードで検索すればたくさん情報が出ます。
早速インストールします。

sudo apt-get install xrdp

長い待ち時間の後、いよいよRDPが使えるようになりました。
####Windows編
 RDPはWindowsデフォルトの機能なので、スタートメニューで「RDP」を調べればすぐ出ます。後は案内メッセージに従ってセッテイングすれば繋がれます。

####Mac編
 MacではRDPのアプリケーションも多数存在します。ここはCoRDという無料アプリを使います。
 解凍して、「アプリケーション」フォルダーに移動して、起動します。
 起動した当初は何も出ませんが、下の図のように設定します。
cord.gif

  • Lable:好きのラベルでいい
  • Address:先ほどのIPアドレス
  • Username:デフォルトは「pi」
  • Password:デフォルトは「raspberry」
  • その他:空白で結構です

 設定が終わったら、設定したラベルをクリックするとこんな風に繋がれます。
cord02.gif
 ローカルなので、実機とほとんど変わりません。

####スマホ編
 「RDP」でアプリを検索すればたくさん出ますので、ここでの説明は割愛いたします。接続した実機画面だけ出します。(機器:iPhone 6S,アプリ:RD Client)
IMG_2813.PNG

###2. ngrokでSSHをつなぐ
 せっかくGUIでRaspberry Piと繋いているし、そのままRaspberry Piでngrokをダウンロードします。
ngrok01.gif
Raspberry PiではLinux Arm版を使います

 ダウンロードしたものは~/Download配下にあります。そこでさっきダウンロードしたzipを解凍します。
 ここで一旦SSHの方に戻って、ngrokを実行します

cd ~/Download
./ngrok -help

 ここでngrokの大体な使い方を全部出ます。
ngrok02.png

 ngrokでは、匿名ユーザーとしても使えますが、登録しない限り「HTTPのみ」となっています。今回使いたい「SSH」も「RDS」も、TCPプロトコルで走っているため、登録が必要です。
 GitHubのアカウント持っていれば、簡単に登録ができます。登録が成功したら、authtokenが発行されます。先ほどngrokを実行したフォルダーでそれを入れば、認証されます。
ngrok03.png

./ngrok authtoken あなたのauthtoken

 これでsshをインタネットで公開できます。SSHプロトコルはデフォルトではポート22番で走っていますので、そこをngrokに監視させばOKということです。

./ngrok tcp 22

 下記の画面が出れば、すでにリモートでSSH接続可能になっています。
ngrok04.png

 ここに書いているtcp://0.tcp.ngrok.io:16504にSSHで接続には、下記のコマンドを使います。ポート番号指定するには-p ポート番号は要です。また、無料アカウントだと、毎回アドレスとポート番号が変わります。

ssh pi@0.tcp.ngrok.io -p 16504

 成功すれば以下のようになります
ngrok05.png
 
 ngrokはデフォルトでUSサーバーを使いますので、今はアメリカに一周回って、自宅のRaspberry Piに接続したところです。

###3. ngrokでリモートデスクトップ
 いよいよ本番です。ngrokの無料アカウントができる接続は1つのみとなっていますので、まずはSSH用のngrokをcrtl+cで切断します。
 そして先ほど紹介したように、RDPプロトコルはTCPポート3389を使用しています。なので、SSHと似た感じで、ngrokを3389を監視させばOKです。
 ただし、RDPはSSHより通信量が膨大であるため、さすがにアメリカへ一周回って接続するのは遅いです。なので、ここはngrokのregionをアジア太平洋地区Asia Pacific (ap)にしていします。

./ngrok tcp -region=ap 3389

ngrok06.png
アジア太平洋地区になっています。

 そして、リモートデスクトップアプリを開き、tcp://0.tcp.ap.ngrok.io:15734に繋ぎます。
cord03.gif

 アジア太平洋サーバーとはいえ、海外のサーバーを経由していたため、ローカルよりは若干遅いです。筆者は最初USサーバーを経由して繋いてみました。アジア太平洋サーバーより2倍ほど遅いでした。

24
21
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
24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?