我当前的设置包括以下元素:
- 带有 OpenWRT 的路由器,具有两个接口:
eth0
用于访问网关并eth1
管理本地网络(192.128.2.0/24) - 一个盒子(不能在桥接模式下使用),设置为允许路由器进入其 DMZ(192.168.1.0/24)
- 路由器上启动并运行一个 privoxy 服务器,监听端口 4000(接口
eth1
)
当我设置客户端eth1
使用 192.168.2.1:4000 作为 HTTP 和 HTTPS 代理时,一切顺利。但是,我使用 iptables 自动执行此重定向过程的尝试到目前为止都失败了。这是我最后一次尝试:
iptables -t mangle -A PREROUTING -i eth1 -p tcp -m multiport --dport 80,443 -j TPROXY --on-ip 0.0.0.0 --on-port 4000 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -m multiport --sport 80,443 -j MARK --set-mark 1/1
我的理解如下:
- 第一条规则标记来自本地客户端的 HTTP/S(dport=80 或 443)数据包并将其重定向到代理服务器
- 第二和第三条规则允许两个本地网络之间的本地流量
- 最后一条规则将剩余的传入流量标记为 1/1
然后,我ip
根据我设置的标记来定义一条用于策略路由的路线iptables
:
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1
当然,它不起作用,我甚至不知道为什么...也许我的代理服务器不支持该TPROXY
功能,我应该只使用MARK
规则......但即便如此,我还是有点迷茫。
答案1
首先,请看这里:拦截缓存的概念了解使用透明代理的优点、缺点或可能出现的问题。
其次,HTTPS 或 SSL 流量无法与普通透明代理配合使用。您需要进行一项名为SSL 碰撞,其在隐私方面也有自己的问题需要考虑。
第三,
- 如果你已经正确设置了 Squid 的透明/拦截模式(运行在 3128 端口),并且
假设 eth0 为外部接口,eth1 为内部(lan,192.168.1.0/24)接口,以下是两个用于重定向 http 流量的示例 iptables 规则:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
这是不使用 Tproxy 的情况。