如何使用iptables通过代理启用透明的HTTP / Sredirect?

我目前的设置包含以下内容:

  • 使用OpenWRT的路由器有两个接口: eth0是对网关的访问, eth1pipe理本地networking(192.128.2.0/24)
  • 一个盒子(不能用于网桥模式),设置为允许路由器在其DMZ(192.168.1.0/24)
  • 在路由器上启动并运行一个privoxy服务器,监听端口4000(接口eth1

当我在eth1上设置客户端使用192.168.2.1:4000作为HTTP和HTTPS代理时,一切顺利。 不过,我使用iptables来自动执行这个redirect过程的尝试都失败了。 这是我做的最后一次尝试:

 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 

我的理解如下:

  1. 第一条规则标记来自本地客户端的HTTP / S(dport = 80或443)数据包,并将它们redirect到代理服务器
  2. 第二个和第三个规则允许两个本地networking之间的本地stream量
  3. 最后一条规则用1/1标记剩余的传入stream量

然后,我使用ip来定义一个路由策略路由,基于我使用iptables设置的标记:

 ip rule add fwmark 1/1 table 1 ip route add local 0.0.0.0/0 dev lo table 1 

当然,它不工作,我甚至不知道为什么…也许我的代理服务器不支持TPROXYfunction,我应该去只有MARK规则…但即使如此,我有点失落这里。

首先,看看这里: 截取caching的概念,对使用透明代理的优点,缺点或可能的问题有一些想法。

其次,HTTPS或SSL通信将不能使用正常的透明代理。 您需要有一个称为ssl-bump的特殊configuration,在隐私方面有其自身的问题需要考虑。

第三,

  • 如果你的鱿鱼安装正确的透明/截取模式(运行在端口3128)和
  • 假设eth0为外部,eth1为内部(lan,192.168.1.0/24)接口,下面是用于redirecthttpstream量的两个示例iptables规则:

    iptables -t nat -A PREROUTING -i eth1 -p tcp -dport 80 -j DNAT – 到192.168.1.1:3128

    iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT – 到端口3128

这是不使用Tproxy。