インターネットとSaaSへのセキュアなアクセス(ZIA)
PAC転送トラフィックの負荷分散
Zscalerは、クラスター内で最大8つの仮想IP(VIP)アドレスをサポートし、データ センターで最大64個のクラスターをサポートして、受信トラフィックの負荷分散を確保します。負荷分散は、通常、送信元IPアドレスと宛先IPアドレスに基づきます。多くの展開では、Zscaler Client Connectorを通じて、またはブラウザー経由で直接のいずれかの方法でトラフィック転送が行われます。組織でNATを使用している場合、複数のユーザーから発信されるトラフィックのパブリックIPアドレスは同じです。
多くの組織では、トラフィック転送メソッドとしてZscaler Client Connectorのみを使用しています。このような場合、1つの物理的な場所からの大量のユーザーが、単一のエグレスIPアドレスを持つエッジ ゲートウェイの背後にいます。これは、すべてのユーザーが同じ送信元IPアドレスを持つことを意味します。したがって、一般的な負荷分散の計算では、組織のすべてのユーザーがデータ センター内の同じZIA Public Service Edgeに接続します。これにより、データ センター内の1つのサービスエッジインスタンスが過負荷になり、それによってパフォーマンスの問題が発生します。
PAC転送トラフィックをデータ センター内の複数のサービスエッジインスタンスにわたり均等に分散するために、PACサーバーは宛先IPアドレスと同じデータセンター内に複数のVIPを返します。同じ送信元IPアドレスを持つクライアントに宛先IPアドレスとして異なるVIPが割り当てられている場合、それらは異なるサービスエッジインスタンスに負荷分散されます。これにより、確実に同じ送信元IPアドレスからのトラフィックが複数のサービスエッジインスタンスにわたり均等に分散されます。
PACサーバーは、ZscalerがホストするPACファイル内の${GATEWAY_FX}
変数と${GATEWAY_Fn}
変数(nは0~7から最大8つの値を取ることができます)を使用して、着信トラフィック用のVIPを割り当てます。
PAC転送トラフィックの負荷分散は、次のように分類されます。
- Zscaler Client Connectorトラフィック用の負荷分散
Zscaler Client Connectorユーザーでは、PACサーバーは、ZscalerがホストするPACファイルの
閉じる${GATEWAY_FX}
変数を通じて、デバイスにVIPを割り当てます。Zscaler Client Connectorは、PACサーバーに接続してPACファイルをダウンロードすると、リクエストとともに一意のデバイス識別子を送信します。PACサーバーは、${GATEWAY_FX}
変数を使用してHTTPリクエストから受信したデバイス識別子に基づいて、VIPの1つをデバイスに割り当てます。同じデバイスがPACファイルをダウンロードするために再度接続すると、PACサーバーは、その一意の識別子に基づいて、以前にデバイスに割り当てられていたのと同じVIPを割り当てます。 - Zscaler Client Connector以外のトラフィックの負荷分散
各データ センターには、最大8つの一意のVIPを割り当てることができます。Zscaler Client Connector以外のユーザーでは、管理者はZscalerがホストするPACファイルの変数を利用して
${GATEWAY_Fn}
、クライアントを複数のVIPに均等に分散できます。${GATEWAY_Fn}
は、データ センターから利用可能なVIPを選択するために使用される${GATEWAY_F0}
から${GATEWAY_F7}
までの8つの異なる変数を表します。PACサーバーは、PACファイルで使用されている変数に基づいてVIP値を返します。データセンターに割り当てられたVIPの数が8つ未満の場合、PACサーバーはラウンドロビン方式で利用可能なVIPを8つの変数すべてに割り当てます。次の図は、データセンターで使用可能なVIPの数に基づいてVIPが変数にどのようにマップされるかを示しています。
Zscalerでは、Zscaler Client Connector以外のユーザーが1つのPACファイルを使用して複数のVIP機能を活用するために、次のPACファイル形式を推奨しています。
- Zscaler Client Connector以外のユーザー向けの推奨PACファイル形式を参照してください。
splitPublicTraffic()
は、クライアントのプライベートIPアドレスを対応するオクテットに分割し、最後のオクテット%8
を実行して、0から7の間のインデックスを取得します。この関数ファイルでは、複数のPAC関数を使用して、8つのPAC変数にクライアントのトラフィックを均等に分散させています。最初に、PACファイルはmyIpAddress()
関数を使用してクライアント送信元IPアドレスを決定します。次いで、クライアントIPの最後のオクテットを抽出します。この数値を8で除算し、余りを使用して8つのゲートウェイ変数の1つを割り当てます。function splitPublicTraffic() { var myip = myIpAddress(); /* get the client’s Private IP address */ var ipbytes = myip.split("."); /* split the IP into its octets and store in an array */ var lastoctet = parseInt(ipbytes[3], 10); switch (lastoctet % 8) { /* last octet % 8 returns the index to use */ case 0: return "PROXY ${GATEWAY_F0}:80; PROXY ${SECONDARY_GATEWAY_F0}:80; DIRECT"; case 1: return "PROXY ${GATEWAY_F1}:80; PROXY ${SECONDARY_GATEWAY_F1}:80; DIRECT"; case 2: return "PROXY ${GATEWAY_F2}:80; PROXY ${SECONDARY_GATEWAY_F2}:80; DIRECT"; case 3: return "PROXY ${GATEWAY_F3}:80; PROXY ${SECONDARY_GATEWAY_F3}:80; DIRECT"; case 4: return "PROXY ${GATEWAY_F4}:80; PROXY ${SECONDARY_GATEWAY_F4}:80; DIRECT"; case 5: return "PROXY ${GATEWAY_F5}:80; PROXY ${SECONDARY_GATEWAY_F5}:80; DIRECT"; case 6: return "PROXY ${GATEWAY_F6}:80; PROXY ${SECONDARY_GATEWAY_F6}:80; DIRECT"; case 7: return "PROXY ${GATEWAY_F7}:80; PROXY ${SECONDARY_GATEWAY_F7}:80; DIRECT"; } } function FindProxyForURL(url, host) { var privateIP = /^(0|10|127|192\.168|172\.1[6789]|172\.2[0-9]|172\.3[01]|169\.254|192\.88\.99)\.[0-9.]+$/; var resolved_ip = dnsResolve(host); /* Don't send non-FQDN or private IP auths to us */ if (isPlainHostName(host) || isInNet(resolved_ip, "192.0.2.0","255.255.255.0") || privateIP.test(resolved_ip)) return "DIRECT"; /* FTP goes directly */ if (url.substring(0,4) == "ftp:") return "DIRECT"; /* test with ZPA*/ if (isInNet(resolved_ip, "100.64.0.0","255.255.0.0")) return "DIRECT"; /* Updates are directly accessible */ if (((localHostOrDomainIs(host, "trust.zscaler.com")) || (localHostOrDomainIs(host, "trust.zscaler.net")) || (localHostOrDomainIs(host, "trust.zscalerone.net")) || (localHostOrDomainIs(host, "trust.zscalertwo.net")) || (localHostOrDomainIs(host, "trust.zscalerthree.net")) || (localHostOrDomainIs(host, "trust.zscalergov.net")) || (localHostOrDomainIs(host, "trust.zsdemo.net")) || (localHostOrDomainIs(host, "trust.zscloud.net")) ) && (url.substring(0,5) == "http:" || url.substring(0,6) == "https:")) return "DIRECT"; /* use zscaler proxy */ return splitPublicTraffic(); }
閉じる
- Zscaler Client Connector以外のユーザー向けの推奨PACファイル形式を参照してください。