透過的なプロキシー

透過的なプロキシーとは (ATS のような) プロキシーが目に見えることなくクライアントとサーバーの接続を中継できる能力です。

このドキュメントで使用される概略のネットワーク構造を下図に示します。

ATS basic traffic flow of Transparent Proxy

ATS の透過的なプロキシーのトラフィックの基本的な流れ

クライアントからインターネット (もしくは外部のクラウド) へ通過する全てのネットワークトラフィックが通過するゲートウェイ装置が存在しなければなりません。ゲートウェイはそのトラフィックの選択されたストリームに ATS を実質的に挿入する責任があります。それぞれのトラッフィックストリームは 2 つに分割され、両側が ATS で終端処理されます。つまり、ストリーム 緑-1 と 赤-2 は緑の接続と赤の接続に分割されます。 ATS はゲートウェイシステム上に存在するかもしれないし存在しないかもしれないこと、リダイレクトされたトラフィックが他のネットワーク設備を流れるかもしれないことに注意してください。

ATS は 2 つの接続を使うので、透過性はクライアントとオリジンサーバー (インターネットもしくは外部クラウド) に個別に設定可能です。我々は一般的に "透過的プロキシー" と呼ばれるものを 2 つの観点、 内向き透過性外向き透過性 で定義していきます。

内向き透過性はプロキシーに内向きである接続に透過的なプロキシーです。つまりプロキシーに接続するクライアントによって開始される接続 (緑-1) です。同様に、外向き透過性はプロキシーから外向きである接続に透過的なプロキシーです。つまり、プロキシーによって開始されるオリジンサーバーへの接続 (赤-2) です。

多くの場合はこれら 2 つの透過性は組み合わせて使われますが、そうすることは必須ではありません。 Traffic Server は両側の透過性を独立にサポートしています。

重要

透過性には特殊なルーティングが必要であり ATS を設定するだけでは実現できないことに注意することが決定的に重要です。 ATS の透過性には Linux カーネルからのサポートも要求します。そのため現時点では以下の機能をサポートする最近の Linux カーネル上でしか十分に機能しません。

  • TPROXY
  • POSIX ケーパビリティ

これに加えて特殊なルーティングのために iptables そしていくつかの場合では ebtables が必要になるでしょう。

標準的なビルド手順で透過性のサポートが機能するはずですが、機能しない場合はこれらの より詳細な手順 を参照してください。

透過性はサーバーのポートごとに設定され、グローバルには設定されません。これは proxy.config.http.server_ports の設定値によってなされます。さらに、クライアント側を透過にするには proxy.config.reverse_proxy.enabled を有効にしなければなりません。これは将来のパッチで修正されるべきです。

最初のケースでは属性の文字 (デフォルトの 'X' を置き換える) を使ってください。

属性 透過性のスタイル リバースプロキシー

=
完全な透過性: どちらか
>
内向きの (クライアント) 透過性: 有効
<
外向きの (オリジンサーバー) 透過性: どちらか

外向きの透過性のケースでは、明示的なプロキシーの仕組みを使うか、 ATS サーバーの IP アドレスをオリジンサーバーのアドレスであると DNS で公表することにより、クライアントが直接 ATS に接続しなければなりません。

いくつかのテスト済みのシナリオ --