我只想知道是否有现存的实现此目的的方法是:在代理例外列表中添加 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(这可能需要某种形式的身份验证),并访问本地网络上的本地代理服务器以获取其他所有内容(或者直接访问)是无法到达的)。