QNAPとIBM Cloud をリモートアクセスVPN(OpenVPN)で接続してIBM Cloud Object Storage にアクセス


# １．はじめに

NASのQNAPとIBM Cloudをリモートアクセス方式VPNのOpenVPNで接続しました。
QNAPの<font color="blue"><strong>「QVPN Service」</stong></font>でVPNクライアントを構成し、IBM Cloud側はVyOSでVPNサーバ構成。
VPNプロトコルは<font color="blue">OpenVPN</font>です。
VPN接続により、QNAPを使用したIBMCloud資源へのアクセスも、よりセキュリティを強化して連携利用できます。例えば、QNAPとIBM Cloud Object Storage(ICOS)間でのセキュアなアクセスが考えられます。
![01.png](http://seahorse-inc.com/QIITA/QNAP-VPN1/01.png)

ここでは、ICOSのプライベート・エンドポイントに接続する構成を構築します。

QNAPの<font color="blue">「HybridMount（ファイルクラウドゲートウェイ）」キャッシュ</font>とIBM Cloudの<font color="blue">プライベートネットワーク</font>を使用しますので、通信の従量課金も安くおさえられるはずです。



# ２．構築

## ２－１．構築手順

構築の手順は下記になります。
　<font color="blue">[VyOS側での作業]</font>
　　<strong>１．認証局の構築と証明書の作成
　　２．OpenVPN構成を定義</strong>
　<font color="blue">[VyOSとクライアントPCでの作業]</font>
　　<strong>３．クライアントPCからOpenVPN接続確認</strong>
　<font color="blue">[QNAP側での作業]</font>
　　<strong>４．接続設定および接続確認
　　５．ルート設定</strong>
　<font color="blue">[IBM Cloud側での作業]</font>
　　<strong>６．ICOSサービスのオーダ、バケットの作成</strong>
　<font color="blue">[QNAP側での作業]</font>
　　<strong>７．ICOSとの接続設定</strong>



## ２－２．全体構成
![021.png](http://seahorse-inc.com/QIITA/QNAP-VPN1/021.png)
![031.png](http://seahorse-inc.com/QIITA/QNAP-VPN1/031.png)

### ２－２－１．オンプレミス側

​　　（１）QNAPのプライベートIPは 192.1681.2

　　（２）QNAPの「QVPN Service」OpenVPNクライアントを使用し、IBM CloudのVyOSとリモートアクセスVPN接続

　　（３）QNAPの「HybridMount（ファイルクラウドゲートウェイ）」を使用し、ICOSのプライベート・エンドポイントに接続

### ２－２－２．IBM Cloud側

　　（１）VyOS（1.1.8）でOpenVPNサーバを設定
　　（２）VyOS　パブリックIP:xxx.yyy.zzz.74　プライベートIP:10.132.35.135
　　（３）VyOSにOpenVPNの認証局を構築
　　（４）OpenVPNクライアント用にポータブルIPを使用
　　　　　ポータブルIP：IPアドレス 10.132.22.200 , ネットワーク 10.132.22.192/28, ゲートウェイ 10.132.22.193
　　（５）ICOSのプライベート・エンドポイントに接続
　　　　　プライベート・エンドポイント：s3.private.jp-tok.cloud-object-storage.appdomain.cloud
　　　　　バケット：Regionalのjp-tok（東京、神奈川、埼玉DCの3拠点に分散保管）

## ２－３．構築設定１　[VyOS側での作業]

[「SoftLayerとVyOSでネットワークの基礎を勉強３-(OpenVPNリモートアクセス編)」](https://qiita.com/Mitsu-Murakita/items/fb23bd7fc7214aabfd48)を参考にしてください。

### ２－３－１．認証局の構築と秘密鍵・公開鍵の作成と署名

VyOSの設定モード（プロンプトが＃）で、root アカウントにパスワードを設定します。

一般モード（プロンプトが＄）から設定モードへは「configure」コマンドで切り替わります。

一般モードへ戻るには「exit」コマンドを実行してください。

```Command:rootアカウントの有効化
# set system login user root authentication plaintext-password rootのパスワード
# commit
# save
```

これで、rootアカウントの設定ができましたので、次にrootユーザに切り換えて認証局の設定を行います。

まず、「exit」で一般モードに切り替え、「$su -」でrootユーザでシェルに入ります。



#### ２－３－１－１．認証局の構築

<font color="red">※初回の時だけ実行し、運用後は実行しないでください。</font>
![05.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/05.png)
① rootユーザーでログイン「su -」
② rootユーザーでログイン　パスワード入力。
③今回使用するVyOSに付属のOpenVPNプログラム類は、/usr/share/doc/openvpn/examples/easy-rsa/2.0/ディレクトリーにあります。
④varsの呼び出し、環境変数の設定
「.  ./vars」
⑤古い鍵ファイル類の消去、認証局の初期化
「./clean-all」
⑥認証局の作成
「./build-ca」
⑦国名コード
⑧都道府県名
⑨都市名
⑩組織名。社名や団体名
⑪省略
⑫共通名
⑬省略
⑭認証局の管理者のメールアドレス

/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
CA証明書---ca.crt
CA秘密鍵---ca.key




#### ２－３－１－２．サーバー側の秘密鍵・公開鍵の作成と署名

<font color="red">※初回の時だけ実行し、運用後は実行しないでください。</font>
![06.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/06.png)
ここではサーバー側の鍵名称を「server」とします。
①サーバー側鍵作成
「./build-key-server server」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧メールアドレス
⑨今回チャレンジパスワードの設定は行わない。「⏎」
⑩「⏎」
⑪「y」
⑫「y」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
サーバー証明書---server.crt
サーバー秘密鍵---server.key


#### ２－３－１－３．クライアント側の秘密鍵・公開鍵の作成と署名
ここではクライアント側の鍵名称を「client」とします。
必要なクライアント数分、名称を変えて繰り返します。
![07.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/07.png)
①クライアント側鍵作成
「./build-key client」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧「⏎」
⑨メールアドレス
⑩今回チャレンジパスワードの設定は行わない。「⏎」
⑪「⏎」
⑫「y」
⑬「y」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
クライアント証明書---client.crt
クライアント秘密鍵---client.key

#### ２－３－１－４．DHパラメータの作成
鍵の交換に使用するDHパラメータを生成します。
![08.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/08.png)①「./build-dh ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
dh1024.pem

#### ２－３－１－５．鍵を所定ディレクトリーへコピー
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されていますので、サーバー用とクライアント用別にそれぞれコピーします。
<font color="blue"><サーバー用></font>
ca.crt,  dh1024.pem, server.crt, server.key
<font color="blue"><クライアント用></font>
ca.crt, client.crt, client.key

ここではサーバー用のファイルを、/root配下にコピーしました。
クライアント用はPCへ転送しますので、/tmpにコピーして下さい。
<font color="red">※注意：client.keyのパーミッションを644にしてください。「chmod 644 /tmp/client.key」
　　　　作成時パーミッションは”６００”ですので、PC転送の際パーミッションエラーになります。</font>

#### ２－３－１－６．クライアント鍵をPCへ転送
ここではSSHクライアントを「Teraterm」を使用しました。
PCへ転送するのは、「ファイル」⇒「SSH SCP...」で転送します。
![09.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/09.png)



### ２－３－２．OpenVPN構成を定義
VyOSの「設定モード」で設定します。
OpenVPNの設定

```OpenVPN
(01) # set interfaces openvpn vtun0 
(02) # set interfaces openvpn vtun0 mode server
(03) # set interfaces openvpn vtun0 openvpn-option "--push route 10.0.0.0 255.0.0.0  --push dhcp-option DNS 10.0.80.11" 
(04) # set interfaces openvpn vtun0 server client client ip 10.132.22.200 
(05) # set interfaces openvpn vtun0 server subnet 10.132.22.192/28 
(06) # set interfaces openvpn vtun0 tls ca-cert-file /root/ca.crt 
(07) # set interfaces openvpn vtun0 tls cert-file /root/server.crt 
(08) # set interfaces openvpn vtun0 tls dh-file /root/dh1024.pem 
(09) # set interfaces openvpn vtun0 tls key-file /root/server.key 
(10) # commit 
(11) # save 
```

<font color="red">※行番号を便宜上付けていますが、実際の入力の際は入れないでください。</font>
(03) SoftLayer側のルート(10.0.0.0 255.0.0.0)とDNS(10.0.80.11)をpushしています。
"redirect-gateway def1"オプションを入れてもいいです。

<font color="red">※QNAPではこの設定は無効になりますので、後ほどQNAPがわでrouteの設定を行います。</font>

(04)クライアントの名前は「client」で、client.crt/client.keyを使用します。
また、プライベートポータブルIPからIPを切りだして、10.132.22.200をアサインしています。
(05)サブネットはプライベートポータブルのネットワーク(10.132.22.192/28)です。
(06)CA証明書の保存場所
(07)サーバー証明書の保存場所
(08)DHファイルの保存場所
(09)サーバー秘密鍵の保存場所

ここまでの設定では、OpenVPN接続しクライアント用のIPが取得できますが、SoftLayerのDNSや、プライベートネットワーク上の他のサーバーと通信するために、NATの設定を行います。

NATの設定

```
(01) # set nat source rule 1 
(02) # set nat source rule 1 outbound-interface eth0 
(03) # set nat source rule 1 source address 10.132.22.192/28 
(04) # set nat source rule 1 translation address masquerade 
(05) # commit 
(06) # save 
```

<font color="red">※行番号を便宜上付けていますが、実際の入力の際は入れないでください。</font>

SourceNATを設定しています。
(02) プライベートのインターフェースはeth0
(03)source アドレスは、プライベートポータブルです
(04)マスカレードの設定にしました

これで、クライアントPCからプライベートネットワーク上の他のサーバーへPINGが通ります。



## ２－４．構築設定２　[VyOSとクライアントPCでの作業]

今まで設定したOpenVPN構成が正しいかをPCから接続して、確認します。
PCはWindows１０を使用しました。尚、OpenVPNクライアントがまだインストールされていない場合は、下記アドレスからダウンロードしてセットアップしてください。
[OpenVPNダウンロード](https://www.openvpn.jp/download/)

サーバー側で作成したca.crt、client.crt、client.keyを
”c:\Program Files\OpenVPN\config"フォルダーへコピーします。

softlayer.ovpn

```
dev tun
client
remote xxx.yyy.zzz.74
ca ca.crt
cert client.crt
key client.key
pull
```

下記メッセージが表示され、正常に接続できました。
![10.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/10.png)
後ほど、この構成をQNAP側でインポートします。

## ２－５．構築設定３　[QNAP側での作業]
### ２－５－１．接続設定および接続確認
「QVPN Service」でOpenVPNクライアントの設定を行います。
![11.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/11.png)

![12.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/12.png)
「VPNクライアント」⇒「VPN接続プロファイル」
「追加」⇒「OpenVPN」

「２－４．構築設定２　[VyOSとクライアントPCでの作業]」で使用した、「softlayer.ovpn」ファイルをインポートします。
![13.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/13.png)

「２－４．構築設定２　[VyOSとクライアントPCでの作業]」で使用した、「ca.crt、client.crt、client.key」ファイルを指定します。
VyOSのパブリックIPは「xxx.yyy.zzz.74/28」ですので、サブネットマスクは「255.255.255.240」になります。
![14.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/14.png)
「作成」

これで、OpenVPNクライアントの定義は完了です。
![15.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/15.png)

それでは、接続してみます。
「アクション」⇒「接続アイコン」をクリック
VPNクライアントIP：10.132.22.200　で接続されています。
![16.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/16.png)

### ２－５－２．ルート設定
SSHでQNAPにログオンし、PINGを使って通信を確認します。
![17.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/17.png)
8.8.8.8 と www.ibm.com 対しては、PING OK　ですが、
ICOS プライベート・エンドポイント と IBM Cloud 内部DNSに対しては、PNG NGでした。
VyOS構成で、「openvpn-option "--push route 10.0.0.0 255.0.0.0”」を設定していますが、QNAPではこのオプションパラメータは無視されるようです。
解決策として、route 10.0.0.0 255.0.0.0 を明示的に設定します。
「[]# route add -net 10.0.0.0 gw 10.132.22.193 netmask 255.0.0.0」

## ２－６．構築設定４　[IBM Cloud側での作業]
### ２－６－１．ICOSサービスのオーダ、バケットの作成
設定作業内容については割愛させていただきます。
[「QNAPとIBM Cloud Object Storage(ICOS）で簡単にファイルサーバを構築してみました」](https://qiita.com/Mitsu-Murakita/items/823c7b93fe0dc7b802e4)を参考にしてください。（４－１．ICOS側）

ここでは、下記の値で作成しました。
![18.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/18.png)

## ２－７．構築設定５　[QNAP側での作業]
### ２－７－１．ICOSとの接続設定
QNAPの「HybridMounr（ファイルクラウドゲートウェイ）」を使い、ICOSのプライベートエンドポイントに接続してバケットにアクセスします。

※PINGを使用して、QNAPからICOSプライベートエンドポイントに通信ができることを確認してください。
![19.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/19.png)
「HybridMount」をクリック

![20.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/20.png)
「リモートマウントの作成」をクリック

![21.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/21.png)
「ファイルクラウドゲートウェイの作成」をクリック

![22.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/22.png)
”クラウドサービス”：「S3 Compatible」を選択　　※注意：「IBM Cloud」ではありません。

「２－６－１．ICOSサービスのオーダ、バケットの作成」で取得した値を入力
”アクセスキー（access_key_id）”、”秘密キー（secret_access_key）”、サーバアドレス（プライベートエンドポイント）

![23.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/23.png)
”システムプロキシ設定を使用”：チェックを外す。
「検索」をクリックし、バケットを選択⇒「次へ」

![24.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/24.png)
「作成」をクリック

![25.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/25.png)
「閉じる」をクリック

PCのフォルダーにドキュメント保存し、転送されているかを確認する。
![26.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/26.png)

QNAP　File Stationでドキュメントの存在が確認できました。
![27.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/27.png)

ICOSでドキュメントの存在が確認できました。
![28.png](http://www.seahorse-inc.com/QIITA/QNAP-VPN1/28.png)

以上ですべての設定作業が完了です。

# ３．通信設定での注意点
今回の設定で下記の問題がありました。その際の対応内容を記載します。
（１）DNS参照できないため、名前解決できない場合
　　　QNAPのネットワーク設定にてDNSを設定後、QNAPを再起動すると名前解決できない。
　　　対応）SSHクライアントにてログイン後、/etc/resolv.conf に直接DNSを記述する。
　　　　　　例：nameserver  8.8.8.8   
   　　　　　nameserver が127.0.0.1 のループバックアドレスの設定になっていたため。

（２）ICOSのプライベート・エンドポイントにアクセスできない場合
　　　対応）IBM Cloudのリソースアクセスのために、下記ルートを設定する
　　　　　　route add -net 10.0.0.0 gw ポタブルIPのgw netmask 255.0.0.0

# ４．おわりに
QNAPとIBMCloud間でセキュアな接続が可能（OpenVPN）という事がわかり、ICOS以外にも利用できそうです。
「３．通信設定での注意点」でQNAPを再起動すると値を再度設定する必要がある。永久適用したいところであるが、カスタマイズされたLinixであるため設定箇所がわかりません。
この点は調査して情報を更新したいと思います。