TT Lab
はじめる
学ぶ 学習パス コース

SSHとファイル転送

トンネルを三方向に掘る

TT Labで続きを見る

目標

-L、-R、-Dの3種類のフォワーディングをすべて作ってみて、各トンネルがどこにポートを開くかを、自分で確認します。

なぜ重要なのか

フォワーディングは、方向さえ混同しなければ、すべて簡単です。-Lは自分側のポートを開き、-Rは向こう側のポートを開き、-Dは自分側にSOCKSプロキシを立てます。そして-Lの真ん中のホスト名は、SSHサーバーを基準に解釈されます。自分側でその名前が解決できなくても、問題ありません。この事実1つが、踏み台サーバー経由の接続のほぼすべてです。

このラボでは、SSHサーバーは127.0.0.1:2222です。サーバーとクライアントが同じホストなので、-Rの結果もすぐに確認できます。

ステップ

  1. /opt/fixtures/nt-http/server.pyを、ポート9200、127.0.0.1へのバインドで起動してください。これがトンネルの宛先です。
  2. ローカルフォワーディングで、19200 → 127.0.0.1:9200のトンネルをバックグラウンドで開き、curl -s http://127.0.0.1:19200/okの結果を/root/tun/local.txtに保存してください。
  3. 19200を誰が開いたかを確認して、/root/tun/proof.txtに保存してください。プロセス名にsshが表示される必要があります。
  4. リモートフォワーディングで、SSHサーバー側に19300を開いて127.0.0.1:9200へ送り、curl -s http://127.0.0.1:19300/okの結果を/root/tun/remote.txtに保存してください。
  5. ダイナミックフォワーディング(SOCKS)で11080を開き、そのプロキシを通してhttp://127.0.0.1:9200/okをリクエストした結果を、/root/tun/socks.txtに保存してください。
  6. ローカルフォワーディングをもう1つ開きます。ただし今回は、すべてのアドレスにバインドして、19201 → 127.0.0.1:9200へ送り、自分のインターフェースのIPで接続した結果を、/root/tun/gateway.txtに保存してください。
  7. 現在起動しているsshトンネルのプロセスのコマンドラインを、/root/tun/inventory.txtに保存してください。最低でも4行(-Lが2つ、-R、-D)ある必要があります。
  8. /root/tun/report.txtを次の3行で作成してください。各値は、そのオプションがポートを開く側です。 L=local / R=remote / D=local

参考

バックエンドサービスの起動

/opt/fixtures/nt-http/server.pyを、ポート9200、127.0.0.1へのバインドで起動してください。これがトンネルの宛先です。

トンネルの宛先になるサービスが必要です。ループバックにだけ起動しても、トンネルを通せばアクセスできます。

ローカルフォワーディング

ローカルフォワーディングで、19200 → 127.0.0.1:9200のトンネルをバックグラウンドで開き、curl -s http://127.0.0.1:19200/okの結果を/root/tun/local.txtに保存してください。

-Lの後ろには、3つの値をコロンでつないで書きます。真ん中のホストは、SSHサーバーを基準に解釈されます。

トンネルが開いたポートの確認

19200を誰が開いたかを確認して、/root/tun/proof.txtに保存してください。プロセス名にsshが表示される必要があります。

ssでリッスンソケットを見ると、プロセス名が出ます。トンネルは、sshプロセスがポートを開きます。

リモートフォワーディング

リモートフォワーディングで、SSHサーバー側に19300を開いて127.0.0.1:9200へ送り、curl -s http://127.0.0.1:19300/okの結果を/root/tun/remote.txtに保存してください。

-Rは、SSHサーバー側にポートを開きます。このラボでは、サーバーが同じホストなので、結果をすぐに確認できます。

SOCKSプロキシ

ダイナミックフォワーディング(SOCKS)で11080を開き、そのプロキシを通してhttp://127.0.0.1:9200/okをリクエストした結果を、/root/tun/socks.txtに保存してください。

-Dはポートを1つだけ受け取ります。curlには、SOCKS5プロキシを指定するオプションがあります。

外側のアドレスにバインド

ローカルフォワーディングをもう1つ開きます。ただし今回は、すべてのアドレスにバインドして、19201 → 127.0.0.1:9200へ送り、自分のインターフェースのIPで接続した結果を、/root/tun/gateway.txtに保存してください。

-Lの前に、バインドアドレスを追加で書けます。または、-gオプションを使う方法もあります。

トンネル一覧の整理

現在起動しているsshトンネルのプロセスのコマンドラインを、/root/tun/inventory.txtに保存してください。最低でも4行(-Lが2つ、-R、-D)ある必要があります。

現在起動しているsshプロセスのコマンドラインを見ると、各トンネルの方向がわかります。

3つの方向の比較表

/root/tun/report.txtを次の3行で作成してください。各値は、そのオプションがポートを開く側です。 L=local / R=remote / D=local

ポートがどこに開くかが、核心的な違いです。値は、localまたはremoteで書いてください。