透明 squid2.7 代理的 iptables 规则和单个网络接口

透明 squid2.7 代理的 iptables 规则和单个网络接口

我想使用 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)。您应该有第二个具有相关地址的接口,以便路由器可以将其路由到那里。

相关内容