2011-07-06 89 views
0

这里是情况。 我们在我们的Intranet上有多个服务器192.168.1.0/24 其中一个是所有这些服务器的默认网关,并且有两个接口($ GATEWAY_INTERNAL_IP和$ GATEWAY_EXTERNAL_IP)。iptables:从网关以外的其他服务器转发端口

我们还有另一台服务器PUBLICHOST2,它有两个IP以及$ PUBLICHOST_EXTERNAL_IP和$ PUBLICHOST_INTERNAL_IP。

我们有第三个服务器SERVER,它只有一个IP $ PRIVIP并绑定到端口$ PORT上。

我们想要的是能够将$ PUBLICHOST_EXTERNAL_IP上的端口$ PORT转发到$ PRIVIP上的主机SERVER。

但是,当我们在PUBLICHOST2上使用iptables进行端口转发时,SERVER会收到请求,但响应会通过网关并且连接不成功。

我们应该如何正确进行设置,以便响应可以通过PUBLICHOST2返回?

谢谢

回答

1

您可能需要设置接口的转发。尝试命令。

sysctl -w net.ipv4.conf.eth0.forwarding=1 

如果您需要其他帮助,请查找有关routeback或Shorewall FAQ的文档。

+0

我们已经在做 echo“1”>/proc/sys/net/ipv4/ip_forward – ruddy

+0

您可能想要安装Shorewall并让它处理NAT配置。在你这样做之前先阅读它的文档。它会这样做,但我不认为他们会推荐它。我认为应该这样做的系统是网关系统。您的外部IP与您的内部IP位于同一个块中吗? – BillThor

0

那么这里发生了什么:

  • 客户端1发送到PublicHost
  • 到达的请求和iptables规则的请求流量(PAT)重定向到正确的AppPort服务器
  • 服务器发回对Client1的回复将由网关路由
  • 网关正在执行NAT并用它自己的IP替换源IP
  • Client1或Client1sGateway通过Gatew接收IP数据包ay作为源,但它期望PublicHost的IP位于IP数据包的源字段中。
  • 最终,Client1向公共主机重新发送SYN/ACK(除非您使用synproxy),然后在任何与网络相关的定时器到期时丢弃连接。

现在,如果你想解决这个问题,你应该将所有的TCP流量路由到服务器以及源端口的AppPort到PublicHost。

如果这不起作用,PublicHost配置不正确。确保使用tcpdump测试配置。

+0

我无法将所有流量从SERVER:AppPort发送到PublicHost。因为我们希望内部网络中的任何客户端都能够直接与SERVER交互。 – ruddy

+0

然后调整此规则,您可以使此规则不适用于您的内部网络。一个更好的解决方案是为内部网络制定一种“通过”规则,这将停止规则评估,因此iptables规则不适用于内部网络。 – Aki

0

我一直在尝试做类似的事情。在我通过Wireshark连接发现目标地址仍然被设置为外部IP地址之前(看上去已经描述过了),我尝试使用POSTROUTING链更改源IP地址,服务器的:

iptables -t nat -A POSTROUTING -p <tcp/udp> --dport <destination_port> -j SNAT --to <$PUBLICHOST_INTERNAL_IP> 

后,我补充说,规则,连接被转发到专用网络和响应数据包追溯了相同的路径返回给客户端,而不是通过网络网关。我还不能肯定是什么允许的响应数据包重新从防火墙的服务器,但我想这是因为规则的我已经对INPUT链,使已建立的连接:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

的事情,以确保要记住这个解决方案是:如果你曾经更改防火墙服务器的内部IP地址,那么你需要更新上面的POSTROUTING规则。 (不用说,如果防火墙服务器有一个静态分配的内部IP地址可能是最好的)。

相关问题