情况如下。 我们的内联网192.168.1.0/24上有多个服务器 其中一个是所有这些接口的默认网关,并有两个接口($ GATEWAY_INTERNAL_IP和$ GATEWAY_EXTERNAL_IP)。
我们还有另一台服务器PUBLICHOST2,它有两个IP以及$ PUBLICHOST_EXTERNAL_IP和$ PUBLICHOST_INTERNAL_IP。
我们有第三个服务器SERVER,它只有一个IP $ PRIVIP并在端口$ PORT上绑定。
我们想要的是能够将$ PUBLICHOST_EXTERNAL_IP上的端口$ PORT转发到$ PRIVIP上的主机SERVER。
但是当我们在PUBLICHOST2上使用iptables进行端口转发时,SERVER会收到请求但响应通过网关并且连接不成功。
我们如何正确地进行设置,以便响应可以通过PUBLICHOST2返回?
由于
答案 0 :(得分:1)
答案 1 :(得分:0)
这里发生了什么:
现在,如果你想解决这个问题,你应该将所有流出服务器并且源端口为AppPort的TCP流量路由到PublicHost。
如果这不起作用,则未正确配置PublicHost。请务必使用tcpdump测试配置。
答案 2 :(得分:0)
我一直在尝试做类似的事情。在运行了一系列似乎永远无法工作的教程之后,我发现连接发现目标地址仍然设置为外部IP地址(就像你所描述的那样),我尝试使用POSTROUTING链来改变源IP地址到服务器的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地址,则可能是最好的。)