1.はじめに
NASのQNAPとIBM Cloudをリモートアクセス方式VPNのOpenVPNで接続しました。
QNAPの「QVPN Service」でVPNクライアントを構成し、IBM Cloud側はVyOSでVPNサーバ構成。
VPNプロトコルはOpenVPNです。
VPN接続により、QNAPを使用したIBMCloud資源へのアクセスも、よりセキュリティを強化して連携利用できます。例えば、QNAPとIBM Cloud Object Storage(ICOS)間でのセキュアなアクセスが考えられます。
ここでは、ICOSのプライベート・エンドポイントに接続する構成を構築します。
QNAPの「HybridMount(ファイルクラウドゲートウェイ)」キャッシュとIBM Cloudのプライベートネットワークを使用しますので、通信の従量課金も安くおさえられるはずです。
2.構築
2-1.構築手順
構築の手順は下記になります。
[VyOS側での作業]
1.認証局の構築と証明書の作成
2.OpenVPN構成を定義
[VyOSとクライアントPCでの作業]
3.クライアントPCからOpenVPN接続確認
[QNAP側での作業]
4.接続設定および接続確認
5.ルート設定
[IBM Cloud側での作業]
6.ICOSサービスのオーダ、バケットの作成
[QNAP側での作業]
7.ICOSとの接続設定
2-2.全体構成
2-2-1.オンプレミス側
(1)QNAPのプライベートIPは 192.1681.2
(2)QNAPの「QVPN Service」OpenVPNクライアントを使用し、IBM CloudのVyOSとリモートアクセスVPN接続
(3)QNAPの「HybridMount(ファイルクラウドゲートウェイ)」を使用し、ICOSのプライベート・エンドポイントに接続
2-2-2.IBM Cloud側
(1)VyOS(1.1.8)でOpenVPNサーバを設定
(2)VyOS パブリックIP:xxx.yyy.zzz.74 プライベートIP:10.132.35.135
(3)VyOSにOpenVPNの認証局を構築
(4)OpenVPNクライアント用にポータブルIPを使用
ポータブルIP:IPアドレス 10.132.22.200 , ネットワーク 10.132.22.192/28, ゲートウェイ 10.132.22.193
(5)ICOSのプライベート・エンドポイントに接続
プライベート・エンドポイント:s3.private.jp-tok.cloud-object-storage.appdomain.cloud
バケット:Regionalのjp-tok(東京、神奈川、埼玉DCの3拠点に分散保管)
2-3.構築設定1 [VyOS側での作業]
「SoftLayerとVyOSでネットワークの基礎を勉強3-(OpenVPNリモートアクセス編)」を参考にしてください。
2-3-1.認証局の構築と秘密鍵・公開鍵の作成と署名
VyOSの設定モード(プロンプトが#)で、root アカウントにパスワードを設定します。
一般モード(プロンプトが$)から設定モードへは「configure」コマンドで切り替わります。
一般モードへ戻るには「exit」コマンドを実行してください。
# set system login user root authentication plaintext-password rootのパスワード
# commit
# save
これで、rootアカウントの設定ができましたので、次にrootユーザに切り換えて認証局の設定を行います。
まず、「exit」で一般モードに切り替え、「$su -」でrootユーザでシェルに入ります。
2-3-1-1.認証局の構築
※初回の時だけ実行し、運用後は実行しないでください。
① 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
2-3-1-2.サーバー側の秘密鍵・公開鍵の作成と署名
※初回の時だけ実行し、運用後は実行しないでください。
ここではサーバー側の鍵名称を「server」とします。
①サーバー側鍵作成
「./build-key-server server」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧メールアドレス
⑨今回チャレンジパスワードの設定は行わない。「⏎」
⑩「⏎」
⑪「y」
⑫「y」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
サーバー証明書---server.crt
サーバー秘密鍵---server.key
2-3-1-3.クライアント側の秘密鍵・公開鍵の作成と署名
ここではクライアント側の鍵名称を「client」とします。
必要なクライアント数分、名称を変えて繰り返します。
①クライアント側鍵作成
「./build-key client」
②国名コード
③都道府県名
④都市名
⑤組織名。社名や団体名
⑥「⏎」
⑦「⏎」
⑧「⏎」
⑨メールアドレス
⑩今回チャレンジパスワードの設定は行わない。「⏎」
⑪「⏎」
⑫「y」
⑬「y」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
クライアント証明書---client.crt
クライアント秘密鍵---client.key
2-3-1-4.DHパラメータの作成
鍵の交換に使用するDHパラメータを生成します。
①「./build-dh ⏎」
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されます。
dh1024.pem
2-3-1-5.鍵を所定ディレクトリーへコピー
/usr/share/doc/openvpn/examples/easy-rsa/2.0/keysに以下のファイルが作成されていますので、サーバー用とクライアント用別にそれぞれコピーします。
<サーバー用>
ca.crt, dh1024.pem, server.crt, server.key
<クライアント用>
ca.crt, client.crt, client.key
ここではサーバー用のファイルを、/root配下にコピーしました。
クライアント用はPCへ転送しますので、/tmpにコピーして下さい。
※注意:client.keyのパーミッションを644にしてください。「chmod 644 /tmp/client.key」
作成時パーミッションは”600”ですので、PC転送の際パーミッションエラーになります。
2-3-1-6.クライアント鍵をPCへ転送
ここではSSHクライアントを「Teraterm」を使用しました。
PCへ転送するのは、「ファイル」⇒「SSH SCP...」で転送します。
2-3-2.OpenVPN構成を定義
VyOSの「設定モード」で設定します。
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
※行番号を便宜上付けていますが、実際の入力の際は入れないでください。
(03) SoftLayer側のルート(10.0.0.0 255.0.0.0)とDNS(10.0.80.11)をpushしています。
"redirect-gateway def1"オプションを入れてもいいです。
※QNAPではこの設定は無効になりますので、後ほどQNAPがわでrouteの設定を行います。
(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
※行番号を便宜上付けていますが、実際の入力の際は入れないでください。
SourceNATを設定しています。
(02) プライベートのインターフェースはeth0
(03)source アドレスは、プライベートポータブルです
(04)マスカレードの設定にしました
これで、クライアントPCからプライベートネットワーク上の他のサーバーへPINGが通ります。
2-4.構築設定2 [VyOSとクライアントPCでの作業]
今まで設定したOpenVPN構成が正しいかをPCから接続して、確認します。
PCはWindows10を使用しました。尚、OpenVPNクライアントがまだインストールされていない場合は、下記アドレスからダウンロードしてセットアップしてください。
OpenVPNダウンロード
サーバー側で作成した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
下記メッセージが表示され、正常に接続できました。
後ほど、この構成をQNAP側でインポートします。
2-5.構築設定3 [QNAP側での作業]
2-5-1.接続設定および接続確認
「QVPN Service」でOpenVPNクライアントの設定を行います。
「VPNクライアント」⇒「VPN接続プロファイル」
「追加」⇒「OpenVPN」
「2-4.構築設定2 [VyOSとクライアントPCでの作業]」で使用した、「softlayer.ovpn」ファイルをインポートします。
「2-4.構築設定2 [VyOSとクライアントPCでの作業]」で使用した、「ca.crt、client.crt、client.key」ファイルを指定します。
VyOSのパブリックIPは「xxx.yyy.zzz.74/28」ですので、サブネットマスクは「255.255.255.240」になります。
「作成」
それでは、接続してみます。
「アクション」⇒「接続アイコン」をクリック
VPNクライアントIP:10.132.22.200 で接続されています。
2-5-2.ルート設定
SSHでQNAPにログオンし、PINGを使って通信を確認します。
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」
2-6.構築設定4 [IBM Cloud側での作業]
2-6-1.ICOSサービスのオーダ、バケットの作成
設定作業内容については割愛させていただきます。
「QNAPとIBM Cloud Object Storage(ICOS)で簡単にファイルサーバを構築してみました」を参考にしてください。(4-1.ICOS側)
2-7.構築設定5 [QNAP側での作業]
2-7-1.ICOSとの接続設定
QNAPの「HybridMounr(ファイルクラウドゲートウェイ)」を使い、ICOSのプライベートエンドポイントに接続してバケットにアクセスします。
※PINGを使用して、QNAPからICOSプライベートエンドポイントに通信ができることを確認してください。
「HybridMount」をクリック
”クラウドサービス”:「S3 Compatible」を選択 ※注意:「IBM Cloud」ではありません。
「2-6-1.ICOSサービスのオーダ、バケットの作成」で取得した値を入力
”アクセスキー(access_key_id)”、”秘密キー(secret_access_key)”、サーバアドレス(プライベートエンドポイント)
”システムプロキシ設定を使用”:チェックを外す。
「検索」をクリックし、バケットを選択⇒「次へ」
PCのフォルダーにドキュメント保存し、転送されているかを確認する。
QNAP File Stationでドキュメントの存在が確認できました。
以上ですべての設定作業が完了です。
3.通信設定での注意点
今回の設定で下記の問題がありました。その際の対応内容を記載します。
(1)DNS参照できないため、名前解決できない場合
QNAPのネットワーク設定にてDNSを設定後、QNAPを再起動すると名前解決できない。
対応)SSHクライアントにてログイン後、/etc/resolv.conf に直接DNSを記述する。
例:nameserver 8.8.8.8
nameserver が127.0.0.1 のループバックアドレスの設定になっていたため。
(2)ICOSのプライベート・エンドポイントにアクセスできない場合
対応)IBM Cloudのリソースアクセスのために、下記ルートを設定する
route add -net 10.0.0.0 gw ポタブルIPのgw netmask 255.0.0.0
4.おわりに
QNAPとIBMCloud間でセキュアな接続が可能(OpenVPN)という事がわかり、ICOS以外にも利用できそうです。
「3.通信設定での注意点」でQNAPを再起動すると値を再度設定する必要がある。永久適用したいところであるが、カスタマイズされたLinixであるため設定箇所がわかりません。
この点は調査して情報を更新したいと思います。