雑食エンジニアの気まぐれレシピ

日ごろ身に着けた技術や見知った知識などの備忘録的なまとめ.主にRaspberry Piやマイコンを使った電子工作について綴っていく予定.機械学習についても書けるといいな.

レオリモコンとAlexaを連携させる[GCEとOpenVPN]

今回はGoogleCloudPlatfotmのインスタンス立ち上げとOpenVPNの設定についてです.下図で言うところの④ですね. f:id:shikky_lab:20180811060042p:plain

ぶっちゃけ先人達が非常に分かりやすい記事をいくつも上げてくれているので私が語れるところはほとんどないのですが,ところどころ詰まったところを中心に補足を入れていければと思います.

GCPインスタンス立ち上げ

[概要編]で触れましたが,レオネット下でアレクサ連携を行うためにはグローバルIPアドレスを持った外部サーバが必要です.今回はGCPクラウドサーバであるGCE(GoogleComputeEngine)を使います.理由は単純で,無料だからです(最小構成の場合).
GCEの無料運用については
GCE の無料枠のサーバを立るときに、初見でハマりそうなところ
様の記事を大変参考にさせていただきました.SSH認証鍵のところに何を入れればいいのかよくわからずに少し詰まりましたが,ここはgit-bashなどで

ssh-keygen -t rsa -C "ユーザー名"

で叩いた後,生成された.pubファイルの中身をそのまますべて張り付ければOKでした.
なお,サーバへのアクセス時はターミナルから

ssh "サーバのIPアドレス" -i ~/.ssh/id_rsa -l "ユーザ名"

でアクセスできます.
また,GCEはファイアウォールの設定に少し癖があるのですが,
GCPのFW設定 | Skyarch Broadcasting
様の記事が大変わかりやすかったです.

OpenVPNの構築

OpenVPNについても先人が丁寧に解説してくださっているため,
図解!UbuntuでOpenVPNを使う:2. 証明書と認証鍵の作成
様の書かれている通りに進めていけば構築できました.
なお動作種別ですが,今回はtun(ルータモード)で動作させました.

少し突っかかったのはクライアント部分ですね.
クライアントはRaspberryPi3を使いました(ホントはA+が使いたかったのですが,ネットワーク系がいきなり繋がらなくなってしまったのでやむなく・・・・・・).OpenVPN接続をするには,サーバ側で生成した鍵などをクライアントに持ってくる必要があります. 持ってくるファイルは以下です.

  • client.key :クライアントの秘密鍵
  • client.crt :クライアントの証明書
  • ca.crt :認証局の証明書
  • ta.key :TLS-Auth key(オプション)1

これを持ってくるにはSCPというSSH経由でファイルをコピーするというコマンドを使うのが一般的らしいのですが,使い方がいまいちわからず苦労しました.結局,

scp -i ~/.ssh/id_rsa ログイン名@サーバのIPアドレス:コピー元のパス コピー先のパス

でうまくいきました.なお,SSHポートを変更している場合は,

scp -P ポート番号 -i ~/.ssh/id_rsa ログイン名@サーバのIPアドレス:コピー元のパス コピー先のパス

となります.
補足ですが,easy-sshで生成した鍵などはすべて/etc/openvpn/easy-rsa/keysの中に置かれます.しかし,ここはルート権限がないと入れないためSCPコマンドを使う前にほかの場所に移しておく必要があります.また各ファイルについてもユーザ権限ではコピーできないため,chmodなどで適宜変更しておく必要があります(もちろんSCPをルート権限で使用する場合はこの操作は不要です).

上記ファイルを持ってきて,openvpnのconfigファイル内でパスを指定したら,

sudo systemctl start openvpn@client

で開始できると思います.ログは/var/log/syslogに出力されます.
正常に接続できていたら,ifconfigで10.8.0.XのIPアドレスが振られていることが確認できると思います(特に設定を変更していない場合).ファイアウォールを空けておけばこのIPアドレス経由で相互通信が可能です.

さて,説明を先人にぶん投げてしまったので内容スッカスカですが,OpenVPNの構築はこんなところでしょうか.次はNode-REDの部分について書きたいと思います.それでは.