« 2013年04月 | メイン | 2013年06月 »

2013年05月01日

MyCloudNas

QNAPのNASを導入して,通常のWindows用の共有ストレージとして運用を開始したんだけど,いろいろ機能を弄ってみよう,という状態だったわけですが.
NASを個人で使っている方々はおそらく誰もが思うであろう,外部から自宅のNASにアクセスしたい,という欲求を満たそう,という話です.

QNAPのNASには,MyCloudNasサービスというものが搭載されています.
これ,簡単に言うと,DDNSへの登録や,IPアドレスの更新,ルータの設定なんかを簡単に行ってくれる仕組みです.
これを使い,ISPより動的に割り当てられるIPアドレスをDDNSへ自動登録,更新し,外部から名前を使ったアクセスを行うことができるみたい.
この設定自体は,NAS管理画面のメニューから,ウィザードに沿って設定するだけで完了します.
ルータの設定もUPnP対応しているルータであれば自動でやってくれます.
さて,これで外部ネットワークからNASの名前解決ができるようになりました.

次にVPNを導入します.
仕事でユーザとして使うことはよく有りますが,サーバ側を管理したことはないので,どんなものだろう,と思っていたんですが,サービス自体は既にQNAP側に搭載されており,有効化&VPNユーザの追加をするだけでした.
ただ,VPNサーバとしてPPTPとOpenVPNの2種類が搭載されていたので,これは要選択です.
両方とも動作させる,という選択もあるんだとは思いますが,ちまきはよりセキュリティレベルの高そうなOpenVPNを選択しました.

課題があるとするとiOSデバイスからのOpenVPN接続は,標準でサポートされていない,という点.
ただし,ここも既に手が有り,AppStoreでiOS用OpenVPNクライアントが配布されていました.
ただ,このiOS用クライアントでは証明書と鍵による認証のみサポートされているようなので,この部分だけは注意が必要です.

さて,じゃぁ試してみよう,ということで,OpenVPNの公式ドキュメントを参考にiPhone5に証明書,鍵を追加しようとしました.
ここで,証明書や鍵がないことに気がつきましたが,QNAPのOpenVPNサービスの設定画面から「設定ファイルのダウンロード」ができることを思い出し,早速ダウンロードしました.
が,ここには設定ファイルと認証局の証明書(ca.crt)しか含まれておらず,クライアント側の証明書と鍵がありません.
OpenVPNでは,サーバ側,クライアント側共に証明書と鍵が必要で,クライアント側では,認証局自体の証明書と,自身(クライアント)の証明書を接続の際に必要としているはずです.
おかしいなー,と思いながら調べていると,どうやら証明書と鍵は(クライアントごとに)発行しないとダメな模様.

あちこち調べると,先達は自分でおれおれ認証局(自前のローカル認証局)を作成して,そこで証明書と鍵を必要なだけ発行している模様.
ここで考えた選択肢としては2つ.
1つは,QNAP上に認証局を作成する方法.
2つめは,手近なマシン上に認証局を作る方法.
QNAP上でやるのが一番楽かなーなんて思ったんですが,よく考えるとトラブルやアップデートなどでQNAP上の認証局は消滅する可能性が有り,その度に各デバイスの証明書を作り直す事になるため,これはやめました.
それ以外にも宅内LANに接続できない環境では証明書を発行できない,というのも気になった,という点も.
セキュリティ,という観点からいうと,証明局は宅内LANにあった方が望ましいとは思いますが,ここは利便性をとる形です.

てことで,手近なマシン上に証明局を構築することにしましたが,こちらはVMware Workstation上で動作するUbuntu12.04上に構築することにしました.
Windows上に構築してもよかったんだけど,VMの方がバックアップなんかがしやすく,使い勝手がいいとの判断です.
Windows上にいろいろソフトウェアを導入する手間もないしね!

てことで,Ubuntu12.04で作業します.
まずOpenVPNを未導入の環境の場合,OpenVPNの導入からです.

$ sudo aptitude install openvpn

これでOpenVPNが導入されるので,証明局他の作成環境を作りました.
ちなみに,途中でroot権限なんかが必要らしいので,

$ sudo -s

しています.
さて,適当に作業ディレクトリを作成してから作業開始です.

# mkdir OpenVPN_Keys
# cd OpenVPN_Keys
# cp -R usr/share/doc/openvpn/examples/easy-rsa/2.0/* .

これで認証局作成環境がコピーできたので,

# emacs vars

で設定ファイルを修正します.
修正箇所は下記.

export KEY_SIZE=2048
export KEY_COUNTRY="JP"
export KEY_PROVINCE="都道府県"
export KEY_CITY="市区町村"
export KEY_ORG="適当"
export KEY_EMAIL="適当"

KEY_SIZEは,この方が安全そうだったから,という程度です(笑)
これで初期設定ができたので,早速証明局を作ります.

# source vars
# ./clean-all
# ./build-ca

いくつか質問をされますが,varsも設定済なので,適当にEnterしていきます.
これが終わると,

認証局証明書:./keys/ca.crt
認証局秘密鍵:./keys/ca.key

が作成されます.
続いてサーバ証明書(QNAP用)も作成します.

# ./build-key-server [サーバ名]

こっちも適当に質問に答えていくと,

サーバ証明書:./keys/[サーバ名].crt
サーバ秘密鍵:./keys/[サーバ名].key

が作成されました.
続いて,Diffie Hellman(DH)パラメータの生成をします.

# ./build-dh

とすると,

DHパラメータ:./keys/dh2048.pem

が生成されます.
そして最後にクライアント用の証明書と鍵を作成します.

# ./build-key-pass [クライアント名]

とすると,

クライアント証明書:./keys/[クライアント名].crt
クライアント秘密鍵:./keys/[クライアント名].key

が生成されます.
ちまきは,ノート,iPhone5,いつの間にか買っていたiPad mini用に3つ証明書を作成しました.

あとは,これらをサーバ(QNAP)側,クライアント側に導入して動かす,という状態.
初回は結構手間がかかるのね(汗)

投稿者 chimaki : 23:17 | トラックバック

2013年05月03日

OpenVPN

さて,前回はQNAPでOpenVPNを使うために自前の証明局を作って証明書と鍵を発行するところまででしたね.
ということで,今回はいよいよQNAP側に証明書と鍵を導入してサーバとして機能させよう,というお話.

とりあえずQNAPのWeb管理画面からSSHによる接続を許可して,早速SSH接続して設定ファイルを眺めてみます.

/etc/openvpn/server.conf

これがどうやらサーバの設定ファイルのようで,証明書や鍵は

/etc/openvpn/keys -> /etc/config/openvpn/keys/

を参照しているようです.
なので,

/etc/config/openvpn/keys/

に,前回作成した証明書を置き,server.confを編集して参照するようにすれば大丈夫そうです.

編集箇所は,

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/myserver.crt
key /etc/openvpn/keys/myserver.key
dh /etc/openvpn/keys/dh1024.pem

の辺りで,これを自前のファイルを示すよう書き換えればよさそう.
で,実際に書き換えるわけだけど,データはUbuntuからQNAPのSMB共有フォルダ(/share/以下にある)に置いて,それをコピーしてくることにしました.
さっくりファイルをコピーして,server.confを書き換えたので,OpenVPNのサービスを再起動してみます.

# /etc/init.d/vpn_openvpn.sh restart

としてみると,特にエラーなどなく動作している模様.
念のために,ということで,QNAP自体を再起動して,いよいよクライアント側の設定です.

PCはローカルネットワークで動いているので,外部回線が利用可能なiPhone5から試すことにします.
OpenVPN公式のドキュメントを参考にしながら,iOS側の設定を行います.
まずはAppStoreでOpenVPNをダウンロードします.
ここで一旦PCにLightningケーブルで接続し,iTunesから設定ファイルを転送します.
転送するファイルは以下の4つ.

設定ファイル:openvpn.ovpn
認証局証明書:ca.crt
クライアント証明書:iphone5.crt
クライアント秘密鍵:iphone5.key

証明書と鍵は前回作成した物です.
また設定ファイルについては,QNAPの管理画面からダウンロードできるひな形をベースに,

cert iphone5.crt
key iphone5.key

を追記しています.
OpenVPN公式ドキュメントでは,設定ファイル内に証明書や鍵を埋め込む方法を紹介していたりしますが,わざわざ埋め込まなくても大丈夫そうなので,独立したファイルにしています.
正直埋め込むことでどれ程手順が簡略化されるか分からないですが・・・.

閑話休題.
さっそくiPhone5の無線LANをオフにして接続実験をしてみます.
OpenVPNアプリを起動するとiTunesから転送したファイルが認識されるので,そのまま接続をしてみます.
・・・が,上手く接続されません.
ログを見るとQNAPのOpenVPNサーバとの会話はできているようですが,証明書が違うといわれて,接続できていないようです.
おっかしいなぁ?と思いながら,SSHから確認してみると,サーバの設定ファイル(server.conf)が初期化されてしまっています.
しかし,自分で転送した証明書などは,ちゃんと/etc/config/openvpn/keys/以下に残っています.
不審に思いながらも調べてみると,QNAPは/etc/config/以下にあるものは消えないけど,それ以外の設定ファイルは(トラブル防止のために)初期化されるようなのです.
いろいろ手はあるみたいなんだけど,ここは手軽に,ということで・・・.

ca.crt -> myca.crt
ca.key -> myca.key
dh1024.pem -> dh2048.pem
myserver.crt -> myqnap.crt
myserver.csr -> myqnap.csr
myserver.key -> myqnap.key

になるように,設定ファイルにあわせてシンボリックリンクを作成してお茶を濁したのでした(笑)
QNAPを再起動してもこのシンボリックリンクは消えないようなので,目的は果たせそうです.

さて,これでいよいよ,ということでiPhone5から再度接続を試みてみます.
すると,先ほど上手くいかなかった認証が上手くいくようになりました.
が,やっぱりうまくつながらない.
サーバから設定を読み出している間にタイムアウトしてしまうようです.
これもいろいろ調べると,クライアント側の設定ファイル(openvpn.ovpn)に,以下を記述するといいようです.

reneg-sec 3600

早速記述して再度トライすると,やっと3G経由で自室のQNAPに接続されました.
QNAPのWeb管理画面からもOpenVPNユーザとして接続されていることが分かります.
いやー,無事つながって良かったよかった(汗)
ずいぶん手間取っちゃいました(笑)

投稿者 chimaki : 01:30 | トラックバック

2013年05月04日

Hypervisor

GWで実家にいる間にKindleの1巻99円祭りに巻き込まれ,かれこれ100冊近くは購入してしまったという展開ですが.

さて,QNAPのNASを使ったVPN環境の構築は無事完了したけど,さらにいろいろしたくなったのでした.
というのも,QNAPの設定画面でiSCSIの設定画面を見つけたからでした(笑)
具体的には,Retina MacBookPro上で稼働しているVM群を一部別のマシン,つまり専用のサーバに移設しよう,と考えたのでした.
サーバの要件としては,最低2,できれば4スレッド以上動作可能なCPU,VT-d対応,iSCSI Boot対応,16GB程度のメモリ,といったところ.
重要なのはやっぱりiSCSI Bootかな?(笑)
もちろんHypervisorはVMwareのESXi予定(笑)
まぁ,仕事柄VMwareと強く絡んでいるってのもあるけどね(笑)

てことでいろいろ見てたら富士通のPRIMERGY TX100 S3なる格安サーバがよさそう.
特にiSCSI回りの設定が簡単そうでいい感じ.

で,結果.
Ivy Bridge世代のXeon(E3-1220v2,3.1GHz,4コア4スレッド),メモリ24GB(納期の都合で4GBx2+8GBx2),ディスクレス,当然だけどOSレス.
これに後々Intelのサーバ向けNIC(EXPI9402PT)を追加して,合計4つのLANポートを持った構成です.
ESXiの動作実績もある無難なエントリーサーバですな.
というか,安かったから完全な衝動買いなんだけどね(笑)

てなわけで,さっくりESXi5.1を入れるわけだけど,まずはiSCSI Bootの設定です.
最初にQNAP上でESXiインストール用にiSCSI Targetを構成します.
といっても,管理画面からちょちょっとつついて2GBの領域を準備するだけ.
続いてTX100 S3のBIOS設定を変更して内蔵RAIDではなくiSCSIからのBootに変更,iSCSI Targetを指定します.
後はESXi5.1のISOイメージをCDに焼いて,CD Bootし,iSCSI Targetに向かってインストールすればOKです.
が,ウチではメモリが届くのが遅れた都合で,組込済みの2GBメモリのみだったので,インストールができなかったり(汗)
こんなチェックがあるんだねぇ・・・.
VMware Workstation上でインストール実験をしていたときには2GBメモリの割り当てでもインストール,起動できたから,てっきり行けるものだと思ってたのに・・・.
結局Amazonで即納可能な4GBx2枚(CK4GX2-D3UE1600)を慌てて購入して事なきを得たわけです(笑)

インストール後,BootしたESXiにvSphere Clientから接続してライセンスを登録.
とりあえずBoot用のiSCSI Target以外に,VM格納用のiSCSI Targetを作成し,Datastoreとして使えるようにVMFS-5でフォーマット.
ここに最新のパッチとオンボードNICのドライバをvSphere ClientのDatastore browserを使って転送しておきます.
ESXiのSSHを有効にしておき,リモートからSSHで接続して下記コマンドでパッチをあてます.

# esxcli software vib update -d /vmfs/volumes/datastore/ESXi510-201303001.zip

パッチをあてたら再起動します.
続いて先達の公開しているオンボードNICのドライバを導入します.
これで再起動すれば,NICが合計4つ見えるはずです.
あとはこのLANポートを使い方にあわせて設定すれば準備完了,というわけです.

ちなみに,QNAPはvSphere Client用のDatastore作成用プラグインを公開しているので,必要な人はどうぞ.
ただ,ウチの環境では1回しかDatastore作成が成功しなかったり,そもそもvSphere Clientが日本語環境上でDatastore作成できなかったり(英語のロケールを引数で指定すれば行ける)と,トラブルいっぱいでしたが(笑)
さて,残りはiSCSIのポートバインディング設定かな!

投稿者 chimaki : 03:57 | トラックバック

« 2013年04月 | メイン | 2013年06月 »