最後に解説するlistentwoとconnecttwoは、ファイヤウォールで隔たれたホストへのポートフォワーディングを行うためのツールである。先に見たtcp-pfに対してconnecttwoの有す最大の相違点は、ローカルホスト以外の送信元ポートを指定できることだが、私が確認した限りの話においてこれらのツールは、デフォルト設定下および-hというコマンドラインオプションの使用に関する情報を何も提示してくれないのだ。またこれらは、レートリミティングもロードバランシングもサポートしていない。これらのツールを用いた基本的なTCPポートフォワーディングの設定法は複数存在するが、その詳細についてはshd-tcp-toolsに付属するreadmeファイルを参照して頂きたい。
ポートフォワーディング用のコマンド群はSSHとの併用も行える。先に触れたように、SSH固有のポートフォワーディング機能を介してshd-tcp-toolsのポートフォワーディングを利用することは一見奇妙に感じられるかもしれないが、両者の組み合わせはshd-tcp-toolsのレートリミティング機能を利用可能とするし、1つしかない既存のSSHポート転送を基にしたポートフォワーディングを新規に複数セットアップすることも可能になるのだ。例えば「tcppipe :2002 -」というコマンドにより、サーバのstdoutにポート2002から任意の配信を可能とした後、下記に示した2つのコマンドをクライアント側にて実行したとしよう。このうちsshコマンドは、ローカルマシンのポート2001からサーバマシンのポート2002に向けてSSHによるポートフォワーディングを行わせるためのもので、その次のtcppipeコマンドは先に実行したものとよく似ているが、この場合はSSHのポートフォワーディングを介してポート2001のトラフィックをサーバ側のポート2002に送信するようにしている。
$ ssh -N -L 2001:localhost:2002 ben@server.example.com $ echo hi | tcppipe - localhost 2001
このサンプルコードだけを見る限り、メインの処理を賄っているのはSSHだけでshd-tcp-toolsを併用するメリットは何も感じられないかもしれないが、実は--limitオプションを用いることで、本来は1つしかないSSHポートフォワーディング接続を基にして複数のポートフォワーディングを構築し、これらの各ポートフォワーディングごとに異なるレートリミティングを施すことが可能となるのだ。
通常shd-tcp-toolsはあらゆるネットワークインタフェースに接続できるが、特定のネットワークインタフェースのみに制限することも可能で、それにはexport INADDR_DEFAULT="pyx.example.com"のようにして環境変数INADDR_DEFAULTをエクスポートすればいい。
まとめ
shd-tcp-toolsに属すツール群の間では、使用可能なコマンドラインオプションの一部に不整合性が見られる。例えばレートリミティングの指定にtcp-pfでは--rateオプションを使うのに対して、tcppipeでは--limitオプションを使うとreadme.txtには記述されている。ところが実際には--limitだけでなく--rateもtcppipeコマンドは受け付けるので、これら2つのツールに共通した転送速度制限の指定オプションとしては後者を使えばいいのである。また送信元と転送先の指定情報についても、tcppipeではコマンドラインの最終引数として記述するのに対して、tcp-pfでは-sおよび-dパラメータを用いた指定をしなくてはならない。
前述したような不備は、バージョン番号を見る限りベータ版とみなしていい段階のツールであることを考えると、些末的な問題点だと言えるだろう。実際これらのユーティリティは、いずれも正常に機能して所定の目的を果たしてくれるのである。SSHでのアクセスを許可すると同時に、1人のユーザが利用可能とするネットワーク帯域幅を制限したいという場合に、個々のポートフォワーディング別にレートリミティングを個別設定できるというshd-tcp-toolsの存在が役に立つはずだ。
Ben Martinは10年以上にわたってファイルシステムに取り組んでおり、博士課程の修了後、現在はlibferris、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。
