>お楽しみコーナー>Linux>SSHトンネル サイトマップ 最終更新日:2005/07/22

センリュウのホームページへ ようこそ!

 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 作成