IPtables:DNAT不能正常工作

在我有一个CentOS服务器,我想转发端口8080到第三方networking服务器。
所以我添加了这个规则:

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination thirdparty_server_ip:80 

但似乎没有工作。
为了debugging过程,我添加了这两个LOG规则:

 iptables -t mangle -A PREROUTING -p tcp --src my_laptop_ip --dport ! 22 -j LOG --log-level warning --log-prefix "[_REQUEST_COMING_FROM_CLIENT_] " iptables -t nat -A POSTROUTING -p tcp --dst thirdparty_server_ip -j LOG --log-level warning --log-prefix "[_REQUEST_BEING_FORWARDED_] " 

--dport ! 22部分只是为了过滤掉SSHstream量,这样我的日志文件就不会被淹没)

根据这个页面mangle/PREROUTING链是第一个处理传入的数据包, nat/POSTROUTING链是处理传出数据包的最后一个。

而且由于nat/PREROUTING链在另外两个中间,三条规则应该这样做:

  1. mangle/PREROUTING的规则会logging包含的信息
  2. nat/PREROUTING的规则会修改数据包(它会更改目标IP和端口)
  3. nat/POSTROUTING的规则会logging将要转发的修改的数据包

虽然第一个规则是logging从我的笔记本电脑传来的数据包,但是第三条规则并不logging第二条规则应该修改的数据包。 它logging,但是,在服务器中产生的数据包,因此我知道两个LOG规则正常工作。

为什么数据包没有被转发,或者至less为什么没有被第三条规则logging?

PS:没有比这三个更多的规则。 所有表中的所有其他链都是空的,并且有策略ACCEPT。

您可能需要打开服务器上的IP转发。 尝试

echo 1> / proc / sys / net / ipv4 / ip_forward

这一切都高度依赖于客户端是否正在使用DNAT,使用NAT-box作为网关(实际上回复会使用NAT-BOX)。

我想他们不是那么那么下面描述错误: {

在做DNAT时,您使用属于NAT-Box 的Relay-IP (来自客户端PoV) 屏蔽Effective-IP 。 所以,客户期望与Relay-IP通信,而不是Effective-IP。 相反,客户突然收到了他从未听说过的Effective-IP的回复。

所以,当做这样一个屏蔽W / O作为客户端和有效服务之间的中间网关时,您也需要使用SNAT(隐藏NAT-box-external-IP的客户端),所以所有来自Effective-IP服务的回复回到你的NAT网关,然后只有去NAT,并发回给发起这个的客户端。

}