我还有另一个问题在 askUbuntu 网站上,并将此版本从 Server Fault问题,因为我认为超级用户是提出该问题的最佳位置。
背景:
我有一个本地(Drupal)开发环境,由一个在虚拟化 Xubuntu 12.04 操作系统上运行的 LAMP 服务器和 Ubuntu 12.04 主机操作系统组成。桥接网络未启用。
我想开始尝试 Drupal 的 Web 2.0 集成方面(即 Youtube 和 Facebook 集成),但这些网站都被大规模过滤机制阻止,该机制至少包括 IP 阻止、DNS 过滤、URL 过滤和数据包过滤——并使用连接重置数据包来强制执行这些规则。似乎一些 ISP 还使用深度数据包过滤来发现 ssh 隧道,然后限制带宽——幸运的是,我公寓里的 ISP 目前似乎没有这样做。只要外国人不使用这些来违法(即与中国公民分享受限制的材料),他们就不会被禁止使用代理/vpn/等。
对于正常的网页浏览和其他需要访问被屏蔽内容的任务,我使用 ssh 隧道作为 socks5 代理连接到另一个国家的服务器(Ubuntu Server 10.04,仅启用了 ssh 和 openvpn)。Chromium 和 Firefox 都能够通过 socks5 代理本地发送 DNS 请求(前者默认,后者通过更改配置设置)。此解决方案非常适合所有浏览器端到受限站点的连接。
然而,许多 Web 2.0 集成 Drupal 模块也要求服务器本身请求受限制的外部站点。
我的问题是:
通过我的 ssh 隧道和过滤机制进行路由的最佳方法是什么:
- 来自我的 Apache2 服务器的所有外部请求和 DNS 查找,
或者
- 仅从我的 Apache2 服务器到指定主机的请求(和 DNS 查找)?
考虑/尝试的解决方案
- 最简单的解决方案是在过滤机制之外的机器上使用 LAMP 服务器(我通过 ssh 连接的那台机器)。但是,出于多种原因,我宁愿不这样做(如果出现问题,无法物理访问这台机器,硬件较旧,如果我失去与这台服务器的连接,我将无法继续开发,等等)。
使用全局代理设置 - 根据我的研究,Xubuntu 没有全局 socks5 设置功能。另外,我不知道这是否会捕获我的 DNS 查找。
使用
tsocks
:这似乎是最佳候选人,但我有两个问题/疑问:启动/重新启动 Apache2 的脚本在哪里,以便我可以在这些命令前面加上
tsocks
?如何通过 socks5 代理捕获并重定向 DNS 查找?
编辑
/etc/hosts/
文件提供了有限的解决方法,但像 youtube.com 这样的网站会从许多外部网站(以及 URL)加载媒体和其他内容,因此几乎不可能跟踪所有这些(可能重置连接的)第三方 URL。使用socat
socks5 代理捕获、转换和发送 UDP 流量(如所述这里)似乎是一个很好的解决方案,但我无法按照链接教程中所述实现它。(如果socat
确认使用是解决我的问题的正确方法,我可以发布我正在使用的命令以供审查)
答案1
Apache 并不真正建立出站连接;PHP 才是。因此,PHP 需要与 SOCKS 代理进行通信。
相关的:https://stackoverflow.com/questions/10490962/establishing-socket-connection-in-php-using-socks-proxy
如果您有 HTTP 代理,那么会更容易,而使用 VPN 则最容易。也许您应该再试一次设置 OpenVPN?
或者,您可以在服务器上设置 Privoxy 来与您的 SOCKS 代理通信,然后配置 PHP 以使用 Privoxy 作为 HTTP 代理。