アクセスサーバ経由でWebを使う

SSHを使って外出先から家のPCにアクセス出来てもあまり嬉しくない。Webメールとか使うために仮想アクセスサーバ経由でWebでインターネットへアクセスしたい。その為にはアクセスサーバにWeb Proxyを立てて、それを経由してインターネットにアクセスする。

Web Proxyの設定

アクセスサーバではWeb Proxy機能だけが使えればいいので、専用Proxyデーモンか軽いWebサーバでも良いのだが、結局、ドキュメントが豊富なApacheを使った。
ほぼ標準設定で、/etc/httpd/conf/httpd.conf を数ヶ所変えるだけでいい。要点だけ抜き出すと、

[root@access-server ~]# cat /etc/httpd/conf/httpd.conf
	:
	:
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers       1
MinSpareServers    1
MaxSpareServers    2
ServerLimit       16
MaxClients        16
MaxRequestsPerChild  4000

	:
	:
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If this is not set to valid DNS name for your host, server-generated
# redirections will not work.  See also the UseCanonicalName directive.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
# You will have to access it by its address anyway, and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80
ServerName localhost:80
	:
	:
# Specify a default charset for all content served; this enables
# interpretation of all content as UTF-8 by default.  To use the
# default browser choice (ISO-8859-1), or to allow the META tags
# in HTML content to override this choice, comment out this
# directive:
#
#AddDefaultCharset UTF-8
	:
	:
#
# Proxy Server directives. Uncomment the following lines to
# enable the proxy server:
#

ProxyRequests On
#

    Order deny,allow
#    Deny from all
#    Allow from .example.com
    Allow from all

Webサーバの設定とかは余りやったことがないので、他にも設定しなければならないところはあるのかも知れないが、まぁ、これで問題なく動いている。ポイントは次のようなところだ。

  1. 個人的なProxyなのでhttpdの起動数は最小限でいい
  2. 漢字のコードを変換をされないようにAddDefaultCharsetをコメントアウトする
  3. プロキシの機能を使えるようにする。

設定後、Webサーバを起動する。

[root@access-server ~]# service httpd start
Starting httpd:                                            [  OK  ]

サービスの自動起動

以上でアクセスサーバ上での設定は終わりだが、アクセスサーバが起動したらSSHサービスやHTTPサービスも起動するように設定しておく。(GNOMEのサービスの設定で行なっても良いし、コマンドラインで行なって良い。

[root@access-server ~]# chkconfig --level 345 httpd on
[root@access-server ~]# chkconfig --list
	:
httpd           0:off   1:off   2:off   3:on    4:on    5:on    6:off
	:
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
	:

また、仮想マシンのホストマシンを起動した際ににaccess-serverの仮想マシンも起動するようにVMwareの設定を変更しておく。VMware Server Consoleなどから[VM]⇒[Settings...]を選び[Options]タブで"Startup/Shutdown" optionから設定する。

SSH端末ソフトの設定

アクセスサーバ側の設定は以上の様な内容だが、外出先のノートPC等からアクセスサーバ経由でWebアクセスするためには、ノートPCでSSHの端末ソフト等を使ってSSHポートフォワーディングの環境を作る必要がある。以下の設定を紹介する。

先に紹介した「SSH2 の設定と利用(PuTTY)」では文字通りPuTTYというSSHクライアントソフトを使ってSSHポートフォワーディングを実現する方法を紹介している。私も最初PuTTYをダウンロードして使って見たが、使い慣れたTeraTermでもSSHポートフォワーディングができることが分かったので、ここではTeratermを使ったSSHポートフォワーディングの実現について紹介する。(使うのは、"UTF-8 TeraTerm Pro with TTSSH2"というソフトウェアである。)

まず、通常通りTeraTermを起動する。起動すると接続先やプロトコルを指定する"新しい接続"というウィンドウが現れるが、[キャンセル]をクリックして、本体のメニューに移る。

端末本体のメニュー[設定]から[SSH転送(O)...]を選択する。SSHポート転送(SSHポートフォワーディング)の設定をするためのウィンドウ表示される。

[追加(A)...]をクリックしてSSHポート転送の個別設定のウィンドウを出す。ここではHTTPのパケットを転送するので、ローカルのポートの80番を、リモート側ホスト(access-server自身、つまり"localhost")のポート80に転送するように設定し[OK]をクリックする。

    • 余談だが、今回はSSHサーバとWeb Proxyサーバを同じマシンで動かしているので[リモート側ホスト]は"localhost"になる。もし、SSHサーバとWeb Proxyサーバを別々のマシンで動かすのであれば、[リモート側ホスト]は(SSHサーバから見た)Web Proxyサーバの動いているマシンのホスト名、もしくはIPアドレスとなる。


先程のウィンドウに戻り、今、設定した項目を確認して[OK]をクリックする。(必要に応じて80番以外でSSHポート転送の対象とする項目を設定する。後で紹介するVMCのポートなども同様に設定する。ここでは、HTTPの転送が目的なので80番ポートの指定だけとしておく。)

端末本体のウィンドウに戻る。この状態で接続するが、今のSSHポート転送の設定は毎回、設定するのは手間なので、ここで一旦、設定を保存しておく。メニュー[設定(S)]から[設定の保存(S)...]を選択して、適当な名前のファイルで保存しておく。(ここでは"HOME.INI"という名前をつけた。)

次にSSHの接続を行なう。メニュー[ファイル(F)]から[新しい接続(N)...]を選択し、接続先とポート番号を指定して[OK]をクリックする。ここではホストマシンのSSH待受けポート(8889)を指定する。

次に、SSH証のウィンドウがでる。ユーザ名とパスワード(正確には秘密キーに対するパスフレーズ)を入力し、認証方式として"RSA/DSA鍵を使う"を指定、[秘密鍵]ボタンをクリックする。

"RSA/DSA秘密鍵ファイルの選択"で、前もって保存しておいた秘密鍵ファイルを指定する。(この例ではid_rsaを指定している。)

先程のSSH認証ウィンドウが出るので、各項目確認の上、[OK]をクリックする。

認証が正しければホストマシン(vmhost)経由でアクセスサーバ(access-server)に接続する。

この時、SSHポート転送の設定が反映されているので、TeraTermを起動したWindowsマシンのlocalhost:80宛のパケットは全てaccess-server:80へ転送される。

なお、この例では仮想マシンのホスト(vmhost)のあるLAN内から、テストしている。実際に無線アクセスポイントなどで使う場合は、ルータのグローバルアドレスを使ってアクセスする。しかし、行き成り外からルータにアクセスして、うまく動作しなかった場合、原因を切り分けるのが大変なので、先ずはLAN内から確実にアクセスできることを確認する。これが上手く行けば、外部からのアクセスが上手く行かなくても、問題はほぼルータの設定に絞り込める。

アクセスサーバ経由でWebにアクセスする

SSHポート転送の環境が整ったところで、ブラウザを使ってアクセスサーバ経由でWebアクセスを実行する。
アクセスサーバのWebサーバ(httpd)をプロキシサーバとして使うので、このWebサーバをプロキシとしてブラウザに登録する必要がある。SSHポートフォワーディングを使った通信を使う度に、ブラウザのプロキシ設定を変更するのは面倒なので(といっても大した手間でもないのだが)、私の場合、負担はInternet Explorerを使って、sshトンネルを使う場合はFirefoxを使うように設定している。つまりIEの方はプロキシ設定をせずに使っていて、Firefoxの方は「localhost:80」をProxyとして設定しておき、使い分けている。ここではFirefoxのプロキシ設定を説明して、実際にアクセスするところを紹介する。

まず、Firefoxを開き[ツール(O)]メニューから[オプション(O)...]を選択する。(ここでの設定はWindows環境のFirefoxについて紹介である。Linux環境のFirefoxであれば[編集(E)]メニューから[オプション(O)...]を選択する、となる。) オプションウィンドウの[詳細]タブから[接続設定(E)...]をクリックする。

インターネット接続ウィンドウが現れるので、プロキシを設定する。[手動でプロキシを設定する]を選択し、[HTTPプロキシ]には"localhost"、[ポート]には"80"を指定する。そして、[すべてのプロトコルでこのプロキシを使用する]にチェックを入れる。[直接接続するサイト]は空白にして置く。以上で[OK]をクリックする。

オプションウィンドウに戻るので[OK]をクリックして設定は終了である。

実際にアクセスサーバ経由でインターネットにアクセスできるか試してみる。まず、アクセスサーバへのTeratermの接続がされている(SSHポート転送が可能な状態)ことを確認して、ブラウザのアドレスバーに任意のURLを入れてみる。(この例では"http://google.co.jp/"を指定している。)直ぐに、見慣れた画面が見れるはずだ。

ただ、余りにそっけないので「本当にアクセスサーバを経由しているのか?」と疑問に思うだろう。そこで、アクセスサーバを経由しないとアクセスできないホストやURLを指定して試してみると良い。(アクセスサーバの /etc/hostsにアクセスサーバしか名前解決できないないようなニックネームを追加して、そのホスト名を使ってアクセスしてみるのが、一番手っ取り早い。下の例では、実際にリモート環境からアクセスして、リモート側でしか名前解決できない特殊なURLを指定した例である。)

アクセスサーバ経由でWebアクセスできることが確認できれば、設定終了だ。