我正在向我的盒子添加一些家长控制(http 过滤)。
该盒子由整个家庭使用(每个成员一个帐户),并且鱿鱼在同一台机器上运行。
我有两个 Squid 实例,一个(用于成人)仅用于缓存,一个(用于儿童)使用 squidGuard。
为了在两个鱿鱼实例之间进行选择,我使用--uid-owner
NAT 规则。
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-owner
in PREROUTING
,您需要它 in OUTPUT
(就像在您的示例中一样)。