我们在 NAT 中有一个机房(使用 dnsmasq 和 arno iptables 防火墙)。而且这个机房位于大学代理内部,因此所有互联网浏览都必须经过身份验证。拓扑结构类似于(抱歉我的 ascii 艺术为空)
客户端 -> 服务器 eth1(内部) -> 服务器 eth0(外部) -> 具有身份验证的大学代理 -> 互联网
通常我们指导学生只在他们的浏览器上配置代理,仅此而已。但最近我们开始在命令行上使用也需要身份验证的客户端。例如,git 推拉、rstudio 下载软件包、emacs 等。我们在这个用例中指导学生简单地导出变量 https_proxy 和相关变量,这有时有效,但并不总是有效,他们总是忘记命令行,或者不要将其保存在 .bashrc 中以供以后使用等。特别是,emacs 并不严格遵循这些变量,我们无法在没有在 emacs 中再次进行身份验证的情况下轻松安装软件包等。
所以昨天我在本地客户端中玩游戏,发现通过使用带有鱿鱼的本地代理,该代理使用将流量转发到实际大学代理(并进行身份验证)的cache_peer,emacs 工作没有问题(我只需要在 emacs 中设置代理,无需授权)。所以我尝试为所有学生复制这个,在服务器上安装squid并尝试使其成为透明代理,但它不起作用。我不断收到 ssl 错误,例如 bad hello msg 等。
所以,我的问题是:是否可以设置一个透明代理将所有连接转发到实际代理(并使用单个帐户进行身份验证,没关系)以帮助客户端使用控制台上的连接,而无需配置实际代理?我不想mitm ssl流量,只是为了让学生更容易进行命令行浏览。
在服务器中,我有squid3、激活了透明代理插件的arno iptables防火墙,以及将网关客户端配置为服务器的dnsmasq。我对 iptables 不太了解,但我尝试学习。我在互联网上尝试了很多例子,但从未成功。也许是不可能的,因为拦截与身份验证或类似的东西冲突......
我当前的鱿鱼配置如下(基于https://stackoverflow.com/questions/10787087/use-elpa-emacs-behind-a-proxy-requiring-authentication):
# Allow all for now
acl all src all
http_access allow all
icp_access allow all
never_direct allow all
# logs
access_log /var/log/squid/access.log squid
# turn off proxy-headers (no idea what is it :))
via off
forwarded_for off
# describe external proxy server
cache_peer <proxy_ip> parent <proxy_port> 0 no-query default proxy-only login=<my_login>:<my_password>
http_port 10000 transparent
acl port10000 myport 10000
cache_peer_access <proxy_ip> allow port10000
acl CONNECT method CONNECT
提前致谢