ShinobiLayer: KVMコンソールへのアクセス方法とトラブルシューティング

#KVMコンソールとは
SoftLayerでは、KVMコンソール経由でサーバーにアクセスが可能です。万が一OSのiptablesの設定を間違ってログインできなくなった時でも、あたかもローカル環境からログインしているかのようにアクセスできます。
非常に便利なKVMコンソールですが、うまくアクセスできないという声もチラホラ聞きます。今回は、アクセス方法や問題判別方法も含めてご紹介したいと思います。

※2015/03/03修正
・東京POP経由でもKVMコンソールにアクセスできることを確認したので、「東京POP経由では接続できない～」という文言を削除
・SoftLayerポータルからVPN接続用のリンクがなくなった（http://qiita.com/testnin2/items/550418954f891ad3ec24 ）ので、SSL-VPNクライアントを利用するか、http://www.softlayer.com/vpn-access を利用してください。

#KVMコンソールへのアクセス方法
通常の手順としては、

1. 事前にSSL-VPNなどでPrivate NWに接続しておく。
2. **Devices -> Device List -> [対象の仮想サーバー]のDevice Details**と選択し、右側にある **Actions**ボタンから**KVM Console**を選択する。
![KVM_SUCCESS01.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/326bbf1a-7ca1-8fe7-a044-b921b528ce15.jpeg)

3. 以下のような警告がでるので**Continue**を選択すれば、
![SSL-VPN-Warning.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/873aa844-eea7-0ba9-fa93-29deaf153b68.jpeg)

4. 後は自動的に下記のようなポップアップ画面がでます。
**Linux**
![KVM_Linux.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/5eb0c520-7fb3-93ed-8cf3-79507cff62d0.jpeg)
**Windows**
![KVM_SUCCESS03.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/391232ba-1b8d-76e5-fe50-15e350135246.jpeg)
このポップアップで表示されるサーバー名、KVM IP、Port番号、Username, Passwordなどは環境によって変わります。（もしうまく接続ができなくても）後続の解説で利用するので覚えておいて下さい。特に、

* KVM IPは10.x.x.xですが、Private IPとは異なるIPが割振られているので注意が必要です。
* KVMアクセス用のPort番号は5901であることが多いですが、5903のように番号が異なっているケースもあります。
* このポップアップでは、内部的には[TightVNC](http://www.tightvnc.com/)のjarをアプレットとして実行しています。そのURLはhttp://< KVM IP >:5199/tightvnc-jviewer.jarです。


ここまで、非常に簡単に見えるのですが、多分初めて使った方で最初からこんなにうまく行った方はいらっしゃらないかもしれません。よって、以下にハマリどころを記載していきたいと思います。

#KVMコンソールのハマリどころ
著者が遭遇および相談を受けた問題を振り返ってみた所、典型的には以下に分類されるように思われます。

* サーバーがそもそも起動していない。
サーバーが停止している時にはKVMコンソール経由でアクセスはできません。Bare Metal Serverの時はIPMI経由でOS停止時でもアクセスできますが、Virtual ServerでKVMコンソールを利用する際にはOSが起動している必要があります。意外にこのケースは多いです。


* Private NW経由でKVM IPにアクセスできていない。
典型的にはSSL VPNなどを使ってSoftLayerのPrivate Networkに事前に接続されていないことが多いです。問題の切り分け方法としては、ご利用の端末からKVM IP(10.x.x.x)にpingが通るかどうかが１つの判断基準になるでしょう。


* Java7 Update51以上を利用している。
Oracle社の公開情報によると、Java7 Update51よりセキュリティ要件が変更され、"公的機関の署名付JAR" 及び "Permissions"アトリビュートが、Java Appletの必須要件に変更されています。簡単に言ってしまえば、従来に比べてより厳密にJava Appletがチェックされるようになりました。
SoftLayerでは、KVMコンソールのポップアップを表示させる時に[TightVNC](http://www.tightvnc.com/)のJava Appletをダウンロードしようとしますが、このJava Appletはこのような条件にまだ対応されていません。セキュリティー上の問題のため、Java7 Update51以上のバージョンを導入されている方は多いため、この問題にはよく引っかかります。
この問題に対応するためには、Javaコントロール・パネルから
　・ https://control.softlayer.com
　・ http://< KVM IP >:5199
の2つを例外サイト・リストとして登録してください。
※セキュリティレベルを下げても対応できるハズですが、あまり好ましくない気がします。
![KVM_Java.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/bd3392a3-811e-f45c-e50e-1ee0a2301eef.jpeg)

* キャッシュ
ブラウザにキャッシュが残ってしまって、設定変更後の構成が正しく反映されていないことも非常に多いです。私はFirefoxを使っているのですが、SoftLayerを使うときはプライベートブラウジングモードで利用していることが多いです。もし上記のJava設定をしてもセキュリティ関連のエラーが出る場合は、キャッシュを削除してブラウザを再起動してみてください。

* VNCの互換性の問題
SoftLayerのKVMコンソールには[TightVNC](http://www.tightvnc.com/)を使っています。SoftLayerのポータル経由で利用する[TightVNC](http://www.tightvnc.com/)のアプレットを使用しなくても、直接KVM IPに対してご自身の端末からVNC接続をしても問題ありません。ただし、UltraVnc等のような他のVNC Clientを使った場合には、接続することはできても表示がおかしかったりすることもあります（特にWindowsの時）。SoftLayerのPortalが提供しているアプレットを使用せずに、自分の端末にVNC Viewerを導入する際には、可能な限り[TightVNC](http://www.tightvnc.com/)を利用することをお勧めします。


* その他SoftLayer側の要因
ホスト側のKVMの構成に問題があるために、接続ができないケースがあります。ポータルに登録しているパスワードを変更したら繋がらなくなったというのもこれに当たります。ping等の応答はあるのに、I/Oエラーが発生したり認証がうまく行かない場合は、SoftLayerのサポートにご連絡下さい。SoftLayerのサポートチームは、そういうリクエストを受けた時には、内部システムにログインして"Reconfigure KVM Console"という作業を実施しています。


# SSH port forwardingを利用した簡単接続方法

「いやいや、Javaの例外サイトなんていじりたくないよ」「そもそもSSL-VPNに接続するのも面倒なんだけど」っていう方には、事前に自分の端末に[TightVNC](http://www.tightvnc.com/)（Viewer機能のみでOK）を事前に導入しておき、どこか適当なLinux環境を経由してSSH Portfowardingを利用する方法も１つの方法です。安全にPublic側から接続できるので、アリな方法だと思います。
この方法だと

* Java Appletを使っていないのでJavaの例外サイト登録は必要ありません
* SoftLayer上のLinuxとKVM IPの間はVPNを張らなくても接続できるので、SSL VPNも必要ありません。
* また、端末とSoftLayer上のLinuxサーバーとの間の通信はPublic経由であってもSSHで暗号化されています。

1. PuTTYの場合には、以下のようにローカルポート5903が、KVM IP(ここでは、10.3.21.196)のポート5903に転送されるように設定します。KVM IPやポート番号は、ポップアップ画面から事前に確認しておいて下さい。これでSSHでPublic側から適当なSoftLayer上のLinuxサーバーにSSHでログインして下さい。
![SSH_Portfowarding1.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/a485dda8-3c3a-e953-0c6e-e30920549eb7.jpeg)

2. 予め導入しておいた[TightVNC](http://www.tightvnc.com/)を起動し、localhost:5903に接続すると・・・
![SSH_Portfowarding2.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/c039ba2c-3ff3-71c1-5ef3-78eb4ed6a2a9.jpeg)

3. 無事KVM IPの5903に転送されます。パスワードを入れたら
![SSH_Portfowarding3.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/536c861d-1a4b-09a4-3e50-4a1d5e6b8fbf.jpeg)

4. 無事接続されました。
![SSH_Portfowarding4.jpg](https://qiita-image-store.s3.amazonaws.com/0/62127/ee6e37a9-3c93-4c9f-b416-5604292ed2df.jpeg)

# 終わりに
いかがでしたでしょうか。KVMコンソールはいくつか嵌ってしまう箇所が多いのですが、使えると非常に便利です。本番運用に入った後も、いざとなったら使えないなんてことを避けるために、定期的に稼動確認をチェックしておくと良いのではないでしょうか。