- 今回やること
- やるべきこと、知っておくべきこと
- 1. 自宅サーバを静的IP化
- DDNSの設定
- VPNサーバの用意
- 使用側(クライアント)にVPNクライアントソフトウェアを導入
- 接続したその後
- 参考
- シリーズ
今回やること
今回は外部ネットワークからVPNで自宅開発環境へ接続できるようにすることを目標とする。
ちなみに、現状ではmDNSを利用して簡単にlocalのデバイスに接続できるようになっており、Visual Studio Codeの`remote-development(remote-ssh)を使用すれば、低スペックなクライアントマシンから、ハイスペックなCUIのubuntuサーバ(物理)で開発出来るようになっている。
やるべきこと、知っておくべきこと
基本的に何をすべきか、は以下がわかりやすい。
クライアントソフトの前に、接続先である自宅ネットワークにVPNサーバ
を建てる必要がある。上記はリモートアクセスVPN
と呼ばれるようだ。
また、もう一つVPN専用のネットワークを作成して、VPNネットワーク接続しているクライアント間で接続出来るようにするアドホックVPN
というものもある。
上記の場合、自宅サーバを常にVPNへつなげる必要があるのでそれは自宅内で使用する際にはちょっとめんどくさいし、最終的には開発サーバ以外にも入れるようにしたいこともあり、今回はリモートアクセスVPN
で行こうと思う。
あとサーバを建てる際にもそれぞれで同一のプロトコルが使用できるかも確認したい。
結局やることはいかだろう。
- 自宅サーバ(接続先PC)を静的IP化
- DDNSで自宅サーバに独自ドメインを設定
- 自宅にVPNサーバを設置(ルータ設定)
- 使用側(クライアント)にVPNクライアントソフトウェアを導入
1. 自宅サーバを静的IP化
実を言うと、これは今回mDNSを設定していれば不要な設定である。
これについては通常は各サーバのネットワーク設定を直接編集して実現するのだが、今回使用しているTP-LINKのルータではルータ側でmacアドレスとIPアドレスをバインドして、実質的に静的IPを実現することが出来る。
tplinkの設定で言えば、以下の2点の設定でいける。(前者でもすでに割当は固定化されるようにみえたが、縛るのは後者の設定)
- ネットワーク>DHCPサーバー>アドレス予約
- セキュリティ> IP&MACバインディング
ただ、よくわからなかったのがMacのIPを試しにMac側の設定を編集(手動入力)して、IPを固定化したところネットワークへ繋がらなくなった。
おそらくLAN内のルーティングに失敗しているのだが、ここらへんすっかり忘れてしまったので後日調査してみたい。
DDNSの設定
そもそもDDNSとは動的なDNSサービスのことで、DNSサービスがFQDN-(グローバル)IPアドレス変換を行うものであることはすでに理解していると思う。
「動的」である必要性は、グローバルIPが変化した際にも追従して名前解決を行うことが出来るようにするためだ。
これについては有償/無償含めいくつかサービスの候補があり、今回はtplink-cloudのddnsサービス(無償)を使用した。
VPNサーバの用意
これはいくつか方法があるが、今回はルータの内臓機能のVPNサーバを使おうとおもう。使用するのはTP-linkのArcher A10
。
www.tp-link.com
Archer A10では2種類のプロトコルがサポートされており、この内PPTPはすでに非推奨の方式なので、今回はOpenVPNを使用してサーバを構築する。 方法については以下で解説がある。
設定項目として、プロトコルはUDP、サービスポートは1149と、それぞれ一般的に使用されるデフォルトポートを使用する設定とした。
これまでの設定を完了していれば、まずは証明書
の生成をおこなう。(数十分はかかる)
あとは有効にチェックを入れ、保存すればOpenVPNサーバの設定は完了である。
使用側(クライアント)にVPNクライアントソフトウェアを導入
OpenVPNのインストール
ラストはクライアント側の設定である。
まずは、OpenVPNのサイトからVPNClientをインストールする。今回はアクセスする端末がwindowsなので、for windowsをインストールした。
ちなみに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
がちゃんと設定されていれば非常に簡単に使える。
使い方については、
- [F1キー]→remote-ssh:を入力して候補から
Conect-host
を選択 - ホストの候補が表示されるので、接続したいホストを選択
これで接続できる。(もしかしたらAdd hostみたいなのが先に必要になるかもしれない)
やり方は色々あるようなので、ssh_configをちゃんと書かない場合は以下を参照。
これでVScodeさえ動けばいいレベルの軽量低スペックPCでリモート開発が可能になった。