参照が失敗したからといって、宛先がプライベートネットワークの外にあると証明されたわけではありません。証明できるのは、この PAC 評価が必要なアドレスを取得できなかったという点だけです。

この区別は、dnsResolve() が isInNet() ルールに渡される場合に重要です。Chromium の PAC 実装は解決に失敗すると null を返します。結果は常に空文字列だという記憶に頼って失敗分岐を作らないでください。

function FindProxyForURL(url, host) {
    var address = dnsResolve(host);
    if (!address) {
        return "PROXY proxy.example:8080";
    }
    if (isInNet(address, "10.40.0.0", "255.255.0.0")) {
        return "DIRECT";
    }
    return "PROXY proxy.example:8080";
}

この例では、解決できなかった名前をプロキシへ送ります。これはポリシーの選択であり、普遍的に安全な既定値ではありません。プロキシ側にクライアントにはないリゾルバやネットワークの見え方がある場合に有効です。ローカルでの解決を必須とするネットワークには、別の明示的な結果が必要です。

解決は一度だけ行い、その結果を再利用します。判断が単一の値に結び付き、遅くなる可能性のあるヘルパー呼び出しの重複を避けられます。

実際の PAC 利用側も確認してください。従来の IPv4 ヘルパーと拡張 IPv6 ヘルパーでは契約が異なります。1 つのブラウザ実装で試したルールは、同じ PAC URL を使うすべてのアプリケーションでの対応を証明するものではありません。

要件が既知の企業サフィックスの経路指定だけなら、ホスト名ルールで参照自体を避けられます。アドレスがポリシーに本当に必要な情報である場合に限り、アドレスベースの分類を選んでください。

関連記事