アクセスサーバ経由で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 servesStartServers 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サーバの設定とかは余りやったことがないので、他にも設定しなければならないところはあるのかも知れないが、まぁ、これで問題なく動いている。ポイントは次のようなところだ。
設定後、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]をクリックする。
先程のウィンドウに戻り、今、設定した項目を確認して[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アクセスできることが確認できれば、設定終了だ。