我已经设置了一个基于PuTTY的SOCKS5代理,如下所示:
我已将 IE11 配置为使用此代理,如下所示:
我还配置了 Firefox 52.7.3(32 位)以完全相同的方式使用此代理:
proxyConfig.pac内容如下:
function FindProxyForURL(url, host)
{
if ((url.indexOf(".mydomain.local") >= 1) ) {
return "SOCKS5 127.0.0.1:1080";
}
return "DIRECT";
}
我可以使用 IE 或 Firefox 访问互联网网站。
我可以访问不是在 mydomain.local 下使用 IE 或 Firefox。
我可以访问是使用 Firefox 在 mydomain.local 下。
但问题是:我不能使用 IE 访问 mydomain.local 下的内联网网站。使用主机.我的域名.本地例如,我收到此错误:
主机.我的域名.本地做不是通过本地 hosts 文件或 DNS 解析到代理近端的 IP 地址。然而,它做通过 DNS 解析代理远端的 IP 地址。
数据包捕获显示,IE11 尝试直接解析 host.mydomain.local(即在代理的近端),而不是让代理服务器执行此操作。Firefox 可以正常工作,因为它不会尝试在本地解析主机名。它让代理服务器执行此操作。
如果我编辑本地 hosts 文件,例如主机.我的域名.本地将在代理的近端解析为在代理的远端解析的内容,但我仍然会失败。尽管失败需要更长的时间。我认为这是因为现在发生连接失败是因为在某个超时后未收到响应(可能有几个原因),而不是因为名称解析失败(发生得非常快)。
有什么方法可以强制 IE11不是尝试解析主机名并只允许代理服务器执行此操作?
如果没有的话,还有其他方法可以解决这个问题吗?
更新 1
我忘记了之前遇到过这个问题,并且了解到 IE11 没有实现 SOCKS5 服务器端名称解析。考虑到这一点...
为什么我输入 IP 地址时 IE 连接失败主机.我的域名.本地在我的本地主机文件中?
所讨论的 IP 地址在本地没有路由到任何地方。但是,IE 是否应该将对此 IP 地址的 HTTP 请求传递到代理(所讨论的 IP 地址确实会路由到某个地方)?
更新2
数据包捕获显示 IE 甚至从未发出 HTTP 请求。初始 TCP SYN 直接发送到目标 IP 地址(如我所说,它在本地无处路由);它不会尝试通过代理发送此 TCP 连接请求。
更新 3
我尝试以不同的方式配置浏览器以使用代理:
所以现在一切都通过代理,而不仅仅是请求我的域名.local。
完成此操作后,我现在可以联系主机我的域名.local,但防火墙限制阻止我访问不在我的域名.local或互联网网站。
当然,这些防火墙限制并不是 IE 的错。
但它确实显示了尝试使用带有 SOCKS5 代理的 IE 时可能遇到的麻烦。
如果真的想使用 IE,似乎没有好的解决办法。
答案1
看来最好的办法是使用 SSH 本地端口转发,而不是使用 SOCKS5 代理。
这是我的本地主机文件:
127.24.0.1 host1.mydomain.local
127.24.0.2 host2.mydomain.local
127.24.0.3 host3.mydomain.local
以下是我设置本地端口转发的方法:
请注意,由于需要重新使用端口 80(我想要访问的每个主机都在端口 80 上提供 HTTP 服务),因此每个目标主机都需要使用不同的本地主机 IP 地址。Windows 支持这一点。
我记得 Linux 不支持使用多个本地主机 IP 地址。如果我没记错的话,Linux 会将任何本地主机地址(即 127.0.0.0/8 中的任何地址)更改为 127.0.0.1。因此,一旦 SSH 客户端尝试创建第二个端口转发侦听器,就会遇到错误,因为尝试将端口 80 重新绑定到相同的 IP 地址(即 127.0.0.1)。