在树莓派上,我安装了privoxy和socks代理软件。
我想将所有流量重定向到链 REDSOCKS_FILTER。所有80端口的tcp协议的流量都会经过privoxy,然后到达REDSOCKS_FILTER链。在REDSOCKS_FILTER链中,我将丢弃一些本地IP地址,最后处理后的流量进入socks代理软件。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8118
iptables -t nat -A OUTPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
iptables -t nat -A PREROUTING -p tcp -j REDSOCKS_FILTER
我尝试写这个ase,但是经过privoxy的端口80的流量无法到达REDSOCKS_FILTER链。但如果我输入
iptables -t nat -A OUTPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
从我的测试看来,它不起作用,但结果仍然相同。我对自己犯了什么错误感到困惑。
答案1
我假设REDSOCKS_FILTER
是在filter
表中iptables
,而不是在nat
表中?您无法从一个表跳转到另一个表,因为不同的表在 TCP/IP 驱动程序堆栈中的不同位置进行处理。
由于您在 NAT 表中的 PREROUTING 和 OUTPUT 链中进行重定向,因此当数据包由相应的 INPUT 和 OUTPUTfilter
表处理时,这些更改已经应用。所以你需要这样的事情:
iptables -t filter -A INPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
iptables -t filter -A OUTPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
由于filter
是默认表,您可以省略该-t filter
选项。
各种 Netfilter 表之间的数据包流图可能会有所帮助:
https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
由于您没有进行桥接,因此您所做的一切都iptables
发生在该图像中的绿色“网络层”内。