トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

Win32/SMBoverSSH

INDEX

SMB over SSH

SSHのポートフォワーディング機能を利用して、sshサーバのあるネットワークのファイルサーバ(samba)の共有フォルダにアクセスする。sshを利用するのでVPNが利用できなくてもファイヤーウォールやインターネットを超えて、Windowsのファイル共有サービスにアクセスすることが出来る。

 必要なもの

  • sshサーバと接続できるアカウント
  • sshサーバから接続可能なファイルサーバ
  • PortForward機能を持つsshクライアント
  • 管理者権限の使えるWindowsマシン

sshのポートフォワーディング機能を利用するので当然その機能が必要になるが、さらに、ループバックアドレスを利用できないので、ローカル側でもポート番号だけでなくIPアドレスも指定できる必要がある。

ファイルサーバは、sambaサーバに限らず共有を利用できるWindowsマシンなどでもよい。また、アクセス制御を行っている場合は、そのアカウントも必要となる。

Windowsマシンに管理者権限が必要なのは、「Loopback Adapter」という仮想ネットワークインターフェースを追加する必要があるため。設定が済めば管理者権限は必要ない。

最低限の説明だけなので、sambaやsshサーバの設定やsshの接続設定が出来ていること。確認したのは、OpenSSHd, LANDISK, PuTTY, WinXP Pro SP2 という環境です。

準備

 クライアント(Windows)の設定

仮想ネットワークアダプタをクライアントに追加する。すべて Administrator権限で行う。

  1. 「コントロールパネル」の「ハードウェアの追加」を開く
    1. 新しいハードウエアの検索では見つからないので手動で追加を行う
    2. 種類で「ネットワークアダプタ」を選択する
    3. 製造元「Microsoft」の「Microsoft Loopback Adapter」を追加する
  2. 「コントロールパネル」の「ネットワークとダイヤルアップ接続」を開く
    1. 新しく作成された「ローカル エリア接続」のプロパティを開く
    2. 「Microsoft ネットワーク用ファイルとプリンタ共有」のチェックを外す
    3. 「インターネットプロトコル(TCP/IP)」のプロパティを開く
      1. 169.254.0.1 など重複しないIPアドレスとネットマスクを設定する
      2. DNSやゲートウエイの設定は必要ない
      3. WINSの設定から「NetBIOS over TCP/IP を無効にする」を選択する
    4. 接続の名称をわかりやすい名前に変える

IPアドレスは、プライベートアドレス[1]やリンクローカルアドレス[2]あたりを使用するとよいかと…

 sshクライアントの設定

※通常のSSH接続に必要な設定は出来ているものとして、ポートフォワードの設定を追加する。

仮想ネットワークアダプタのIPアドレスを 169.254.0.1。sshサーバから見たsambaサーバのIPアドレスを 192.168.0.2 とした場合、以下の様に追加する。

  • ローカル側からリモート側へポートフォワーディング
  • ローカルポートは「169.254.0.1:139」
  • リモート側ホストは「192.168.0.2」で、ポートは「139」

また、WindowsVista で使用する場合は、139番ポートの他に445番ポートも必要となるので、445番も同様に追加する。

ちなみに、sshサーバがsambaサーバを兼ねている場合、リモート側は 127.0.0.1:139 でもよい。

 接続と切断

  1. SSHで接続する(SSHのログインもする)
  2. エクスプローラなどで、「\\169.254.0.1」を指定して共有フォルダを参照する
  3. パスワードを聞かれる場合は、転送先のユーザ名とパスワード入力する

共有フォルダをネットワークドライブに割り当てることも出来る。当然、SSHの接続を切ると共有フォルダはみれなくなる。

hosts もしくは lmhosts ファイルに「169.254.0.1」を適当な名前で登録すれば、「\\名前」でアクセス出来る。

ソフトウエア毎の設定

仮想ネットワークアダプタのIPアドレスを 169.254.0.1。sshサーバから見たsambaサーバのIPアドレスを 192.168.0.2 とする。

 PuTTY の設定

接続 - SSH - トンネル 項目に、ポートフォワードの設定を追加する。

  • 源ポート:169.254.0.1:139
  • 送り先:192.168.0.2:139
  • ローカルにチェック
  • 自動にチェック(IPv4,IPv6 でもいい)

※同様に445番も追加する。

 PuTTY の pfwd の設定

ポート転送だけ必要なら、PuTTYを起動してターミナルを表示しなくても、付属のpfwdを使用すれば、ターミナルを表示せずにポート転送を行える。

通常のポート転送の設定が出来ているなら、以下のようにSMB用の設定を追加するだけです。(SEQは適当に)

SEQ=L169.254.0.1:139:192.168.0.2:139

ただ、ちょっとクセ(と言うか気をつけること)があるので自分用にメモメモ。

  • 接続先のホスト鍵が PuTTY.ini に保存されていないと、接続エラーで終了してしまう。なので、一度 PuTTY で、セッションの設定をして、接続しホスト鍵を記録しておく。
  • SSHサーバーアドレスの設定で、IPアドレスやホスト名の他に、PuTTY で作成したセッション名を指定できる。ただ、iniの説明では「@セッション名」となっているが「@」はいらない。
  • プライベートキーファイルの設定で、iniの説明では、省略時にはセッションの設定を使うとあるが、セッションの設定で設定していても設定が必要。

例:PuTTYで既に、test と言うセッション名で設定が出来ていているものとして。

[SSH]
; SSHサーバーアドレス
Host=test

; プライベートキーファイル
PrivateKey=test.ppk

[FORWARD]
; NetBIOSセッション・サービス
01=L169.254.0.1:139:192.168.0.2:139
; ダイレクト・ホスティングSMBサービス
02=L169.254.0.1:445:192.168.0.2:445
; リモートディスクトップ
; ※もっとも接続時にポート番号を設定できる
;03=L169.254.0.1:3389:192.168.0.2:3389

 TeraTerm の設定

結論から言うと出来ない。(やり方があったら教えて)

設定 - SSH転送 で「SSHポート転送」のダイアログを開く。「追加」ボタンを押下し入力ダイアログで以下を入力する。

  • ローカルポートを選択(チェック)
  • ローカルポートに「169.254.0.1:139」
  • リモート側ホストに「192.168.0.2」
  • (リモート側)ポートに「139」

なんだけど、ローカルポートの欄に入れると「169.254.0.1:」までしか入らない…。

ちなみに、コマンドラインオプションでも転送の設定が出来るので

/ssh-L169.254.0.1:139:192.168.0.2:139

とやってみるけどうまくいかない。

v4.58 ではエラーになって起動しない。v4.59 はエラーにはならないが転送されていない。v2.3 は試してない(古いし)。

 Poderosa (SSH PortForwarding Gateway) の設定

使ってないからよくわからない。「出来ない」と言うのと「出来た」と言うの両方見かけるけど…。

Poderosa 付属の SSH PortForwarding Gateway を使用する。

  • SSHサーバ、SSHポート、アカウント、認証方法 は他の転送と同じ
  • ローカルでlistenするポート:169.254.0.1:139
  • 転送先ホスト:192.168.0.2
  • 転送先ポート:139
  • オプションの「Loopbackアドレスからの接続のみ許可」は“チェックしない”

 Cygwin OpenSSH と PortForwarder の設定

それぞれの設定ファイルに以下の転送の設定を追加する(すればいいらしい)。

LocalForward 169.254.0.1:139 192.168.0.2:139

覚え書きメモ

 ループバックアドレス

ループバックアドレス[3]と言うのもあり、127.0.0.1 は自分自身に割り当てられている。

2000では、アダプタを追加しなくても 127.0.0.2 などを利用できるらしい。XPは自身になってしまうためダメ。

 参考ページ

最終更新時間:2008年11月14日 17時22分00秒 指摘や意見などあればSandBoxのBBSへ。

  • [1]Private address : 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
  • [2]Link local address : 169.254.0.0/16
  • [3]Loopback address : 127.0.0.0/8