2017年8月9日水曜日

QNAPとOpenVPNを使って自宅にVPN接続する方法

インターネット経由で自宅のネットワークにアクセスできると何かと便利ではあるが、外からRDPやSSHで接続できるようポートを開けてしまうと、外部からの攻撃や乗っ取りのリスクが高まるため望ましくない。実際に身近でも、外からRDPで接続できるようポートを開けていたら、PCが乗っ取られてしまったというケースを聞いたことがある。

というわけで外部から自宅内ネットワークに安全にアクセスするために、VPNによるアクセスを実施することにした。具体的には、QNAPのNASをVPNサーバーとして設定し、WindowsやAndroidからVPNで接続できるようにしてみた。

QNAPの設定

本記事で掲載する画面キャプチャは、QTSバージョン:4.3.3のものとなるが、4.2.xでもほぼ同様の画面となっているはず。

まず、App Centerを開き、「QVPN Service」をインストールする。


インストール後、QVON Serviceを開く。VPNの方式として、「PPTP」、「OpenVPN」、「L2TP/IPsec」の3種類が選べる画面が表示されるが、今回は「OpenVPN」でのみ有効化する。


その後、OpenVPNの設定画面を開き、「証明書のダウンロード」ボタンをクリックすると<ホスト名>-ovpn.zipというファイルがダウンロードできる。このファイルの中には、以下が含まれている。

 ・openvpn.ovpn : OpenVPNのプロファイルファイル
 ・ca.crt     : 証明書

このファイルは後ほど、OpenVPNのクライアント側で必要となるので、PC等に保存しておこう。


また、権限設定の画面で、接続可能とするユーザー一覧を設定できる。今回はVPN接続用に専用ユーザーを作っておいた(念のため画像のユーザー名は黒塗りしておく)。


ルーターの設定

OpenVPNはUDPの1194ポートを使うため、ブロードバンドルーターでポート開放を行う必要がある。設定方法は各社のルーターのマニュアルを確認するしかないが、通常は「ポートマッピング」といった呼ばれ方の設定項目があるはずで、外部からの特定ポートのアクセスをLAN側の特定のサーバに転送する(NATする)機能となる。

設定内容としては以下のように行う。

 ・LAN側ホスト:QNAPのIPアドレスを設定
 ・プロトコル:UDP
 ・ポート番号:1194

Windowsからの接続

Windowsの場合、まずは以下URLからOpenVPNのクライアントをダウンロードする(「Windowsインストーラ」をダウンロードすればよい)。

ダウンロードURLの注意書きに「vpnux Clientがお勧めです」との記載もあるので、そちらを利用してもよい。私はvpnux Clientは使ったことがないので、今回はOpenVPNを使って接続する。

・OpenVPN.JP - ダウンロード
https://www.openvpn.jp/download/


インストーラーを実行して、すべてデフォルトでインストールをすればよい。途中でデバイスのインストールの警告が表示されるが、こちらも「インストール」を押しておく。


インストール後、先ほどQNAPからダウロードしたプロファイルファイル(openvpn.ovpnとca.crt)の配置を行う。配置パスは以下となる。

C:\Program Files\OpenVPN\config


あとは、「OpenVPN GUI」を起動すると、タスクトレイにアイコンが表示されるので、右クリック→「接続」で接続ができるはず。


Androidからの接続

Androidの場合は、Google Play Storeから「Open VPN Connect」を検索して、インストールをする。

OpenVPN Connectを起動して、右上の設定ボタンから「Preferences」を選択し、「Force AES-CBC ciphersuites」を有効にしておく。これを設定しておかないと、なぜか接続に成功しなかった。


次に、QNAPからダウロードしていたプロファイルファイルをインポートするのだが、Windowsと異なり少し細工が必要となる。簡単に言うと、openvpn.ovpnとca.crtのファイルを1つに統合する必要がある。

openvpn.ovpnをテキストエディタで開き、以下赤字箇所を変更する。

・openvpn.ovpn (修正前)
------------------------------
client
dev tun2001
script-security 3
proto udp
explicit-exit-notify 1
remote  <Server Address>  1194
resolv-retry infinite
nobind
ca ca.crt
auth-user-pass
reneg-sec 0
cipher AES-128-CBC
tls-cipher TLS-SRP-SHA-RSA-WITH-3DES-EDE-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA
comp-lzo
------------------------------

・openvpn.ovpn (修正後)
------------------------------
client
dev tun2001
script-security 3
proto udp
explicit-exit-notify 1
remote  <Server Address>  1194
resolv-retry infinite
nobind
<ca>
-----BEGIN CERTIFICATE-----     ←★ca.crtの中身をそのまま貼る
XXXXXXX

~(中略)~

XXXXXXX
-----END CERTIFICATE-----
</ca>
auth-user-pass
reneg-sec 0
cipher AES-128-CBC
tls-cipher TLS-SRP-SHA-RSA-WITH-3DES-EDE-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA
comp-lzo
------------------------------

上記のopenvpn.ovpnをAndroid上にコピーし、「Import」→「Import Profile from SD card」で該当ファイルを選択しインポートする。

あとは、「OpenVPN Connect」で接続すれば、以下の通り接続できるはず。


以上で、QNAPをVPNサーバーとして、外部からVPNすることに成功した。外出先から自宅環境のファイルを見たり、検証サーバーにアクセスしたり、非常に便利と感じている。