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

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

タグ:was

IBM Bluemix の提供サービスの1つに WAS(WebSphere Application Server) があります:
2017031901
(https://console.ng.bluemix.net/docs/services/ApplicationServeronCloud/index.html)


この IBM Bluemix の WAS サービスを利用する場合、サービスインスタンスのダッシュボード画面から VPN に必要なモジュールや設定ファイルをダウンロードして、VPN で WAS ホスティングサーバーに接続した上で管理コンソールにアクセスしたり、アプリケーションをデプロイしたり、といった手順で管理・利用することが可能になります。

そして必要な設定を変更したり、アプリケーションをデプロイした後に(URL を通知したりして)ユーザーへ公開するわけですが、ユーザーが利用する段階では管理者のように VPN などの利用を条件にしたりはせず、パブリックネットワークから直接アクセスさせるという使い方も少なくないと思います。そのための設定方法を紹介します:
2017031900



まず、IBM Bluemix の WAS サービスをパブリックネットワーク上に公開するには、WAS の HTTP サーバーを 80(http)/443(https) 番ポートで起動させる必要があります(少なくともユーザーにアクセスさせるアプリケーションは 80/443 番ポートで listen している必要があります)。そのため事前に VPN 接続をした状態で WAS 側の設定変更を済ませておく必要があります。WAS Liberty / WAS それぞれの起動ポート番号変更手順については以下を参照ください:
WAS Liberty Core を 80/443 番ポートで動かす
WAS を 80/443 番ポートで動かす


なお、以下は WAS Liberty Core 版の図を使ったりして紹介しますが、WAS フルプロファイル版でも同様だとお考えください。

まずは 80/443 番への起動ポート番号の変更を行った WAS(Liberty) のダッシュボードを IBM Bluemix 上で開きます。以下のようにホストの IP アドレスが確認できる状態になっているはずです(この IP アドレスはプライベートアドレスなので、アクセスするには VPN 接続が必要です):
2017031901


VPN 接続が確立していれば、このアドレスをウェブブラウザで開くと、WAS(Liberty) のトップページが表示されます。他にデプロイ済みのアプリケーションがある場合も同様です:
2017031902


ではこのページに VPN なしでパブリックネットワークからアクセスできるようにするための設定を行います。上記のダッシュボードページに戻り、「パブリック IP へのアクセスを管理」ボタンをクリックします:
2017031903


最初の段階ではまだパブリック IP アドレスが割り振られていないので、「パブリック IP アドレスを要求」します:
2017031904


しばらく処理を待つと先程の画面に戻ります。この時点ではパブリック IP アドレスが割り振られていますが、まだ VPN 内のホストへの転送がクローズされています。再度「パブリック IP へのアクセスを管理」をクリックします:
2017031906


割り振られた IP アドレスからの利用ができるよう、「アクセスのオープン」をクリックします:
2017031907


三度元の画面に戻ってきました。今回は IP がオープンされて、この段階でパブリックアクセスが可能になりました:
2017031908


最後に、(接続済みであれば VPN 接続を切断してから)パブリック IP アドレスにウェブブラウザでアクセスし、元の画面が表示できていることを確認します:
2017031909


なお、この仕組の説明などは以下のドキュメントを参照ください:
https://console.ng.bluemix.net/docs/services/ApplicationServeronCloud/networkEnvironment.html#configureLibertyForPublicAccess


前回(「WAS Liberty Core を 80/443 番ポートで動かす」)の続きです。

今回は軽量版ではなく、いわゆる「フルプロファイル版」などと呼ばれている、従来の WAS(Websphere Application Server)を対象に起動ポート番号を変更する手順を紹介します。また今回も具体的には IBM Bluemix 内の WAS on Bluemix サービスの BASE プランインスタンスを使って紹介します。


では実際に起動ポートを変更します。ウェブブラウザで https://(ホスト名):9433/ibm/console/ にアクセスして管理コンソールを開き、正しいユーザー名とパスワードを入力してログインします:
2017031601


WAS の管理コンソールにアクセスしました:
2017031602


WAS の場合、起動ポート番号はアプリケーションサーバー内の Web コンテナのトランスポートチェーンで管理しています。というわけで、まずは左ペインから サーバー - サーバータイプ - WebSphere Application Server を選択し、アプリケーションサーバーとして起動ポートを変更したいサーバーの名称(デフォルトでは server1)を選択します:
2017031603


選択したアプリケーションサーバー内から Web コンテナー設定 - Web コンテナー・トランスポート・チェーン を選択します:
2017031604


現在設定されている Web トランスポートチェーンの一覧が表示されます。この中に 80 番(http)と 443 番(https)を追加します。まずは 80 番ポートを追加するために「新規作成」ボタンをクリックします:
2017031604


作成するトランスポートチェーンの名称(下図では WCInboundDefault80)を入力し、テンプレートに WebContainer が選択されていることを確認して「次へ」をクリックします:
2017031605


利用するポート番号をここで指定します。「新規ポートの作成」が選択されていることを確認して、ポート名は "80"、ホストは "*" 、ポートは "80" をそれぞれ入力して「次へ」:
2017031606


確認の画面で「終了」を選択します:
2017031607


トランスポートチェーン一覧の画面に戻るので、今回の変更をマスター構成として「保存」します:
2017031608


追加したトランスポートチェーンが一覧に含まれていることを確認します:
2017031609


同様にしてもう1つ、443 番ポート(https)のトランスポートチェーンも新規に作成します。その場合、テンプレートには "WebContainer-Secure" を選択することに注意してください:
2017031601

また、ポート名とポートには "443" を入力します:
2017031602


こうして 80 番ポート(http)と 443 番ポート(https)のトランスポートチェーンが追加されたことを確認します:
2017031603


ここまでの作業ができれば後はサーバーを再起動して、変更を反映するだけです。が、ここも前回紹介した理由により root ユーザー権限でサーバーを起動する必要があります。具体的には ssh 等でログイン後、root ユーザーに su/sudo して、root ユーザー権限でサーバーを止めて、再び起動する、という手順を実行します:

$ sudo /bin/bash

# /opt/IBM/WebSphere/AppServer/bin/stopServer.sh server1

# /opt/IBM/WebSphere/AppServer/bin/startServer.sh server1

# exit

$

これで WAS Liberty Core の時と同様に WAS も 80/443 番ポートで利用できるようになっているはずです。

IBM の Java アプリケーションサーバーである WAS(Websphere Application Server) は標準設定のまま導入して使い始めると、9080 番ポート(http)や 9443 番ポート(https)でサーバーが起動します。これを一般的な 80 番や 443 番で起動させるための設定を紹介します。方法自体はいくつかあるのですが、ここで紹介するのは「とりあえずてっとり早くできる方法」です。 また今回は軽量版である WAS Liberty Core を対象として紹介します(フル機能版は次回)。具体的にはパブリッククラウドであるIBM Bluemix 内の WAS on Bluemix サービスの Liberty Core インスタンスを使って紹介します:


では実際に起動ポートを変更します。WAS Liberty Core の場合はアプリケーションサーバーの server.xml を編集することで変更できるので、まずはこのファイルを探します。

既にアプリケーションサーバーが起動している場合はウェブブラウザからも変更できます。 https://(ホスト名):9080/ にアクセスして、"Open Admin Console" をクリックします:
2017031601


認証が有効に設定されている場合は認証画面になります。正しいユーザー名とパスワードを入力して「送信」します:
2017031602


管理コンソールにアクセスできました。server.xml を編集するには "Server Config" を選択します:
2017031601


構成ファイルとして server.xml が表示されている(これしか表示されてない??)ので、server.xml をクリック:
2017031602


すると server.xml の編集画面に移動します。「ソース」タブで表示すると、XML テキストを直接編集することも可能です:
2017031603


なお、SSH 等でアプリケーションサーバーシステムに直接ログインできる場合であれば、server.xml は以下に存在しているので、このファイルを直接テキストエディタで編集しても構いません:
/opt/IBM/WebSphere/Profiles/Liberty/servers/server1/server.xml


以下の赤字部分4箇所を変更します。変更が完了したら保存(管理コンソールであれば右上のボタン)します:
<server description="Default Hypervisor Server">
  <!-- Simple application server, supporting servlets and jsps -->
  <featureManager>
    <feature>jsp-2.2</feature>
    <feature>adminCenter-1.0</feature>
  </featureManager>
<remoteFileAccess>
<writeDir>${server.config.dir}</writeDir>
</remoteFileAccess>
<virtualHost id="default_host" allowFromEndpointRef="defaultHttpEndpoint">
 <hostAlias>*:80</hostAlias>
 <hostAlias>*:443</hostAlias>
</virtualHost>
<!-- virtualHost id="external_host">
 <hostAlias>*:80</hostAlias>
 <hostAlias>*:443</hostAlias>
</virtualHost -->

  <quickStartSecurity userName="wsadmin" userPassword="{xor}am07ZzlubWg=" />
  <keyStore id="defaultKeyStore" password="{xor}am07ZzlubWg=" />
  <!-- disable automatic configuration and application updates, but leave mbean support enabled -->
  <config updateTrigger="mbean"/>
  <applicationMonitor updateTrigger="mbean" dropinsEnabled="true"/>
  <ssl id="defaultSSLConfig"
     sslProtocol="SSL_TLSv2"
     keyStoreRef="defaultKeyStore"
     clientAuthenticationSupported="true"/>

  <!-- open port 9080 for incoming http connections -->
  <httpEndpoint id="defaultHttpEndpoint"
                host="*"
                httpPort="80"
                httpsPort="443">
      <tcpOptions soReuseAddr="true"/>
  </httpEndpoint>
  <!-- httpEndpoint id="publicHttpEndpoint"
              host="*"
              httpPort="80"
              httpsPort="443">
      <tcpOptions soReuseAddr="true"/>
  </httpEndpoint -->
</server>


設定の変更そのものはこれだけです。後はアプリケーションサーバーを再起動・・・なのですが、OS が Linux の場合はもう1点注意が必要です。

Linux の場合、1024 番未満のポートはデフォルトでは root 権限がないと listen できません
。つまり上記の設定変更をしても再起動の際に root 以外のユーザー権限で再起動するとポートを listen できないのです。

特に IBM Bluemix 環境での場合、OS は RedHat で、その一般ユーザーである virtuser の権限で WAS は起動します。つまり上記の制約をまともに受けてしまうのでした。というわけで、WAS 再起動の際には注意が必要です。具体的にはまず root ユーザーに su(または sudo)し、root ユーザー権限でサーバーを止めて、再び起動、という手順が必要です:
$ sudo /bin/bash

# /opt/IBM/WebSphere/Liberty/bin/server stop server1

# /opt/IBM/WebSphere/Liberty/bin/server start server1

# exit

$


これで WAS Liberty Core が 80/443 番ポートで利用できるようになっているはずです:
2017031603


 

IBM Bluemix からは IBM のウェブアプリケーションサーバー製品である WebSphere Application Server(以下、WAS)が提供されており、メニューから選ぶだけでホスティングされた WAS 環境を利用することができます。以前にその内容をブログで紹介させていただいたこともあり、手順についてはこちらを参照ください:
WebSphere Application Server on Bluemix を使う

 ↑当時はまだβ版で、その前提での紹介になっていますが、現在は正式サービスになっています。


上記リンク先を見ていただくとわかりますが、このサービスで提供される WAS 環境を利用するには現状、 VPN 接続が必要です。例えば下図でいうと同じネットワーク内にある青い3台のマシンの中で、1台だけが WAS インスタンス(ピンクのマシン)に VPN 接続しているとします。この場合、VPN 接続した1台のマシンは WAS に繋がりますが、他の2台は WAS に繋がりません。なので、本格的に WAS を利用するにはちと不便な環境ということになります:
2016091201


今回紹介するのはこの不便さをなるべく簡単に解消するために、2つの設定を行うことで、VPN 接続していない2台のマシンからも WAS を使えるようにする、というものです。そしてその2つの設定がこちらです:
 ・VPN 接続したマシンにルーティングと NAT の設定を行う(要はソフトウェアルータにする)
 ・VPN 接続していないマシンにルーティング設定を追加する
2016091202

これによって、VPN 接続していない PC も「ルーティングを1つ追加する」という手順だけで WAS が接続できるようになる、というものです。VPN 接続には専用クライアントの導入なども必要でしたが、ルーティングの追加だけならコマンドを1つ実行するだけでできる(ネットワーク管理者権限などを持っていて、DHCP サーバーの設定を変更できる場合は DHCP の設定だけで、ユーザーは何もしなくてもできる)ので、少しはハードルが下がるかな、と思っています。

以降の説明のため、以下の様な環境であることを想定します:
2016091203


WAS インスタンスの IP アドレス: 169.45.191.94

VPN 接続するマシンの OS: Linux(CentOS 6)
VPN 接続するマシンの IP アドレス: 192.168.0.104
VPN 接続するマシンのネットワークインターフェース: eth0
VPN 接続するマシンの VPN 接続側のネットワークインターフェース: tun0
VPN 接続するマシンの属するネットワーク: 192.168.0.0/24

VPN 接続しないマシンのネットワークインターフェース: eth0


では実際の設定作業を紹介します。まずは Linux マシンから WAS インスタンスに VPN 接続を行うための OpenVPN を導入します:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install --enablerepo=epel openvpn

そして、この OpenVPN を使って WAS インスタンスに VPN 接続します。VPN 接続に必要な構成ファイルは WAS サービスインスタンスの「管理コンソールにアクセスするには、VPN に接続している必要があります」と書かれた箇所の右側の?マークをクリックした先の画面から「VPN 構成ファイル」と書かれたアイコンをクリックするとダウンロードできます:
2016091501


Bluemix 画面からダウンロードした構成ファイル一式(wasaas-uss.ovpn を含む zip ファイル)を OpenVPN を導入した Linux 機の /root/openvpn/ 以下に展開し、以下のコマンドを実行します(実行したまま終了する必要があるので、SSH 接続で行う場合は screen などを実行してから行い、最後にデタッチする必要があります):
# cd /root/openvpn/
# openvpn /root/openvpn/wasaas-uss.ovpn

次に VPN 接続した Linux マシンをソフトウェアルータ化するための設定を行います。そのためには IP フォワーディング機能を有効にする必要があります。以下のコマンドを実行します:
# echo 1 > /proc/sys/net/ipv4/ip_forward

続いて /etc/sysconfig/network ファイルを書き換えます。具体的には以下の最後の3行を書き足します(GATEWAY に何か記述されていた場合は消去しておいてください):
NETWORKING=yes
HOSTNAME=’localhost.localdomain’
FORWARD_IPV4=yes
GATEWAY=
GATEWAYDEV=

次に IP フォワーディング機能を恒久的に有効にするため、/etc/sysctl.conf ファイルを編集して、net.ipv4.ip_forward = 1 に書き換えます。また sysctl コマンドでこの編集後のファイルを読み込んで有効にします:
# vi /etc/sysctl.conf

  :
  :
net.ipv4.ip_forward = 1
  :
  :

# sysctl -p /etc/sysctl.conf

最後に iptables を使ってルータ化&NATフィルタリングを行います。上記リンク先の手順で Linux PC を VPN 接続した場合、そのネットワークインターフェイスは tun0 になっているはずです。なので、/etc/sysconfig/iptables を書き換えて目的の接続先(今回の例では 169.45.191.94)への接続は tun0 経由で NAT 接続するように変更し、その上で iptables を有効に(または再起動)します:
# vi /etc/sysconfig/iptables

*nat
:PREROUTING ACCEPT [4:180]
:POSTROUTING ACCEPT [2:121]
:OUTPUT ACCEPT [2:121]
-A POSTROUTING -s 192.168.0.0/24 -d 169.45.191.94/32 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [215:27937]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -o tun0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

# /etc/init.d/iptables start (または restart)


これで Linux 機はソフトウェアルータになっているはずです。あとは VPN 接続していない同一ネットワーク上のマシンに対して、「WAS(169.45.191.94) に接続する時は 192.168.0.104 経由で接続する」ことを教えます。Linux/UNIX 系マシンであれば以下のようなコマンドを実行します:
# route add 169.45.191.94 gw 192.168.0.104 eth0

Windows 機の場合は少しコマンドが異なり、以下の様なコマンドを管理者権限で実行します:
> route add 169.45.191.94 mask 255.255.255.255 192.168.0.104

これでルーティングの設定も完了しています。試しに VPN 接続していない(上記の route コマンドを実行した)マシンから WAS インスタンスに接続してみましょう。ウェブブラウザを開いて https://(WAS マシンの IP アドレス):9043/ibm/console/ にアクセスするか、または Bluemix のサービス画面から「管理コンソールを開く」をクリックします:
2016091201


ルーティング設定前であれば「ホストが見つからない」エラーになるはずですが、ホストが見つかった上で「安全な接続ではない」というエラーになるはずです。これはセキュリティ設定のエラーなので、この状態を回避すれば管理コンソールにアクセスできます。FireFox であれば「エラー内容」を書かれたボタンをクリックします:
2016091202


「例外を追加」します:
2016091203


以下の様な確認画面が表示されたら「セキュリティ例外を承認」をクリックします:
2016091204


これで管理コンソールにアクセスできるようになっているはずです!:
2016091205


正しいユーザー ID とパスワードを入力することで、実際の管理画面にアクセスすることができます。これで VPN 接続しなくても、ルーティング設定だけで Bluemix の WAS インスタンスにアクセスすることができるようになりました。SSH 接続についても同様にできます:
2016091206


なお、設定したルーティングを元に戻すには、上記で実行した route コマンドの add 部分を del や delete に変えて実行します:
# route del 169.45.191.94 gw 192.168.0.104 eth0

> route delete 169.45.191.94 mask 255.255.255.255 192.168.0.104

本当は全て DHCP 設定の中で行えるとユーザーとしては楽なのですが、今回紹介した方法であればネットワーク管理者でなくても(1コマンド実行するだけで)設定できて、比較的簡単に実現できると思っています。


先日、Bluemix 上で使えるようになった WebSphere Application Server (以下 WAS for Bluemix)についてこちらで紹介しました:

上記記事では OpenVPN を使って WAS for Bluemix のサーバー 仮想マシンと VPN 接続をして、WAS のウェブコンソールにアクセスする、という手順を紹介しました:

 

WAS for Bluemix 環境では、上記のウェブコンソールにアクセスするだけでなく、サーバー仮想マシンに ssh 経由でログインしたり、そこから root になって管理者権限で OS を利用することも可能です。今日はそちらの手順を紹介します。

まずは準備として WAS for Bluemix の仮想マシンに対して OpenVPN を使った VPN 接続までは済ませておいてください。具体的な手順は上記リンク先を参照してください。

次に Bluemix 内に定義した WAS for Bluemix のサービスを開いて、VPN 構成ファイルをダウンロードしたこのページを開き、仮想マシンの左横にある下向きの矢印部分(数の赤枠部分)をクリックします:
2016021201


すると隠れていた部分が展開されて、この仮想マシンに SSH 接続するために必要な情報が表示されます:
2016021202


WAS for Bluemix の仮想マシンに SSH 接続するには RSA の秘密鍵が必要です。「鍵の保存」でダウンロードするか、または「鍵を表示」で確認した内容と同じテキストファイルを SSH を実行するクライアント機上にファイルとして用意します(用意したファイルのパーミッションを 600 などにして、他人がアクセスできないようにしておきます):
2016021203


これで SSH 接続のための準備が整いました。以下のコマンドで SSH 接続します(WAS 仮想マシンへの SSH 接続時のユーザーは virtuser を指定します):
$ ssh virtuser@(WAS for Bluemix の仮想マシンのIPアドレス) -i (保存した鍵ファイルのファイルパス)

自分が確認した限りですが、正しい鍵ファイルが指定されていればパスワードなしでログインできます。ユーザー名は上記で指定した virtuser になっていますが、sudo 権限があるようなので、ログイン後に root に切り替えて操作することも可能です:
2016021204


root でログインできる SSH サーバーが提供された、ともいえます。ディレクトリ構成とかを見る限り、ベースはどうも RedHat Enterprise Linux っぽいようにも見えますが、まあその辺りに興味ある方はいろいろ調べてみてください。


このページのトップヘ