使用 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:是的,这可能比默认行为效率低,但我既不要求任何人实现它,也不将其设为默认行为。我问它是否以某种形式存在,因为至少谷歌不知道它(加上像 dnsmasq 这样的东西,做两次工作并不那么重要)。

答案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(这可能需要某种形式的身份验证),并访问本地网络上的本地代理服务器以获取其他所有内容(或者直接访问)是无法到达的)。

相关内容