每个用户的 tproxy

每个用户的 tproxy

我正在向我的盒子添加一些家长控制(http 过滤)。

该盒子由整个家庭使用(每个成员一个帐户),并且鱿鱼在同一台机器上运行。

我有两个 Squid 实例,一个(用于成人)仅用于缓存,一个(用于儿童)使用 squidGuard。

为了在两个鱿鱼实例之间进行选择,我使用--uid-ownerNAT 规则。

iptables -t nat -A OUTPUT -m owner --uid-owner $owner -p tcp -m tcp --dport 80 -j REDIRECT --to-ports $port

(ip6tables 同上)

目前我对 IPv4 和 IPv6 使用 NAT(使用相当新的 Linux 内核),但 Squid 说“拦截”仅支持 IPv4。我也想要 IPv6。

我尝试使用 TPROXY (例如使用这些规则)但我失败了,因为我需要--uid-owner哪个 iptables 想要在 POSTROUTING(而不是 PREROUTING)上设置。

这些规则是:

iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

如何--uid-owner在该 mangle 表中添加适当的规则?我的意思是,我如何决定转发到端口 3128 或 3129?

编辑:请不要回答说我的 NAT 规则运行良好。我知道。我需要摆脱 NAT,因为 Squid 的 NAT 仅支持 IPv4。所以再次强调,不要使用 NAT。只有 TPROXY 或 mangle 或任何你称之为符合mangle上述规则的东西。

答案1

您不需要--uid-ownerin PREROUTING,您需要它 in OUTPUT(就像在您的示例中一样)。

相关内容