我的目标是使用 ubuntu 作为路由器,使用 Redsocks 作为透明的 SOCKS 代理重定向器。我网络上的每台机器的 TCP/UDP 流量都会重定向到 Redsocks 正在监听的不同端口。例如:机器 1 的流量会发送到端口 12345,Redsocks 会将其交给外部代理 1。机器 2 的流量会发送到端口 12346,Redsocks 会将其发送给代理 2。
我认为 iptables 可以处理到特定 Redsocks 端口位置的初始重定向。我发现了一个与我的情况类似的情况,其中使用了 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 个 NIC。Eth0 面向 WAN。Eth1 面向 LAN 并具有静态 IP。
/proc/sys/net/ipv4/ip_forward = 1
eth0=192.168.1.50
eth1=192.168.50.1
所有路由器客户端都有一个 NIC,面向 LAN 的静态 IP。eth1=192.168.50.2
我为什么要这样做:我可以在各个机器上成功运行 Redsocks 并通过它们各自的代理进行传输,但为了方便起见,我想将所有路由集中在一个地方。
答案1
为了使其正常工作,您需要在 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
此外,您不想--to-source
为 SNAT 规则设置端口。
你可能想了解 DNAT 和 SNAT 之间的区别,您可以在这里进行。
本文档关于 TLDP或许能够帮助解决这一特定情况。