使用 IPTables 绕过透明 Squid

使用 IPTables 绕过透明 Squid

以前也问过类似的问题,但得到的答案并不令人满意或不适用于我的情况。

我有一个透明的 squid 代理,可以过滤我网络中的所有 http 和 https 流量(仅限某些机器)。我使用以下 iptables 规则实现了这一点:

  iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
    iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127

然而,我想绕过某些域的 squid:当客户端向 mydomain.com 发出请求时,它应该直接转到网络的网关。

我尝试在上面提到的其他规则之前插入以下规则。

iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN

但是这个设置不起作用。我遗漏了什么?有没有更好的方法?

编辑

规则的顺序如下:

        iptables -t nat -A PREROUTING -i eth0 -d $IP_OF_MYDOMAIN.COM -j DNAT --to-destination $IP_OF_ROUTER
        iptables -t nat -A PREROUTING -i eth0 -s $IP_OF_ROUTER -j RETURN
        iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.100 -m tcp --dport 443 -j REDIRECT --to-ports 3127
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.101 -m tcp --dport 443 -j REDIRECT --to-ports 3127
        iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.1.102 -m tcp --dport 443 -j REDIRECT --to-ports 3127

答案1

如果我理解正确的话,您希望免除对特定 IP 地址的流量进行强制重定向。如果是这样,那么您的做法就错了。

将上面配置中的前两行替换iptables

iptables -t nat -A PREROUTING -d a.b.c.d -j ACCEPT

免于强制重定向的 IP 地址在哪里a.b.c.d。请注意,与当前的规则对一样,此规则需要强制重定向代码。

相关内容