製品情報
技術情報
  簡単に使ってみましょう(Windows)
  簡単に使ってみましょう(UNIX)
  よくある質問 (FAQ)
  テクニカルノート
  製品比較
  用語集
  ネットワーク上でのソフトウェア開発
  インターファイル・ブランチング
  ソフトウェア構成管理の
高度な実践方法・・・
  変更管理を通じた製品品質の向上
  PERFORCE−SOFTUNE
連携運用ガイド (Rev1.02)[PDF]
ライセンス情報
テクニカルサポート
ソフトウェア ダウンロード
マニュアル ダウンロード









 
テクニカルノート022 HOME製品PERFORCE 技術情報ノート


ファイアウォール経由で PERFORCE にアクセスする方法


PERFORCE クライアントは、TCP/IP を使用して PERFORCE サーバと通信します。 PERFORCE サーバはそれが稼動しているマシン上の特定のポートで接続を待機し、クライアントはそのポートに接続します。

サーバが接続を待機するポート番号は、起動時に指定されます。この例では、ポート番号を 3710 とします。ポート番号は任意ですが、他のネットワーク・サービスと衝突しないように選択しなければなりません。クライアント・マシン上で使用されるポート番号は、動的に割り当てられます。


ファイアウォールとはネットワークの構成要素であり、信頼されたローカル・ネットワークの外部からのパケットがローカル・ネットワークに到達できないようにしています。これは、低レベルのネットワーク・プロトコルで行われます。具体的には、信頼済みの IP アドレス以外から到達しているパケットはすべて、単に無視されます。

このときクライアントは信頼されていないネットワーク部分から到達しているため、サーバに接続することができず、どの接続要求もサーバが稼動中のマシンに到達しません。


唯一の解決策は、何らかの方法で信頼済みのネットワークから PERFORCE サーバへの接続を確立することです。これは、セキュア・シェル(SSH)と呼ばれるパッケージを使用して安全に実現することができます。多くのセキュア・シェル実装が存在しています。(ただし PERFORCE と共に、または PERFORCE 社からは配布されていません。)

SSH は rsh(リモート・シェル)に代わるものであり、これによりリモート・システムにログインし、そこからコマンドを実行することができます。優れた点として、接続が暗号化されているため、データのどの部分も「Big, Bad, Untrusted Network」からは見えません。rsh などの単純なユーティリティでは、パスワードでさえ入力時には可視になっています。SSH の場合は不可視です。

そこで解決策の 1 つとして、SSH を使用してファイアウォール・マシンにログインし、そこから PERFORCE クライアントを実行することが考えられます。ただし、それは最適な解決策ではありません。クライアント・ファイルは通常、ローカル・マシンにあることが望まれるからです。

最適な解決策は、SSH の機能を利用して任意の TCP/IP 接続を転送することです。PERFORCE クライアントを信頼済みのローカル・ネットワーク上のファイアウォール・マシンから接続しているように見せることができます。ファイアウォール・マシンとクライアント稼動マシンとのリンクは、SSH によって設定されたセキュア・チャネルを経由します。

この例では、PERFORCE サーバが perforce.bigcompany.com というマシン上にあり、ファイアウォール・マシンが gatekeeper.bigcompany.com であることにします。さらに、ローカル・ポートを 4242 (任意の値)とし、PERFORCE サーバがポート 3710 で待機することにします。このときTCP/IP 接続を転送するための SSH 起動コマンドは以下のとおりです。
ssh -L 4242:perforce.bigcompany.com:3710 gatekeeper.bigcompany.com
ここで、gatekeeper.bigcompany.com にログインするためにパスワードを入力する必要があるかもしれません。 接続が確立されると、SSH はローカル・マシン上のポート 4242 で待機し、そのポートで受信した内容を gatekeeper.bigcompany.com への接続に転送し、その後「通常のチャネル」によって perforce.bigcompany.com のポート 3710 に転送します。

ここで必要なことは、環境変数 P4PORT を 4242 に設定して、PERFORCE クライアントにポート 4242 を使用するよう指示することです。このようにすると通常は、ポート 4242 で待機しているマシンで稼動中のサーバに接続を試みることになりますが、この場合はそのポートで待機している PERFORCE サーバではなく、SSH に接続します。これはクライアントには透過的ですが、このポートを通して送信されるすべての内容は、perforce.bigcompany.com の実際の PERFORCE サーバに透過的に転送されます。

もう1つの問題は、不要なログイン・セッションがあることです。これは次のコマンドを実行することで解決できます。
ssh -n -L 4242:perforce.bigcompany.com:3710 gatekeeper.bigcompany.com sleep 9999999 &
ここで、SSH はリモート・システム上で sleep コマンドを実行するよう指示されています。これにより長期間にわたって、強制終了されないようにすることができます。-n オプションは stdin からの読み取りを抑止し、& はバックグラウンドで処理するよう指示します。結果として、このコマンドの実行後にリンクが設定され、強制終了されるログイン・セッションがなくなります。

SSH が目的の処理を行うように構成すれば、長いコマンドを毎回入力しなくて済みます。SSH の Windows バージョンには、SSH の構成用のグラフィカル・ユーザ・インターフェースがあります。

最後の懸念事項:これでローカル・マシン上のポート 4242 が安全と思われるサーバに送信するようになりましたが、ローカル・マシンの安全性を確実にすることが賢明です。SSH クライアント・ドキュメンテーションを調べ、ローカル接続のみを受け入れるようになっているかどうか診断してください。


戻る