![使用 iptables 重定向 RDP(端口 3389)](https://linux22.com/image/655704/%E4%BD%BF%E7%94%A8%20iptables%20%E9%87%8D%E5%AE%9A%E5%90%91%20RDP%EF%BC%88%E7%AB%AF%E5%8F%A3%203389%EF%BC%89.png)
我有一台 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 之外,不应该有任何实际或性能差异。