センリュウのホームページへ ようこそ!
SSHトンネル openSSH
SSHトンネルを使った安全なTCP/IP接続
SSHは単なる telnet などの代わりではなく、SSHの真価はトンネルにあります。これを使うと、様々なネットワークアプリケーションの通信を、SSHの暗号回線の中に入れて送受信することが可能となります。
トンネル
SSH暗号通信 ポート22 平文通信
localhost ――――――→ SSHサーバー(A) ――――――→
接続先ホスト(B)
ポート1111 ポート2222
llocalマシンの1111番ポート接続を、****サーバーの2222番ポートに転送(ポートフォワーディング)する。
localhost と host A の間は SSH で保護され、host A と host B の間は保護されない。
linuxクライアント
$ ssh hostA -L 1111:hostB:2222 -N
ここで言う host Bは 、host A から見たときの host B
であることに注意。
つまり、SSHサーバーと接続先ホストが同一の場合は、hostBにはlocalhostまたは127.0.0.1と記述する(また、グローバルアドレスなど他のものにしてもうまく動作しないので注意)。
-L オプションは複数指定できるので、同じ SSH サーバ を経由する接続でありさえすれば、一回の認証で複数本のトンネルを張ることができる。
windowsクライアント(PuTTY)
localhost ――――――→ SSHサーバー ――――――→ ****サーバー
ポート1111 ポート2222
トンネルの設定
PuTTYを起動し、先に保存したセッションを Loadする。
次に、SSH の下の Tunnels
という項目を開き、以下のように設定。
Source portに1111を、Destination に「****サーバーのホスト名(またはIPアドレス):2222」を入力(:で区切って ****サービスのポート番号を指定)。
下のチェックがLocal になっているのを確認してから、Add
ボタンを押す。
注意 上の設定の内、"Local ports accept connections from other hosts"
にチェックを入れないこと。
また、上と同様、SSHサーバーと接続先ホストが同一の場合は、localhostまたは127.0.0.1と記述する。
複数の****サーバーへ接続したい場合にはローカルのポートを変えて行う。
例えば、
L1111 server1.foo.com:2222
L1112 server2.foo.com:2222
アプリケーションの設定
****サーバーから見ると、ユーザーは SSHサーバーからアクセスしているように見えるが、一方、アクセスするアプリケーション側は、自分のマシンを****サーバーとして設定する必要がある。つまり、アプリケーションにはアクセスする****サーバーとして自分自身localhostを指定する=自分自身を****サーバーと見立てて送るとSSHトンネルを通して本物の****サーバーに届くことになる。
SSHトンネルの例 FTP(proftpd)の場合
FTPは、制御用とデータ用の2つのコネクションを利用しており(使用ポートは21と20)、データ転送の場合は、通常ではFTPサーバ側からFTPクライアントに接続するようになっている(Activeモード)。
しかし、ファイアウォールなどがある場合は、Activeモードでは転送できないため、Passiveモードというのが用意されていて、
このモードでは、PASVコマンドで受信したサーバのポートに対して、クライアント側から接続することができる=Activeモードとはconnectの向きが逆になる。
SSHトンネルを使う場合は、この後者の Passiveモードを利用することになる。
●FTPサーバー(proftpd)の設定
/etc/proftpd/proftpd.conf
PassivePorts 65520 65529 空いているポートを使う(ここでは65520から65529までの10個を指定。フィルタリングも開けておく。)
MasqueradeAddress 127.0.0.1 PASVの返答でサーバアドレスを127.0.0.1にする
●windowsクライアント
PuTTYの設定(SSHサーバーとFTPサーバーが同じマシン上にあるときの設定)
「接続」→「SSH」→「トンネル」→「ポートフォワーディング」の「新しいフォワードされるポート」の追加
源ポート 65520
送り先 localhost:65520 (または「127.0.0.1:65520」。これが他のものになっているとうまく動作しないので注意)
「ローカル」を選んで「追加ボタン」を押す。
L65520 ……と表示される。
あとは、portが65520から65529まで対応するように繰り返す。
同様にして、port 21も設定しておく。
セッションを保存。
FFFTPの設定
SSHトンネルを使う場合、{基本」のホスト・アドレスは「localhost」に、さらに、「拡張」を開いて「PASVモード」(passiveモード)をチェックしておく。
トンネル例 リモートディスクトップ(windowsXP)
windowsXP linux windowsXP
クライアント ――――――→ SSHサーバー ――――――→
リモートディスクトップ・サーバー
ポート3390 アドレス1.2.3.4 192.168.0.1 ポート3389 アドレス192.168.0.2
●使用ポート TCP/3389
●windowsXP リモートディスクトップのサーバー側の設定
システムのプロパティ→リモート→リモートディスクトップを有効にする
これで管理者ユーザーとそのパスワードで接続可能になる。
その他のユーザーは、「リモートユーザーの選択」を行う。
●windowsXP クライアント側の設定
PuTTYの設定
セッション設定 ホスト名 1.2.3.4 ポート 22
トンネルの設定
Source portに3390を、Destination に「192.168.0.2:3389」を入力。
Source portを3389にして、次の接続で「127.0.0.1:3389」とした場合、「すでにコンソールは取得されている」となってうまく接続できないので注意。
リモートディスクトップ接続設定
アクセサリ→通信→リモートディスクトップ接続
「オプション」で接続設定を行う。
全般/サーバーへの接続設定
コンピュータ 127.0.0.1:3390
ユーザー ****
パスワード ****
ローカルリソース クライアント側のハードディスクやプリンタなどをサーバーにマウントすることができる。これでファイルをコピーしたり、手元のプリンタを使ったりすることができるようになる。
●Wake up On LAN
リモートディスクトップとWake up On LAN(パソコンをLANカードから遠隔起動)を組み合わせて使うと便利。
ここでは、常時ON状態にあるlinuxマシンから同一LAN(内部LAN)上の別マシン(windowsXPリモートディスクトップ・サーバー)の電源投入を行うようにする。
linuxマシン
http://kokone.sakura.ne.jp/Html/Linux/index.shtmlよりwol-0.1-1.i386.rpmをダウンロード。
# rpm -i wol-0.1-1.i386.rpm でインストール。/usr/bin/にインストールされる。
# wol IPアドレス MACアドレス (MACアドレスは、**:**:**:**:**:**の形で記述)
でマジックパケットが送られる(これをSSHのリモート接続で実行する)。
リモートディスクトップ・サーバー側の設定
LANカードのWOL端子をマザーボードのWOL端子にケーブル接続する。
@BIOS設定 PowerManagement WOLをEnabledにする
Aシステムのプロパティ→ハードウェア→デバイスマネージャ→ネットワークアダプタ
所定のLANカードをダブルクリック→電源の管理
デフォルトでは上だけがチェックされているが、「このデバイスで、スタンバイ状態を解除できるようにする」以下の2個もチェックし、3つともONにする。どうしてもつながらない場合は、一番下の「管理ステーションでのみ…」のチェックをはずしてみる。マジックパケット以外でも何らかの信号をLANポートが受信しただけで、サスペンドが解除されるようになる。
BMACアドレスの確認(クライアント側の設定に必要)
マイネットワークのプロパティ→ローカルエリア接続/状態→サポート→詳細
C自動ログオンにしておく(パソコン起動時にパスワード等の入力を省略・自動化)
ファイル名を指定して実行→「control userpasswords2」
履歴 2005/04 作成