iptables使用2个以太网卡在2个networking之间转发一个端口

我有一个服务器处理几个服务。 为了这个问题的目的,假设其中之一是邮件。 如果邮件发生故障,我想将其转发给另一台主机。 我的networking如下所示:

-- Network 1 -- Box 1 eth1: 192.168.1.5 eth0: 10.10.10.3 -- Network 2 -- Box 2 eth0: 10.10.10.5 

所以…传入的请求到达了eth1上的192.168.1.5地址,而不是停在那里,我想通过eth0将它们转发到方块2,然后让它来处理它。

我已经尝试了以下iptables规则:

 iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.1.5 --dport 25 -j DNAT --to-destination 10.10.10.5:25 iptables -A FORWARD -m state -p tcp -d 10.10.10.5 --dport 25 --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -p tcp -m tcp -s 10.10.10.5 --sport 25 -j SNAT --to-source 192.168.1.5 

…无济于事。 使用tcpdump,我可以看到请求进入第二个盒子,但没有发生请求的计算机上。

请帮忙。 谢谢!

如果您需要帮助,我build议您显示完整的iptables规则集。 从tcpdump的几个数据包也不会伤害。

与此同时:

你有IP转发启用? 请检查:

 sysctl net.ipv4.conf.all.forwarding 

设置:

 sysctl net.ipv4.conf.all.forwarding=1 

通过添加到/etc/sysctl.conf(或您的分配预期它)永久化。

您还需要允许转发到相反的方向,也为-s 10.10.10.5和-o eth1添加一个前向规则(如果您没有,或者全部/默认策略已接受):

 iptables -A FORWARD -s 10.10.10.5 -o eth1 -j ACCEPT 

现在用xinetd结束处理邮件。

 service smtp { disable = no socket_type = stream wait = no user = root redirect = 10.10.10.5 25 log_on_failure += USERID } 

谢谢大家的帮助!

一般的几点意见:

  • 你可能想在接口上匹配以及只是TCP / IP源/目的地/端口
  • 我不确定POSTROUTING / snat规则是否需要,你要完成什么。 DNAT已经在POSTROUTING之前翻译了数据包的源地址。

您在客户端没有看到任何回复的一个可能的原因可能是框2上的路由表.DDNAT不重写源地址,为了使DNAT工作,框2需要路由回到源如果这是“一个任意的ip地址”,则Box 2将需要通过Box 1的默认路由,如果是特定的networking,则通过Box 1返回到这些networking的路由将执行。