Iptables 根据目标地址进行多端口重定向

Iptables 根据目标地址进行多端口重定向

我已为选择性路由设置了 iptables。在当前配置中,它会检查目标地址是否列在特定链中,如果没有,它会将流量重定向到我的代理端口,该端口在端口 1080 上处于活动状态。

下面的设置可以很好地工作:

iptables -t nat -N PROXY
# Do not redirect
iptables -t nat -A PROXY -d external.proxy.address.1 -j RETURN
iptables -t nat -A PROXY -d external.proxy.address.2 -j RETURN
iptables -t nat -A PROXY -d 211.96.0.0/255.240.0.0 -j RETURN
iptables -t nat -A PROXY -d 211.128.0.0/255.128.0.0 -j RETURN
iptables -t nat -A PROXY -d 218.0.0.0/255.128.0.0 -j RETURN
... [and many more address] ...

# Redirect everything else to the proxy listening on port 1080
iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080
iptables -t nat -I PREROUTING -p tcp -j PROXY 

如上所述,这对于代理 1 来说工作正常,但我试图以类似的方式将目标 10.0.0.15 的流量重定向到侦听端口 1088 的另一个代理(代理 2)。

我尝试过多种方法来实现这一点,但都没有成功。

我尝试过的配置:

iptables -t nat -A PROXY -d 10.0.0.15 -j REDIRECT --to-ports 1088 # didn't do anything

实现这一目标的最佳方法是什么(如果可能的话)

答案1

我认为你的问题是误解了什么RETURN的。https://unix.stackexchange.com/questions/191607/iptables-and-return-target#191614可能有帮助。

目前,你的PROXY链的工作方式如下:

  • 流量进入PREROUTING链,其中您有(作为第一条款?) iptables -t nat -I PREROUTING -p tcp -j PROXY
  • PROXY这告诉 iptables 根据链来评估你的流量
  • PROXY链条基本上说明了两件事之一:要么存在RETURN针对流量的操作规则,要么不存在并iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080适用。
  • 如果您的流量与条目匹配RETURN,则 iptables 将返回链PREROUTING并评估下一个规则。似乎没有“下一个规则”可以执行您想要的操作。

问题是这样的:iptables -t nat -A PROXY -d 10.0.0.15 -j REDIRECT --to-ports 1088

您将其放入PROXY链中,但您希望此重定向应用的所有流量实际上都配置为RETURN来自(即脱离)您的PROXY链。

你需要用以下代码来代替上面的代码:

iptables -t nat -A PREROUTING -d 10.0.0.15 -j REDIRECT --to-ports 1088

关键是规则位于其中。使用 PREROUTING 中的此规则,您的RETURN规则将按预期工作,强制匹配流量离开“默认”PROXY规则iptables -t nat -A PROXY -p tcp -j REDIRECT --to-ports 1080,并返回到可以应用的PREROUTING位置。iptables -t nat -A PREROUTING -d 10.0.0.15 -j REDIRECT --to-ports 1088

相关内容