まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:vpn

IBM Cloud のプライベートクラウド環境内にアクセスするための(サーバーインスタンス代以外は不要という意味で)安価な VPN サーバーを構築する、という機会があったので、その手順をまとめておきます。先に書いておくと、構築する際に手を動かす部分だけはさほど大変ではないのですが、事前準備というか、環境確認というか、構築用途を考慮した上で準備する部分がそこそこのボリュームを占めています。



【システム図】
今回紹介するシステム環境はこのようなものです:
2020100201

IBM Cloud 内にプライベート VLAN を1つ用意して、プライベートクラウド環境内に業務環境を構築します。このプライベートクラウドにアクセスするための VPN サーバー(上図の赤箱)を専用のサーバーインスタンスを1つ追加して構築する、というものです。

今回、このサーバーを CentOS 8.x をベースに、OpenVPN サーバーを使って構築します。OSS をベースとすることで、OS もソフトもサービスも追加料金不要です。


この作業を行う前に、環境についていくつか事前に決めておく必要があります。順を追って紹介します。


【セキュリティグループの定義】

セキュリティグループは IBM Cloud 内のセキュリティ設定を担う機能です。今回構築する VPN サーバーではどのようなセキュリティ設定で構築する必要があるかを事前に考え、定義し、この後作成する VPN サーバーに適用します。

※今回の記事の中で IBM Cloud に特化している部分でもあります。このセキュリティグループや内部ネットワークの確認方法に関わる箇所以外の内容は他のインフラ環境でもほぼ流用できると思っています。

IBM Cloud のセキュリティグループ定義内容を確認するには、まず左上のメニューから Classic Infrastructure を選択してインフラ一覧ページに移動します:
2020100202


そして同ページから更にメニューを Security - Network Security - Security Groups とたどった先にあります:
2020100203


デフォルトで定義済みのものも含めて、セキュリティグループの一覧が表示されます。新規セキュリティグループを追加する場合は画面右上の Create group を選択します:
2020100204


新規作成時のダイアログです。ここではセキュリティグループの Name(必須)と、必要に応じて Description(説明、任意)を入力します。なお Create group with .. と書かれたチェックは外して、空の定義状態で作成します:
2020100205


作成後の一覧です。入力した名前のセキュリティグループが登録されていることを確認します:
2020100206


一覧から1つ選択すると定義内容が表示されます。作成直後は定義内容が空の状態です。ここで Inbound(リクエスト受付)/Outbound(リクエスト送付) にわけてセキュリティ内容を定義します:
2020100207


例えば HTTP(=TCP/80) を通す設定を加えたい場合、Inbound ルールを以下の内容で追加します。特定のネットワークアドレスからのリクエストのみ受け付ける条件を加えることも可能です(無指定の場合はすべてのネットワークアドレスからのリクエストに適用されます):
2020100208


この作業を繰り返して、Inbound ルールと Outbound ルールを加えてゆきます。なお実際のサーバーインスタンスにはここで作成したルールを複数組み合わせて割り当てることができるので、1つのセキュリティグループにすべての設定内容を記述する必要はありません:
2020100201


更に、別のセキュリティグループで SSH を通すセキュリティ設定を用意しました。こちらは Source を定義することで、特定の IP アドレス(自分の IP アドレス)からのリクエストのみ許可するような内容にしており、環境構築後のこちらのセキュリティグループのみ除去する予定です:
2020100202


一覧ではこのように2つのセキュリティグループを追加しました:
2020100203


【プライベート VLAN ネットワーク環境の確認】

次に、この後 VPN サーバーをインストール&設定する際の、設定内容を現在のプライベート VLAN 内容から確認します。

まず対象サーバーインスタンスを1つ確認します。IBM Cloud ダッシュボードから Classic Infrastructure - Device List を選択します:
2020100204


(止まっているものも含めた)定義済みのサーバー一覧が表示されます。ここから今回 VPN で接続することになるプライベート VLAN 内のサーバーを1つ選択します:
2020100205


選択したサーバーインスタンスの詳細画面が表示されます。ここで以下の内容を確認しておきます(後の作業で使います):
2020100206


確認する項目この図での値
LocationTokyo 5
Private ネットワークの VLANtok05.bcr01a.2256
Private ネットワークの IP Address10.193.122.107/26


この IP アドレスの値より、同ネットワークのネットワークアドレスおよびネットマスクを計算すると、
 ネットワークアドレス : 10.193.122.64
 ネットマスク : 255.255.255.192
ということがわかります。


サーバー構築前に調べておく内容は以上です。この後は実際のサーバー構築に移ります。


【CentOS 8 インスタンス作成】

では実際に VPN サーバーを構築していきます。まずは IBM Cloud の同プライベート VLAN 内に CentOS 8.x の VM を追加します。

IBM Cloud ダッシュボードのデバイス一覧画面から Order ボタンを選択します:
2020100207


追加内容はいわゆる VM です。IBM Cloud では Virtual Server for Classic と分類されているので、これを直接検索するか、または検索窓に "classic" などと入力して検索し、Virtual Server for Classic を選択します:
2020100208


次の画面で作成する VM のスペックを決めていきます。名前に加えて CPU やらメモリやら。ここで注意すべきは作成するインスタンスの Location 、先程調べた VPN 接続対象プライベート VLAN(上記例では Tokyo 5)と同じものを選択してください:
2020100301


また OS イメージは CentOS 8.x を、そしてパブリックネットワークのセキュリティグループには上で作ったセキュリティグループ2つを指定して、自端末からの SSH 接続ができるようにします。最後に画面右の Create を選択します:
2020100302


指定した CentOS サーバーがデプロイされて稼働状態になるまで少し待ちます。

この後、この稼働したインスタンスにアクセスして作業するため、その接続のためのネットワーク情報を確認する必要があります。作成したインスタンスを選択します:
2020100304


まず選択直後は Overview ペインが選択され、概要が表示されています。この画面でパブリックネットワークに割り振られた IP アドレスを確認します(この直後の SSH ログイン時に指定します):
2020100305


また Passwords ペインを選択し、ログイン時のユーザー ID およびパスワードを確認しておきます。パスワードはマスクされていますが、目のアイコンを選択するとマスクが外れた状態で視認できるようになります:
2020100306


【CentOS 8 インスタンスへの OpenVPN サーバーのインストール&設定】

では作成した CentOS 8 インスタンスに SSH でログインし、OpenVPN サーバーとしてのセットアップを行っていきます。

まずは Teraterm や PuTTy、WSL などの SSH クライアントを使って、作成した CentOS 8 サーバーにログインします。先程確認した IP アドレス、ユーザー ID 、パスワードを使います:
2020100307


この後はしばらくこの SSH 端末からの入力作業が続きます。

まず最初に、この後 OpenVPN サーバーを EPEL リポジトリを使ってインストールすることになるため、EPEL リポジトリをインストールしておきます:
# dnf install -y epel-release

続けて OpenVPN サーバーや証明書作成に必要なツールなどをまとめてイントールします:
# dnf --enablerepo=epel -y install openvpn easy-rsa net-tools

ここまでの作業で OpenVPN サーバーそのものがインストールできました。続けて証明書ファイルを作成してゆきます(青字はコメントです):
(フォルダを移動)
# cd /usr/share/easy-rsa/3

(easyrsa 初期化)
# ./easyrsa init-pki

(認証局を作成)
# ./easyrsa build-ca

 この時にパスフレーズの入力を求められるので適当なフレーズを2回続けて入力。
 ここで入力したフレーズは下で再度入力する必要があります。


(サーバー証明書を作成) # ./easyrsa build-server-full server1 nopass
 途中でパスフレーズの入力を求められたら、上記で指定したフレーズを入力

(クライアント証明書を作成) # ./easyrsa build-client-full client1 nopass
 途中でパスフレーズの入力を求められたら、上記で指定したフレーズを入力

(DH を生成) # ./easyrsa gen-dh (TLS-Auth キーを生成) # openvpn --genkey --secret ./pki/ta.key (ここまでの作業で作成したファイル群をまとめて /etc/openvpn/server/ 以下にコピー) # cp -pR /usr/share/easy-rsa/3/pki/{issued,private,ca.crt,dh.pem,ta.key} /etc/openvpn/server/ (IP フォワードの設定のため、このファイルを新規作成) # vi /etc/sysctl.d/10-ipv4_forward.conf  (ファイル内容はこの1行だけ)  net.ipv4.ip_forward = 1 (IP フォワード有効化) # sysctl --system (サーバー設定ファイルのサンプルをコピー) # cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/ (サーバー設定ファイルを実際の環境に合わせて書き換え、変更内容は以下) # vi /etc/openvpn/server/server.conf  (78行目 コピーした証明書ファイル名を指定)  ca ca.crt  cert issued/server1.crt  key private/server1.key  (85行目 コピーした DH ファイル名を指定)  dh dh.pem    (101行目 VPN で使用する IP レンジを指定、ユーザーの環境と重複しないもの)  server 192.168.123.0 255.255.255.0  (142行目 コメントを解除して、上で確認したプライベート VLAN のネットワークを指定)  push "route 10.193.122.64 255.255.255.192"  (222行目 コメントを解除)  duplicate-cn  (267行目 コメントを解除して値を 32 (クライアント上限数)に変更)  max-clients 32  (287行目 ログファイルの保管場所をフルパス指定)  status /var/log/openvpn-status.log  (296行目 コメントを解除してログファイルの保管場所をフルパス指定)  log /var/log/openvpn.log  log-append /var/log/openvpn.log (変更内容を有効にして再起動) # systemctl enable --now openvpn-server@server
(プライベート VLAN とパブリック LAN のルーティング設定)
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT


※最後のルーティング設定部分はこのコマンドで実行した場合は再起動時に無効になってしまいます。恒久的に有効にする場合は /etc/rc.d.rc.local などに書いておく、などの対応が必要です。


これで対象プライベート VLAN に接続するための OpenVPN サーバーができあがりました。SSH はログアウトして構いません。


【OpenVPN クライアントのインストール&設定】

VPN サーバー側が用意できたので、残すは VPN クライアント側だけです。以下は Windows 10 を想定した内容で紹介します。

まだ OpenVPN クライアントをインストールしていない場合は以下からダウンロードしてインストールします:
https://openvpn.net/community-downloads/


導入先フォルダ(デフォルトだと C:\Program Files\OpenVPN)内の config サブフォルダ内に、VPN サーバーから以下の4ファイルを転送します(書き込み時に Administrator 権限が必要です):
  • /etc/openvpn/server/ca.crt
  • /etc/openvpn/server/ta.key
  • /etc/openvpn/server/issued/client1.ca
  • /etc/openvpn/server/private/client1.key

更に、導入先フォルダ内の sample-config サブフォルダ内にある client.opvn ファイルを、config サブフォルダ内にコピーします(書き込み時に Administrator 権限が必要です)。上記と合わせて都合5つのファイルを config フォルダにコピーすることになります。

そして、この client.opvn ファイルをテキストエディタで開き、以下を編集して保存します(保存時に Administrator 権限が必要です):
(42行目 OpenVPN サーバーのパブリック IP アドレスを指定)
remote 165.192.xxx.xxx

(88行目 コピーした各種証明書ファイル名を指定)
ca ca.crt
cert client.crt
key client.key

これでサーバーとクライアント、全ての準備が整いました。

なお、このクライアント向け作業で用意した5つのファイルは(後述の動作確認後に)他のユーザーからも利用できるようになります。サーバーからのファイル転送や client.opvn ファイルの編集といった面倒な作業をユーザー全員にさせる必要はなく、ここで動作が確認できていれば同じファイルを流用することができます。


【動作確認】

実際に OpenVPN サーバーにアクセスして VPN 接続します。Windows の場合であればタスクバーから OpenVPN クライアントを右クリックして client に接続します(アイコンが緑になったら VPN 接続成功です):
2020100308


VPN 接続ができたら、プライベートアドレスを指定してプライベート VLAN 内のサーバーにアクセスできるようになっているはずです。ウェブブラウザやリモートデスクトップ接続といったサービスをプライベートアクセスで使ってみてください:
2020100309

2020100309



自分は自宅に CentOS を中心に構築した簡易ローカルネットワークがあります。自宅には固定の光回線もあるので、ブロードバンドルーターのポートフォワーディング機能を使って自宅内の HTTP サーバーを公開したり、SSH サーバーや DB サーバーににインターネットからログインできるようにしていました。
2015022401



もちろんこれはこれで便利ではあったのですが、自宅内に KVM の仮想サーバーを構築したあたりから少しずつ限界を感じることがでてきました。仮想サーバーができたことで簡単&気楽にマシンを増やして使うことができるようになるのはいいのですが、動的に増やしたマシンに接続するための設定として、2つ以上の異なる HTTP サーバーに 80 番ポートで接続したい、とか、ポートフォワーディングだけでは限界を感じることが多くなってきたのでした。まあ自宅ネットワーク環境もこんな悩みを抱えるレベルになれば立派かな、という感じ:
2015022402




この状況を打破するべく、 自宅ネットワークに VPN(Virtual Private Network) 環境を構築することにしました。結果的にですが、PC と自宅ネットワークとの間の通信をすべて暗号化することにもなるので、セキュリティ的にも向上することになります。この環境をオープンソースの OpenVPN を使ってすべて無料で構築したのですが、その手順をまとめました。


まず目標として、最終的には以下の様なネットワーク構成を作ることにしました:
・自宅ネットワークは 192.168.0.0/24 で、ルータ/DHCP/DNS 含めて今まで使ってきた自宅ネットワーク環境を変えずにそのまま使う。 
・自宅ネットワークのブロードバンドルータは 192.168.0.1、このブロードバンドルータの公開サーバー名は www.myserver.com とする。
・OpenVPN を導入する VPN サーバーは 192.168.0.4(CentOS)
・VPN で接続するクライアントは Windows7 を想定
・VPN で接続するクライアントのネットワークは 10.8.0.0/24(OpenVPN のデフォルト)
・VPN で接続したクライアントから自宅ネットワークへ、自宅ネットワーク内のマシンから VPN で接続したクライアントへの双方向の通信を可能にする
2015022403


上記の最後の文を補足します。この環境ができて VPN 接続ができた後に、VPN のクライアント機(Windows7)からは 192.168.0.XX というそのままのアドレスで自宅ネットワークの各サーバーに接続ができるようになります。加えて自宅ネットワーク内の各サーバー機からも 10.8.0.X というアドレスを指定することで Windows7 機にアクセスできるようになる、この双方向でのアクセスが可能になるような環境とする、ということを目標にします。


では以下にその構築手順を記載します。まず自宅ネットワーク内の1台のマシンに OpenVPN サーバーをインストールします。今回はこのマシンの IP アドレスが 192.168.0.4 で、CentOS が導入されているものと仮定します。また 2015/02/24 時点では OpenVPN の最新バージョンが 2.3.6 だったので、このバージョンをインストールしています。実際にはこちらを参照して、最新バージョンを確認し、最新バージョンのモジュールをダウンロードするようにしてください。

このマシンにログインして root 権限でシェルを開き、以下のコマンドを順次実行します:
# cd /usr/local/src
# yum -y install openssl-devel lzo-devel pam-devel

(最新の OpenVPN をダウンロードしてビルド)
# wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.6.tar.gz # rpmbuild -tb --clean openvpn-2.3.6.tar.gz # yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.6-1.x86_64.rpm # rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* # rm -f openvpn-2.3.6.tar.gz
(easyrsa をダウンロードしてビルド) # wget https://github.com/OpenVPN/easy-rsa/archive/master.zip # unzip master.zip # cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/ # rm -rf easy-rsa-master/ # rm -f master.zip

これで OpenVPN の導入はできました。次にこの導入モジュールを使って各種鍵・証明書ファイルを作ります:
(初期化)
# cd /etc/openvpn/easyrsa3/
# ./easyrsa init-pki

(CA証明書と秘密鍵作成)
# ./easyrsa build-ca
 (パスフレーズの入力を促されるので2度同じ内容を入力)
 (Common Name(サイト名)を聞かれたらサーバー名(www.myserver.com)を入力)
# cp pki/ca.crt /etc/openvpn/

(サーバー証明書と秘密鍵作成)
# ./easyrsa build-server-full server nopass
 (パスフレーズを聞かれるので、先ほど入力したパスフレーズを入力)
# cp pki/issued/server.crt /etc/openvpn/
# cp pki/private/server.key /etc/openvpn/

(DHパラメータ作成)
# ./easyrsa gen-dh
# cp pki/dh.pem /etc/openvpn/

(ダミーのクライアント証明書作成)
# ./easyrsa build-client-full dmy nopass
 (パスフレーズを聞かれるので、先ほど入力したパスフレーズを入力)

(ダミーのクライアント証明書廃止)
# ./easyrsa revoke dmy
 ("Continue with revocation" と表示されたら yes と入力)
 (パスフレーズを聞かれるので、先ほど入力したパスフレーズを入力)

(証明書廃止リスト作成)
# ./easyrsa gen-crl
 (パスフレーズを聞かれるので、先ほど入力したパスフレーズを入力)
# cp pki/crl.pem /etc/openvpn/
# chmod o+r /etc/openvpn/crl.pem

(TLS認証鍵作成)
# openvpn --genkey --secret /etc/openvpn/ta.key
# cp /usr/share/doc/openvpn-2.3.6/sample/sample-config-files/server.conf /etc/openvpn/

上記で最後にコピーした OpenVPN の設定ファイルを編集します:
# vi /etc/openvpn/server.conf
    :
  (変更が必要な該当箇所のみ記述、ここにある内容以外はそのままで)
    :
dev tun

dh dh.pem

server 10.8.0.0 255.255.255.0

;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
push "route 192.168.0.0 255.255.255.0"

tls-auth ta.key 0 # This file is secret

user nobody
group nobody

log-append  /var/log/openvpn.log

# 以下の2行を最終行に追加
management localhost 7505
crl-verify crl.pem

更に easyrsa3 ディレクトリでクライアント証明書および秘密鍵ファイルを生成しておきます。なお、以下の例では client1 という名前のクライアント証明書・秘密鍵ファイルを生成していますが、このクライアント名は一意である必要があります。複数クライアント向けに複数の証明書や秘密鍵ファイルを生成する場合は、既に作成したクライアント名と重ならないように注意してください:
# cd /etc/openvpn/easyrsa3
# ./easyrsa build-client-full client1
 (クライアント用パスフレーズの入力を促されるので2度同じ内容を入力)
 (サーバー用パスフレーズを聞かれるので、作成時に入力したパスフレーズを入力)

起動スクリプトとシャットダウンスクリプトを新規に作成します:
# vi /etc/openvpn/openvpn-startup
#!/bin/bash

/etc/openvpn/openvpn-shutdown
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT

iptables -I INPUT -i tun+ -j ACCEPT

iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT


# chmod +x /etc/openvpn/openvpn-startup
# vi /etc/openvpn/openvpn-shutdown
#!/bin/bash

delete() {
  rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`
  for num in $rule_number
  do
    iptables -D $target $num
  done
}

target='INPUT'
delete

target='FORWARD'
delete

target='OUTPUT'
delete

# chmod +x /etc/openvpn/openvpn-shutdown

ログローテーションの設定ファイルを新規に作成します:
# vi /etc/logrotate.d/openvpn
/var/log/openvpn.log {
  missingok
  notifempty
  sharedscripts
  postrotate
    systemctl restart openvpn 2>&1 > /dev/null || true
  endscript
}

ここまでの準備ができていれば OpenVPN サーバーを起動し、自動起動設定も行います:
# vi /etc/init.d/openvpn

 (この行のコメントを外す)
  echo 1 > /proc/sys/net/ipv4/ip_forward


# /etc/init.d/openvpn start
# chkconfig openvpn on

次にルータ(この例では 192.168.0.1)上で UDP/1194 へのアクセスを VPN サーバー(この例では 192.168.0.4)にフォワーディングするよう、ポートフォワード(と必要であればファイアウォール)の設定を行います。この具体的な手順はお使いのルータごとに異なるため、ルータの説明書などを参照しておこなってください:
2015022404


更にルータ上のルーティングを変更し、このネットワーク内での 10.8.0.0/24 宛のデータは VPN サーバー(この例では 192.168.0.4)をゲートウェイとするようにルーティングエントリを追加します。これで VPN ネットワークに接続したマシンへネットワーク側から接続することもできるようになります。この具体的な手順もお使いのルータごとに異なるため、ルータの説明書などを参照しておこなってください:
2015022405


これで OpenVPN サーバーおよびルータ型の設定が完了しました。 続けて VPN クライアント(PC側)の設定を行います。

この VPN ネットワークに接続したい PC で OpenVPN のダウンロードページを開き、環境にあった Installer をダウンロード・ダブルクリックして導入します:
2015022406


導入先フォルダの中にクライアント設定ファイルのサンプル(C:\Program Files\OpenVPN\sample-config\client.ovpn)があるので、このファイルを C:\Program Files\OpenVPN\config\client.ovpn としてコピーし、以下の内容に書き換えます(変更箇所のみ記載しています):
remote www.myserver.com 1194 # VPN サーバー名

ca ca.crt # CA証明書のファイル名
cert client1.crt # クライアント証明書のファイル名
key client1.key # クライアント秘密鍵のファイル名

tls-auth ta.key 1 # 行頭にコメントが付いているので外して TLS 認証を有効化

VPN クライアントから VPN サーバーのマシンに SFTP などで接続し、CA 証明書(/etc/openvpn/ca.crt)/クライアント証明書(/etc/openvpn/easyrsa3/pki/issued/client1.crt)/クライアント秘密鍵(/etc/openvpn/easyrsa3/pki/private/client1.key)/TLS認証鍵(/etc/openvpn/ta.key)の各ファイルを転送し、すべて C:\Program Files\OpenVPN\config フォルダ内に保存します。


最後に、この VPN クライアントは Windows7 上では管理者権限で実行する必要があるため、その設定を行います。

スタート → すべてのプログラム → OpenVPN → OpenVPN GUI を右クリックし、「プロパティ」を選択します:
2015022407


"OpenVPN GUI のプロパティ" ダイアログが表示されたら「互換性」タブを選び、「管理者としてこのプログラムを実行する」にチェックを入れます。最後に OK をクリックしてダイアログを閉じます:
2015022408



これで準備はすべて整いました。最後に実際に VPN 接続して動作確認してみます。

VPN クライアントを導入した PC が自宅以外のインターネットに接続している状態で、先ほどの手順で OpenVPN GUI を選択して起動します:


OpenVPN クライアントがタスクバーに格納された状態で起動します。この時点では接続できていないので灰色で表示されているはずです。このアイコンを右クリック → 接続を選択します。
2015022409


OpenVPN のコンソールが表示され、パスワードを聞かれます。ここではクライアントの証明書を作成する時に指定したパスフレーズを入力して OK ボタンをクリックします:
2015022410


正しく接続できるとアイコンが緑色になります。同時に新たに割り当てられた IP アドレス(この例では 10.8.0.6)が吹き出し表示されます:
2015022411


この状態で自宅ネットワーク内のサーバーの IP アドレス(192.168.0.XX)を指定すれば接続できるはずです:
2015022412

逆に自宅ネットワーク内のサーバーから割り当てられた IP アドレスに対しても接続できているはずです:
2015022413


繋がりました! これで外から自宅ネットワークに対してセキュアに、しかもポートフォワードの制約を受けずにアクセスできるようになりました。

VPN 接続を切断するにはタスクバーのアイコンを右クリック→切断 を選択します:
2015022414



今回紹介した方法は Windows クライアントを前提としていましたが、証明書や秘密鍵の作り方を少し変えると iPhone などでも利用できるようになります。 詳しくは以下の参考ページを参照ください:


(参考)
http://centossrv.com/openvpn.shtml


 

前回からの続きです。

 IBM Power Development Platform で Power 版 RedHat Enterprise Linux サーバーのリソース予約が完了し、サーバーが Active になりました。その後の接続方法について紹介します。
2014030502


 このサーバーに接続するには VPN を使います。その詳しい内容は予約確認ページの真ん中辺りにある "Download Connection User Guide" ボタンをクリックしてダウンロードできる PDF に(英語で)記載されています:
2014030104

以下、その内容を簡単にかいつまんで日本語で紹介します。まずこのボタンの上部に書かれている "VPN appliance IP address", "User ID", "Initial / last reset VPN password" の3つの内容をメモしておきます。これが VPN 接続時に必要な入力項目になります。
2014030601


次に VPN 接続をするクライアント PC からブラウザを起動して、https://vlpvpn.centers.ihost.com/ を参照します。僕の場合は CentOS のマシンから行っているため CentOS でのスクリーンショットを紹介しますが、Windows や Mac からも同様の内容になると思います。

ログインフォームが表示されるので、先程メモした VPN 用 User ID とパスワードを入力します:
2014030602


"Welcome" メッセージが表示されたらログインは成功です。Continue ボタンで先に進みます:
2014030603

この後、ウィザード形式で接続する手続きが始まります。OS の種類が自動認識されていると思いますので、リンク(以下の例であれば "Linux_x86_64" と書かれた箇所)をクリックして処理を進めていきます:
2014030604

おそらくですが、ここから先は OS ごとに手続きが異なるはずです。種類によってはこのまま自動認識が成功して、ウィザード処理を進めていくだけでこのまま VPN までが完了することもあると思います。以下は僕の試した CentOS 環境での場合の説明です、参考程度に参照ください。

リンクをクリックすると、VPN クライアントをセットアップするためのスクリプトのダウンロードが始ります:
2014030604


ダウンロードが完了したら、そのファイルをシェルから実行してインストールします:
# sh vpnsetup.sh

インストールが完了したら、アプリケーションメニューから VPN クライアントを起動します:
2014030605


VPN クライアントが起動します。まず最初の1回目に必要な設定があるので、設定項目を開きます:
2014030606


デフォルト状態では VPN クライアントのセキュリティが強めに設定されています。このままだとこの環境での VPN サーバーに接続できないため、"Block connections to untrusted servers" についているチェックを外します。その上で Close ボタンでこの画面をクローズします:
2014030607


1つ前の画面に戻ります。改めて最初にメモした VPN サーバーの IP アドレス(おそらく 32.97.184.40 で固定)を入力して Connect ボタンをクリックします:
2014030608


先ほどチェックを外した設定に関する確認ダイアログが表示されます(チェックを外さないとこの画面も出ないはずです)。Untrusted なサーバーに対する接続を行うか? という確認です。 今回だけは接続するのであれば "Connect Anyway" を(次回も確認ダイアログがでます)、このサーバーを信頼するのであれば "Always Connect" を(次回からは確認ダイアログがでません)、このどちらかをクリックして接続します。"Keep Me Safe" を選択すると接続しません:
2014030609


ユーザー名とパスワードを聞かれるので、これも上でメモした VPN 用の User ID と Password を入力し、最後に Connect ボタンをクリックします:
2014030610


確認画面が表示されたら、Accept をクリックします。環境や設定によってはこの後に再度 Untrusted サーバーへの接続に関するダイアログが表示されるので "Connect Anyway" か "Always Connect" を選択します:
2014030611


VPN サーバーに正しく接続できると、画面内に VPN が接続できているようなマークが表示されます(以下は CentOS での例):
2014030612



これで VPN 環境が整って、IBM の仮想プライベートネットワークに接続できました。では稼働中の Power 版 RedHat Linux Enterprise サーバーへ接続してみます。

改めて PDP の Virtual Server Access 環境画面を参照して、予約したサーバー環境の IP アドレス、ユーザー名、パスワード、root パスワードを確認してメモしておきます(※上記で説明した VPN 用の ID & パスワードとは異なります。ID だけは同じかもしれません)。
2014030613


確認した IP アドレスに(指定されている)ユーザー名とパスワードで SSH で接続します。Windows であれば PuTTY などの SSH クライアントから接続します。Mac や Linux であれば以下のコマンドとパスワードで:
# ssh u00NNNNN(UserID)@172.29.XXX.XXX(IPアドレス)

ログインできると画面に IBM ロゴが表示されるようです。とうとう Power サーバー環境にログインできました!:
2014030614



で、実際にこのサーバーを使うために色々なセットアップが必要になりますが、このままでは何もできないので、まずは root になりましょう。su コマンドを実行して、メモしておいた root パスワードを指定します:
[u00NNNNN@172-29-XXX-XXX ~]$ su -
パスワード: (rootパスワードを入力)
[root@172-29-XXX-XXX ~]#

ここからはもうご自由に。でも一応最低限のセットアップの紹介をしておきます。

何はともあれ root パスワードを変更します:
[root@172-29-XXX-XXX ~]# passwd
Changing password for user root.
New password:(新しいパスワードを入力)
Retype new password:(同じパスワードを再入力)
passwd: all authentication tokens updated successfully.
本当に Power サーバーかどうか(笑)を確認してみました。本物だ、仮想CPU×4構成:
[root@172-29-XXX-XXX ~]# cat /proc/cpuinfo
processor      : 0
cpu            : POWER7 (architected), altivec supported
clock          : 3864.000000MHz
revision       : 2.1 (pvr 003f 0201)

processor      : 1
  :
  :

timebase       : 512000000
platform       : pSeries
model          : IBM,9179-MHB
machine        : CHRP IBM,9179-MHB

ちなみにセットアップは普通に yum が使えます。MySQL とか PHP とか Apache HTTPD とかについては、x86 版と違いを感じないほど普通に導入できます。

加えて、IBM 製のミドルウェアに関しては、DB2 や WAS(WebSphere Application Server), C/C++ コンパイラなど、いくつかのものは最初から /stage/middleware 以下にインストールメディアがマウントされて使えるようになっています。検証などで必要であれば、ここからインストールして使えるようです:
[root@172-29-XXX-XXX ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda4              29G  3.0G   24G  11% /
tmpfs                1003M     0 1003M   0% /dev/shm
/dev/sda2             463M   46M  394M  11% /boot
nfs.dal-ebis.ihost.com:/var/nfs/LINUX
                       25G   19G  5.1G  79% /stage/middleware

[root@172-29-XXX-XXX ~]# ls /stage/middleware
DB2   IDS       ParallelEnvironment  Rational  TDS  XL_C_C++
ESSL  netbeans  PESSL                SAAS      WAS  XL_Fortran

なお最初にセットアップされている Power 版 RHEL ですが、どうやらフルセットに近いものが用意されているようです。X Window(GNOME) も、日本語環境も、VNC サーバーまでも最初から含まれているようです。ただ VNC サーバーはインストールまではされていますが起動はしていません。最後にその設定および起動方法だけ紹介しておきます(ま、これも x86 版と比べて特に違いはないですけど・・)。

まず、これは必須ではありませんが、せっかく X Window 環境を使うので日本語設定にしておきましょう。/etc/sysconfig/i18n をエディタで開いて、1行目を
[root@172-29-XXX-XXX ~]LANG="ja_JP.UTF-8"

と変更しておきます。

次に /etc/sysconfig/vncservers を編集して、root ユーザーで 5901 番ポートにアクセスするような設定にしておきます:
  :
VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 1024x768 -nolisten tcp"
  :

また VNC 接続用のパスワードを設定しておきます:
# vncpasswd
Password:(入力内容は画面に表示されません)
Verify: (同じパスワードを入力)

この段階で一度 VNC サーバーを起動して、設定ファイルのひな型(~/.vnc/xstartup)を作っておきます:
# /etc/init.d/vncserver start

直前のコマンドで xstartup が作成されているはずなので、このファイルを編集します。環境変数 LANG を設定して、GNOME のセッションをそのまま VNC 環境でも使えるようにします:

# vi ~/.vnc/xstartup
#!/bin/sh

export LANG="ja_JP.UTF-8"(この一行を最初に挿入)
  :
  :
(最後の部分を編集)
# xterm -geometory 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & (コメントアウト)
# twm & (コメントアウト)
gnome-session & (この一行を追加)

改めて新しい設定で VNC サーバーを再起動し、またシステム起動と同時に実行されるようにしておきます:

# /etc/init.d/vncserver restart
# chkconfig vncserver on

これで VNC サーバーの準備と起動ができました。 実際に X Window(GNOME) 環境にアクセスしてみます。VPN 接続をしたクライアントの環境に戻り、VNC Viewer などの VNC クライアントを実行します。アクセス先には Linux サーバーの IP アドレスと、最後に 5901 番ポートで接続するための :1 を付けてアクセスします:
2014030615


パスワードを聞かれたら VNC 用に設定したパスワードを入力します:
2014030616


Power 版 RHEL の GNOME 環境にアクセスできました! 普段 CentOS を使っていると RHEL のロゴに少し緊張します(笑)。 といっても、x86 版と比べてほとんど違いはなさそうですけどね・・・
2014030617

実際試してみると分かりますが、普通に日本語も使えます。FireFox まで導入済みなので、すぐにウェブ利用も可能になっています。

この環境が2週間無料で使えるのはいいですね。加えて Power 版 RHEL の出来がいいというか、ほとんど x86 版との違いを感じずに使えるのでストレスもほとんどありません。 仮想環境とはいえ Power CPU × 4 環境のマシンを使えるので、ビットコインの発掘とか x86 用に作ったウェブアプリケーションの Power 環境での動作検証とか、いろいろ使えそうです。


最後にこの環境の終了手順を紹介します。この環境は放っておいても2週間後には使えなくなってしまうのですが、その前にある時点の環境をスナップショットとして保存しておくと、次回の予約時に(Standard Image からではなく)そのスナップショットのイメージから再作成してもらう、ということもできるようです。そのスナップショットの取得方法を紹介します。

PDP の予約画面に戻ります。ここで Virtual Server Access を展開し、スナップショットを取得したいサーバーの予約番号部分を右クリックし、"Save Image" を選択します:
2014030618


すると以下のような画面が出てくるので、"Save image now"(今の状態で保存する)か、"Save image when reservation ends"(利用期間終了時に保存する)かを選びます。またその保存イメージの名前と、説明を記入し、最後に "Save image" ボタンをクリック、です:
2014030619

この方法で取得したイメージは、次回リソース予約時に "Standard image" ではなく "Saved Image" から作成するよう指定することで再利用が可能になっています。この方法で事実上2週間以上必要な検証作業についても(一時的な切断と、IPアドレス等の変更はありますが)作業を継続して行うことができるようです。


IBM PartnerWorld への企業契約が前提になるとはいえ、この環境が無料で使えるのって、かなりお得な気がするなー。

僕自身は AIX や IBM i(AS/400) にはあまり興味ないんですが、最初にダウンロードした PDF のガイドにはこれらの環境での VPN の利用方法なども書かれています。興味あるかたは是非挑戦してみてください。



 

このページのトップヘ