【问题标题】:Iptables : forward port from another server than the gatewayiptables :从网关以外的另一台服务器转发端口
【发布时间】:2011-07-06 02:02:52
【问题描述】:

情况是这样的。 我们的内网 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 返回?

谢谢

【问题讨论】:

    标签: iptables gateway portforwarding


    【解决方案1】:

    您可能需要为接口设置转发。试试 tne 命令。

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

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

    【讨论】:

    • 我们已经在做 echo "1" > /proc/sys/net/ipv4/ip_forward
    • 您可能想要安装 Shorewall 并让它处理 NAT 配置。在你这样做之前先阅读它的文档。它会这样做,但我认为他们不推荐它。我认为应该这样做的系统是网关系统。您的外部 IP 是否与您的内部 IP 在同一块中?
    【解决方案2】:

    这里会发生什么:

    • Client1 向 PublicHost 发送请求
    • 请求到达,iptables 规则将流量 (PAT) 重定向到正确 AppPort 上的服务器
    • 服务器向 Client1 发送回复,该回复将由网关路由
    • 网关正在执行 NAT 并用自己的 IP 替换源 IP
    • Client1 或 Client1sGateway 接收到以 Gateway 作为源的 IP 数据包,但它在 IP 数据包的源字段中期望 PublicHost 的 IP。
    • 最终 Client1 将 SYN/ACK(除非您使用 synproxy)重新发送到 PublicHost,然后在任何与网络相关的计时器到期时断开连接。

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

    如果这不起作用,则 PublicHost 配置不正确。请务必使用 tcpdump 测试配置。

    【讨论】:

    • 我无法将所有流量从 SERVER:AppPort 发送到 PublicHost。因为我们希望内部网络中的任何客户端也能够直接与 SERVER 交互。
    • 然后调整这条规则,你可以让这条规则不适用于你的内部网络。更好的解决方案是为内部网络设置一种“通过”规则,该规则将停止规则评估,因此 iptables 规则不适用于内部网络。
    【解决方案3】:

    我一直在尝试做类似的事情。在运行了一堆似乎从来没有工作过的教程之后,直到我 Wireshark 连接发现目标地址仍然设置为外部 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 地址)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多