remoteaccess-img

2年ほど前から続いていた、外出先から自宅のパソコンにアクセスしたい問題ですがとうとう解決で完結です、たぶん

ここまでの流れ

簡単にこれまでの流れ

外出先から自宅パソコンのデータを見たいです
ファイルサーバーのデータを直接書き換えたりできたら嬉しいです
そもそもパソコン自体をリモートで使えるといいです

ということで色々考えた結果 VPN にしました

サーバーがミニ PC の Windows 環境ということもあって、ルーターの VPN 機能を使おうとしました
L2TP/IPSec という方式らしくて事前共有キーと id/password でログインできました

これで無事完了かと思っていたら、 VPN が繋がらなくなっていました
ルーター側が勝手に PPPoE から IPoE に切り替えていたらしく、 IPoE モードに切り替わると VPN 機能は無効になるようでした
ぐぐると対処方法を書いてるページがあったので、それを参考に元の設定に戻してつながるようになりました

・・・が、また問題が起きて、 VPN が安定しません
一度はつながるのに数日するとつながらなくなり、キーを再作成するとつながるようになったり、謎の挙動
VPN の設定画面が異様に重たかったり、つながったときも通信速度がすごく遅かったりです
ルーターのオマケ機能の VPN はやめたほうがいいのでしょうか・・・

詳細は各ページで・・・
外出先から自宅のパソコンにアクセスしたい!
VPN 接続できるようになった!!
VPN がつながらなくなってた
VPN がつながらなくなる

OpenVPN にした

ルーターの VPN 機能を諦めるとなると、サーバーのパソコン側で外部からのアクセスを受け付ける必要があります
Windows なので ssh サーバーよりは VPN かな、ということで VPN ソフトを調べました
最近のやシンプルそうなのは Linux がメインということもあって、結局 OpenVPN にしました

有名どころですが、複雑で重たいという印象で、できれば避けたかったのですが仕方がないです
ただ個人用なら結構簡単に設定できました

使い方を調べて出てくる、 CA を作って証明書を作って~、みたいなのは不要です
この辺が一番の OpenVPN は避けたいなと思うところだったので助かりました
L2TP/IPSec のときのように事前共有キーを作って、それをサーバーとクライアントに設置するだけです

日本語でわかりやすく説明してるページがあったのでだいたいこの通りにやりました
https://www.openvpn.jp/document/quickstart-statickey/

ただ情報が古いようで修正するところもあります

インストール

普通にインストールするとサーバー用のサービスがインストールされなかったです
サーバーにインストールするときは、 Customize を選んで 「OpenVPN Service」 をインストールするものに追加する必要があります

鍵ファイルを作る

鍵ファイルをつくるときの

「--genkey --secret (ファイル名)」

は廃止されてるみたいなので、

「--genkey secret (ファイル名)」

に変更

「openvpn --genkey secret C:\tmp\static.key」

という感じで鍵ファイルを作ります

普通にインストールすると OpenVPN は Program Files の中にインストールされます
openvpn.exe があるフォルダにファイルを作る権限がないと言われるので、鍵ファイルは別フォルダに作っています

設定ファイル

設定ファイルを用意します

サーバー側はこんな感じです

[statickey_server.ovpn]
proto udp4
dev tun
port 1194
ifconfig 10.8.0.1 10.8.0.2
secret static.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key

クライアント側はこんな感じです

[statickey_client.ovpn]
remote (自宅のIPアドレス)
proto udp4
dev tun
port 31194
ifconfig 10.8.0.2 10.8.0.1
secret static.key
keepalive 10 60
ping-timer-rem
persist-tun
persist-key

comp-lzo は公式ドキュメントによると推奨されてないみたいなので除去
https://openvpn.net/community-resources/reference-manual-for-openvpn-2-6/

udp だけだと v4/v6 で判断できないみたいなメッセージが出てたので、明示的に udp4 を指定しました

OpenVPN の接続は TUN/TAP の 2 つがあって、 dev でどっちを使うか指定できます
VM やルーター設定の NAT/ブリッジに対応しています
TUN だとサーバーの中のネットワーク上にクライアントが所属する感じです
サーバーと同じネットワークの IP アドレスは割り当てられません
サーバーの IP アドレスが 192.168.100.100/24 だとして、 192.168.100.101 にクライアントからアクセスしたい場合は、 VPN のサーバーを経由するようルーティング設定が必要なはずです
逆に 192.168.100.101 の端末からクライアントにアクセスするときはサーバー側で内部のネットワークに転送設定が必要なはずです
どっちもやってませんけど・・・
TAP だとサーバーと同じネットワークに IP アドレスを取得するので、細かいことは気にせず相互にアクセスできそうです

port は基本的にサーバーとクライアントで同じものを指定しますが、ルーターでポートを転送しているので別になってます
標準ポートって攻撃対象になりやすいのでサーバー側は外部からは 31194 という風に変えています
ルーター:31194 ⇨ VPNサーバー:1194 のように変換しているので、クライアントはサーバーの 31194 にアクセスします
ルーターで変換されるのでサーバーは通常の 1194 をリッスンします
ルーターでポートを変えず、そのまま通すならサーバーも 31194 でリッスンします

ifconfig は TUN の場合、 VPN のネットワーク上の IP アドレスで先に自分、後に相手を書くようです
上の設定だとサーバーの IP アドレスは 10.8.0.1 なので、 VPN 接続中にクライアントからサーバーパソコンにアクセスするときの IP アドレスは 10.8.0.1 でアクセスできます

secret に設定している static.key は作った鍵ファイルを指定します

keepalive 以降の設定は接続を保持するためとりあえず書いておけばいいものらしいのでコピペで書いてます

クライアント側は接続先のサーバーの IP アドレス(ホスト名) を remote に指定します

接続

まずサーバー側で設定ファイルを OpenVPN で開き、次にクライアント側で同様に OpenVPN で開きます

「Initialization Sequence Completed」 とメッセージが出たら成功です
出ていても ping や Windows のフォルダ共有は Firewall で弾かれてつながらないかもしれないです
RDP は弾かれないみたいなので疎通確認にはちょうどよかったです
ただ、 RDP は事前設定が必要だったりするので、一時的に Firewall を解除して試すほうが楽かも

ログに 128bit がセキュアじゃないみたいな警告が出てましたが、問題なくつながるのでとりあえず無視

快適

VPN 経由で RDP を使っても、 VPN なしで自宅内で RDP 接続で操作してるときとあんまり変わりません
すごく快適です

RDP 越しにリモートのストレージにあるマンガを不満なく読めたりします
ちなみに RDP だと画面に映ってる分のデータだけなので、大きめの画像全体をローカルに持ってきて表示するよりは転送量が少なくなりました
1 ファイルが 1, 2MB ある画像を 10 枚ほどみても 6MB 程度の通信量でした
音楽や動画ならともかく、マンガを見るなら共有フォルダへ直接アクセスするより RDP のほうがいいかもですねー

あと思ったのは、アクションしない放置系のゲームは RDP 越しでするのもありかもしれません
現状はサーバーが最低限の低スペ Celeron PC なのでゲームはできたものじゃないですが、性能があればストレージやメモリの小さいノートパソコンでやるよりはいいかもしれないです
ただそうなるとサーバーは常時起動しているので電気代が高くなるのが困るところなんですよね

自動起動

サーバーたるもの常時起動していて欲しいのですが、さっきの設定ファイルを実行する方法だと WindowsUpdate などで再起動してしまうと接続できなくなってしまいます

調べると config-auto フォルダに .ovpn ファイルを入れると自動起動してくれるそうです
config はあるのに config-auto はなかったので自分で作って入れてみたのですがダメでした

サービスに OpenVPN はあって実行中になっていたのですが、これは別物のようです
インストール時に追加でチェックを入れてインストールすると config-auto フォルダが作られました
config-auto フォルダがない場合はインストール時に必要なサービスをインストールできていないので、一度アンインストールしてカスタムインストールが必要です

config-auto に設定ファイルを入れて再起動すると自動でサーバーが起動するようになりました

完結

快適に外部から自宅のパソコンを操作できるようになりました!
これで外出前にノートパソコンに必要そうなデータをコピーする手間はありません
ルーターの VPN と違ってしばらく使っても安定しています

ただ、せっかく環境が整ったのに、今のところ使うタイミングが全然ないんですよね
意味もなくとりあえず接続してみて、ファイルを開いたりして「よし大丈夫だな」っと自己満足しただけです

でもまあこれまでと違って残ってる問題はないのでキレイに解決して終了、ですね
(で、あってほしいです)