使用 iptables 重定向 RDP(端口 3389)

使用 iptables 重定向 RDP(端口 3389)

我有一台 IP 为 10.10.10.5 的 Debian 服务器和一台 IP 为 10.10.10.7 的 Windows 计算机。我的计划是使用以下 iptables 规则让 Debian 服务器将所有 RDP 流量转发到 Windows 计算机:

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.10.10.7:3389
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

但不知为何它不起作用。我已将 IPv4 转发设置为“1”。

当我从 LAN 直接连接到 Windows 计算机时,它会建立 RDP 连接,但无法通过服务器工作。10.10.10.5 的 nmap 返回 3389 的“已过滤”,但 10.10.10.7 的 nmap 返回“打开”。可能是什么问题?

答案1

由于所有机器似乎都在同一个子网上,因此 Windows 计算机将尝试直接应答客户端,而无需通过 NAT 盒(第 2 层)。

您还应该对回复数据包进行 SNAT,添加:

iptables -t nat -A POSTROUTING -s 10.10.10.7 -p tcp --sport 3389 -j SNAT --to 10.10.10.5

答案2

除了 SNAT 之外,MASQUERADE 也应该可以做到,而且会使事情变得简单一些。MASQUERADE 就是 SNAT,只不过您不是指定 IP 地址,而是指定接口;这意味着,如果您添加更多端口转发,则无需添加 POSTROUTING 规则。

iptables -t nat -A POSTROUTING -o $out_interface -j MASQUERADE

理论上,除了内核需要跟踪 SNAT 而不需要跟踪 MASQUERADE 之外,不应该有任何实际或性能差异。

相关内容