Iptables无法将stream量redirect到透明代理

我的目标是使用Ubuntu作为路由器,Redsocks作为一个透明的SOCKS代理redirect器。 我的networking上的每台计算机都将其TCP / UDP通信redirect到Redsocks正在侦听的不同端口。 示例:计算机1将stream量发送到端口12345,Redsocks将交给外部代理1.计算机2将stream量发送到端口12346,Redsocks将发送到代理2。

我认为iptables可以处理最初redirect到特定的Redsock端口位置。 我发现了一个类似于我的SNAT( iptables用于透明NAT )的情况,但无法使用以下方法:

iptables -t nat -N REDSOCKS iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN iptables -t nat -A POSTROUTING -s 192.168.50.2 -p tcp --dport 80 -j SNAT --to-source 192.168.1.50:12345 iptables -t nat -A POSTROUTING -s 192.168.50.2 -j MASQUERADE 

不知道我在哪里错了。

我的设置:路由器有2个网卡。 Eth0面向广域网。 Eth1面向局域网并具有静态IP。

/ proc / sys / net / ipv4 / ip_forward = 1

的eth0 = 192.168.1.50

ETH1 = 192.168.50.1

所有的路由器客户端都有一个网卡,面向局域网的静态IP。 ETH1 = 192.168.50.2

为什么我要这样做:我可以在单个机器上成功运行Redsocks,并通过它们各自的代理进行传输,但为了方便,我想将所有路由保留在一个地方。

为此,您需要PREROUTING链中的DNAT规则和POSTROUTING链中的SNAT规则。

再看看你之前链接的serverfault答案 :

 iptables -t nat -I PREROUTING -d 192.168.250.3 -j DNAT --to-destination 192.168.250.4 iptables -t nat -I POSTROUTING -s 192.168.250.4 -j SNAT --to-source 192.168.250.3 

此外,您不希望将该端口设置为SNAT规则的--to-source

你会想了解DNAT和SNAT之间的区别, 你可以在这里做 。

TLDP上的这个文件可以帮助解决这个特定的情况。