我想使用 Squid 2.7 作为运行 Debian Linux 的 Raspberry Pi 上的 HTTP 流量的透明缓存代理。Raspberry Pi 将使用单个网络接口连接到我的 wifi 路由器 (MBR1400)。
我已经设置了 Squid,只要我手动指定代理配置,它就可以在其他计算机上很好地运行,例如:
curl --proxy 192.168.0.250:3128 http://google.com
如果我指示 Chrome、Firefox 或 OS X 使用正确的代理 IP 192.168.0.250,这也能正常工作。
当我尝试使其“透明”时,麻烦就来了。
我尝试通过配置向路由器添加静态路由使其透明,以便所有流量都将通过 Squid 盒。然后iptables
在 Squid 盒上使用将端口 80 流量重定向到端口 3128。
详细步骤
1)向我的路由器添加静态路由
IPv4 (v6 has been disabled)
IP Address: 192.168.0.1
Netmask: 255.255.255.128
Gateway: 192.168.0.250
METRIC: 1
这显示了路由表
IP GW Metric
192.168.0.0 192.168.0.250 1 # mine
192.168.0.0 0 # system default
# plus some other routes that I don't think are important
2)在 squid 框上添加 iptables 规则
# clear existing iptables rules
iptables -F
iptables -X
iptables --table nat -F
iptables --table nat -X
iptables --table mangle -F
iptables --table mangle -X
# the rest of these rules were adapted from a blog post and I don't fully understand how they work
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 192.168.0.0/24 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192.168.0.250:3128
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.0.0/24 -d 192.168.0.250 -p tcp -j SNAT --to 192.168.0.1
iptables -I FORWARD -i eth0 -o eth0 -s 192.168.0.0/24 -d 192.168.0.250 -p tcp --dport 3128 -j ACCEPT
我走的路对吗?静态路由看起来正确吗?我的iptables
规则有什么问题?
答案1
路由器知道如何到达代理吗?因为代理不在路由器网络 192.168.0.0/25 中(网络掩码:255.255.255.128 => 192.168.0.1 - 192.168.0.127)。您应该有第二个具有相关地址的接口,以便路由器可以将其路由到那里。