HTTPプロキシを使用するときにローカルでDNSを確認する方法はありますか?

HTTPプロキシを使用するときにローカルでDNSを確認する方法はありますか?

これは次の質問に基づいています。https://askubuntu.com/questions/447877/how-to-resolve-the-dns-locally-when-there-is-a-proxy-configured

ただそこにいるのか知りたいです。既存のこれは、IPスコープをプロキシ例外リストに追加し、クライアント(Webブラウザ、IMクライアント、電子メールクライアントなど)がローカルでのみ名前を解決し、IPアドレスと一致しない要求を渡すようにすることによって行われます。


PS:私はhttpプロキシがどのように機能するかを知っていますが、クライアントが最初にDNSキャッシュ/ファイル/サーバー(存在する場合)を要求するのを防ぐことはできません。これはプロキシ自体には役に立ちませんが、プロキシに送信される内容を決定するのに役立ちます。

PPS:はい、これはデフォルトの動作よりも効率が悪いかもしれませんが、誰にもそれを実装するように頼んだり、デフォルトの動作に設定したりすることはありません。少なくともGoogleはそれについて知らないので、それがどのような形で存在するのかを尋ねています。 (また、dnsmasqのような場合、タスクを2回実行することはそれほど重要ではありません。)

答え1

私が考えることができる唯一の方法は、次のようなものをインストールすることです。小規模エージェントそして、URLのドメイン名に基づいていくつかのリクエストを直接受け取り、残りはデフォルトのプロキシまたはsquid別のプロキシに転送するように設定します。

これによると、man 5 tinyproxyこれはupstream設定オプションを介して行われます。

* 'upstream host:port "site_spec"' turns on the upstream proxy for the sites matching `site_spec`.

私のローカルネットワークでこれを実行しているので、どれだけうまくいくのかsquidわかりません。tinyproxy

答え2

たとえば、ファイルが基本機能でこの機能を使用している場合は、proxy.pacローカルDNS検索が必要です。例えばdnsDomainIs()FindProxyForURL()

function FindProxyForURL(url, host) {
        if (dnsDomainIs(host, ".local.example.net"))
       { return "DIRECT" };

        if (dnsDomainIs(host, "work.example.net")
           || dnsDomainIs(host, "intranet.example.net)
           )
       { return "PROXY work.proxy.example.net:3128" };

    return "PROXY proxy.local.example.net:3128; DIRECT";
}

これは、ブラウザがローカルURLに直接アクセスし、ジョブ固有のURLに対して動作しているプロキシサーバーにアクセスし(ある種の認証が必要な場合があります)、他のすべての場合はローカルネットワーク上のローカルプロキシサーバーにアクセスするように指示します(または直接アクセス)。到達できません)。

関連情報