のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

DeepLearning&xR開発用PCを構築する 〜その3:VPNでセキュアなリモート開発環境設定編〜

今回やること

今回は外部ネットワークからVPNで自宅開発環境へ接続できるようにすることを目標とする。

ちなみに、現状ではmDNSを利用して簡単にlocalのデバイスに接続できるようになっており、Visual Studio Codeの`remote-development(remote-ssh)を使用すれば、低スペックなクライアントマシンから、ハイスペックなCUIのubuntuサーバ(物理)で開発出来るようになっている。

やるべきこと、知っておくべきこと

基本的に何をすべきか、は以下がわかりやすい。

ja.softether.org

クライアントソフトの前に、接続先である自宅ネットワークにVPNサーバを建てる必要がある。上記はリモートアクセスVPNと呼ばれるようだ。

また、もう一つVPN専用のネットワークを作成して、VPNネットワーク接続しているクライアント間で接続出来るようにするアドホックVPNというものもある。

ja.softether.org

上記の場合、自宅サーバを常にVPNへつなげる必要があるのでそれは自宅内で使用する際にはちょっとめんどくさいし、最終的には開発サーバ以外にも入れるようにしたいこともあり、今回はリモートアクセスVPNで行こうと思う。

あとサーバを建てる際にもそれぞれで同一のプロトコルが使用できるかも確認したい。

結局やることはいかだろう。

  1. 自宅サーバ(接続先PC)を静的IP化
  2. DDNSで自宅サーバに独自ドメインを設定
  3. 自宅にVPNサーバを設置(ルータ設定)
  4. 使用側(クライアント)にVPNクライアントソフトウェアを導入

1. 自宅サーバを静的IP化

実を言うと、これは今回mDNSを設定していれば不要な設定である。

これについては通常は各サーバのネットワーク設定を直接編集して実現するのだが、今回使用しているTP-LINKのルータではルータ側でmacアドレスとIPアドレスをバインドして、実質的に静的IPを実現することが出来る。

tplinkの設定で言えば、以下の2点の設定でいける。(前者でもすでに割当は固定化されるようにみえたが、縛るのは後者の設定)

  • ネットワーク>DHCPサーバー>アドレス予約
  • セキュリティ> IP&MACバインディング

www.tp-link.com

ただ、よくわからなかったのがMacのIPを試しにMac側の設定を編集(手動入力)して、IPを固定化したところネットワークへ繋がらなくなった。

おそらくLAN内のルーティングに失敗しているのだが、ここらへんすっかり忘れてしまったので後日調査してみたい。

DDNSの設定

そもそもDDNSとは動的なDNSサービスのことで、DNSサービスがFQDN-(グローバル)IPアドレス変換を行うものであることはすでに理解していると思う。

「動的」である必要性は、グローバルIPが変化した際にも追従して名前解決を行うことが出来るようにするためだ。

これについては有償/無償含めいくつかサービスの候補があり、今回はtplink-cloudのddnsサービス(無償)を使用した。

VPNサーバの用意

これはいくつか方法があるが、今回はルータの内臓機能のVPNサーバを使おうとおもう。使用するのはTP-linkのArcher A10www.tp-link.com

Archer A10では2種類のプロトコルがサポートされており、この内PPTPはすでに非推奨の方式なので、今回はOpenVPNを使用してサーバを構築する。 方法については以下で解説がある。

www.tp-link.com

設定項目として、プロトコルはUDP、サービスポートは1149と、それぞれ一般的に使用されるデフォルトポートを使用する設定とした。

これまでの設定を完了していれば、まずは証明書の生成をおこなう。(数十分はかかる)

あとは有効にチェックを入れ、保存すればOpenVPNサーバの設定は完了である。

使用側(クライアント)にVPNクライアントソフトウェアを導入

OpenVPNのインストール

ラストはクライアント側の設定である。

まずは、OpenVPNのサイトからVPNClientをインストールする。今回はアクセスする端末がwindowsなので、for windowsをインストールした。

www.openvpn.jp

ちなみにwindowsにはGUIクライアントであるvpnux-clientというソフトがあるが、設定内容を理解していないとちょっとハマりやすいので、別記事で紹介する。

また、macの場合はTunnelbulickと呼ばれるGUIツールがあるのでそれを使用する。

接続設定&認証情報を取得&OpenVPNへ反映

これは私の場合であるが、tp-linkルータの設定画面で先程VPNサーバを設定したところで証明書のエクスポートができる。

エクスポートした設定ファイル(.ovpn形式)をクライアントPCへダウンロードする。

windowsの場合は、C:\Program Files\Open VPN\conigにovpnファイルを保存することで設定を利用できる。 あとはOpenVPN GUIを起動することで接続が始まる。(複数設定がある場合はどうなるかわからないが、おそらく選択出来るはず)

接続したその後

VPN状態でサーバへ接続確認

接続が完了した、と表示がおそらく出るので、そうすればアクセス出来る状態になっているはずである。

今の状態ではクライアントPCにリモートアクセス先のプライベートIPが割り当てられている、つまり擬似的にリモートアクセス先と同一のネットワークにつながっている状態なので、たとえば1で静的IPを192.168.0.4と設定したのなら、

$ ssh user@192.168.0.5

# mDNSを設定していれば(windowsは別途準備が必要)
$ ssh ubuntu

という風にプライベートIPアドレスやmDNSを使用して、ssh接続することが出来る。

sshが問題なくできたら…開発準備!

sshではいった後、開発はどうするのか?

答えはVisual Studio Codeの拡張機能、remote-developmentに含まれているremote-ssh を使用してリモート環境をそのまま使用して開発する。

remote-sshの使用には、基本的にはssh_configがちゃんと設定されていれば非常に簡単に使える。 使い方については、

  1. [F1キー]→remote-ssh:を入力して候補からConect-hostを選択
  2. ホストの候補が表示されるので、接続したいホストを選択

これで接続できる。(もしかしたらAdd hostみたいなのが先に必要になるかもしれない)

やり方は色々あるようなので、ssh_configをちゃんと書かない場合は以下を参照。

code.visualstudio.com

これでVScodeさえ動けばいいレベルの軽量低スペックPCでリモート開発が可能になった。

参考

wwq.mydns.jp

www.pizaman.com

arimasou16.com

www.tablet-time-recorder.net

シリーズ

www.nooozui.com

www.nooozui.com