#導入
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を使用して接続します。
#本文
##材料:
- セッテイング済みのRaspberry Pi 3B一台
- WIFI回線環境
- 接続用のパソコン、スマホ数台
##方法:
###1. ローカルでRDPを使う
まずはRaspberry Piと接続用のパソコンが同じWiFi回線に入っていることを確保します。
そして、IPスキャンアプリを使ってスキャンします
私の場合、Raspberry Piのホスト名を変更しましたが、変更していないRaspberry Piではraspberrypi.local
というホスト名です。
そのホスト名のIPアドレスを使ってsshで入ります。
ssh pi@RaspberryPiのIP
password:初期設定だと「raspberry」
こんな画面が出れば、SSHで入りました。Raspberry PiのCPUは弱小なので、出るまで時間かかる可能性があります。
そして一刻も早く、RDPを使えるようにします
今回使うのはxrdp
というアプリケーションです。「Raspberry Pi」「xrdp」をキーワードで検索すればたくさん情報が出ます。
早速インストールします。
sudo apt-get install xrdp
長い待ち時間の後、いよいよRDPが使えるようになりました。
####Windows編
RDPはWindowsデフォルトの機能なので、スタートメニューで「RDP」を調べればすぐ出ます。後は案内メッセージに従ってセッテイングすれば繋がれます。
####Mac編
MacではRDPのアプリケーションも多数存在します。ここはCoRDという無料アプリを使います。
解凍して、「アプリケーション」フォルダーに移動して、起動します。
起動した当初は何も出ませんが、下の図のように設定します。
- Lable:好きのラベルでいい
- Address:先ほどのIPアドレス
- Username:デフォルトは「pi」
- Password:デフォルトは「raspberry」
- その他:空白で結構です
設定が終わったら、設定したラベルをクリックするとこんな風に繋がれます。
ローカルなので、実機とほとんど変わりません。
####スマホ編
「RDP」でアプリを検索すればたくさん出ますので、ここでの説明は割愛いたします。接続した実機画面だけ出します。(機器:iPhone 6S,アプリ:RD Client)
###2. ngrokでSSHをつなぐ
せっかくGUIでRaspberry Piと繋いているし、そのままRaspberry Piでngrokをダウンロードします。
Raspberry PiではLinux Arm版を使います
ダウンロードしたものは~/Download
配下にあります。そこでさっきダウンロードしたzipを解凍します。
ここで一旦SSHの方に戻って、ngrokを実行します
cd ~/Download
./ngrok -help
ngrokでは、匿名ユーザーとしても使えますが、登録しない限り「HTTPのみ」となっています。今回使いたい「SSH」も「RDS」も、TCPプロトコルで走っているため、登録が必要です。
GitHubのアカウント持っていれば、簡単に登録ができます。登録が成功したら、authtoken
が発行されます。先ほどngrokを実行したフォルダーでそれを入れば、認証されます。
./ngrok authtoken あなたのauthtoken
これでsshをインタネットで公開できます。SSHプロトコルはデフォルトではポート22番で走っていますので、そこをngrokに監視させばOKということです。
./ngrok tcp 22
下記の画面が出れば、すでにリモートでSSH接続可能になっています。
ここに書いているtcp://0.tcp.ngrok.io:16504
にSSHで接続には、下記のコマンドを使います。ポート番号指定するには-p ポート番号
は要です。また、無料アカウントだと、毎回アドレスとポート番号が変わります。
ssh pi@0.tcp.ngrok.io -p 16504
成功すれば以下のようになります
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
そして、リモートデスクトップアプリを開き、tcp://0.tcp.ap.ngrok.io:15734
に繋ぎます。
アジア太平洋サーバーとはいえ、海外のサーバーを経由していたため、ローカルよりは若干遅いです。筆者は最初USサーバーを経由して繋いてみました。アジア太平洋サーバーより2倍ほど遅いでした。