我们将提供一个应用程序,允许我们的客户下载我工作的城堡的某种音频指南。
我真的不希望每个在我们的城堡中下载应用程序(通过我们提供的免费 WiFi)的用户都从我们城堡外部(在我们的网络之外)的应用程序服务器下载整个音频文件。
所以我的研究结果表明,我需要构建一个代理来缓存经常使用的文件(在我的例子中是 MP3 数据),这样我就可以为“动态”数据保留免费的 WiFi 带宽。
我需要这样做
- 控制/限制通过我的网络的负载,这样我就不会影响我的办公室网络。
- 保持免费 WiFi 顺利运行。我们有很多顾客,并提供免费 WiFi。我们的内部网络使用 10GBit,我们的互联网带宽约为 1Gbit。
因此,我正在寻找使用代理来分发 MP3 文件,而不必一次又一次地从互联网下载它们。
问题:
- Squid 是我正在寻找的工具还是有更好的工具?
- 如何强制所有免费 WiFi 用户自动使用代理。
- [可选]您对此用例的体验。
答案1
可以使用 Squid 来实现此目的,但是您应该注意一些问题:
Squid 尚不支持缓存部分内容,因此如果您的应用程序使用范围请求而不是下载整个文件,则会遇到一些问题。您可以将 Squid 配置为根据范围请求获取缓存中的整个文件,但在这种情况下,它会阻塞,直到下载整个文件 - 如果缓存的音频文件已过时并且需要下载新的副本,您的应用程序的用户必须等待服务器下载整个文件,然后应用程序才能播放它。
您的应用程序应该使用 HTTP 来获取文件,否则,如果您的代理尝试拦截 HTTPS 连接,您将出现证书错误,除非您为代理创建证书并让您的应用程序信任它,但除您的应用程序之外的其他所有内容也会抛出 HTTPS 证书错误并且您无能为力,通常拦截 HTTPS 是不好的做法,除非您向用户明确说明并让他们安装证书。
要强制客户端的流量通过 Squid 而无需进行任何配置,您需要将 Squid 配置为透明代理,然后在用户用来访问 Internet 的网关上使用一些防火墙魔法,以将所有 HTTP 流量重定向到您的 Squid 服务器:
http_port 3128 intercept # enable transparent proxy mode
至于网关配置,它取决于那里的防火墙,对于 IPtables 来说,假设您的 Squid 服务器与您的用户位于同一网关后面,这样的东西应该可以工作:
iptables -t nat -A PREROUTING -s <squid_server_IP> -p tcp --dport 80 -j ACCEPT # accept HTTP traffic from the Squid
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination <squid_server_IP>:3128 # redirect your user's HTTP traffic to Squid
iptables -t nat -A POSTROUTING -j MASQUERADE # probably not needed since your gateway already has this
你应该看看鱿鱼的文档,他们有一些为此配置企业防火墙的示例。