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

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

我有一台服务器处理多项服务。为了回答这个问题,假设其中一项服务是邮件。如果邮件中断,我想将其转发到另一台主机。我的网络如下所示:

-- Network 1 --

Box 1
eth1: 192.168.1.5
eth0: 10.10.10.3

-- Network 2 --

Box 2
eth0: 10.10.10.5

所以...传入的请求到达盒子 1 上 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,我可以看到请求从第二个框进入,但请求计算机上没有任何反应。

请帮忙。谢谢!

答案1

如果您需要帮助,我建议您显示完整的 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 添加转发规则(如果您没有这个,或者没有 catch-all/默认策略 ACCEPT):

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

答案2

最终使用 xinetd 来处理邮件。

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

谢谢大家的帮助!

答案3

总体来说,有几点评论:

  • 您可能希望匹配接口以及 tcp/ip 源/目标/端口
  • 对于您要完成的任务,我不太确定 POSTROUTING/snat 规则是否必要。DNAT 在 POSTROUTING 之前已经转换了数据包的源地址。

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

相关内容