使用iptablesredirectRDP(端口3389)

我有一台IP 10.10.10.5的Debian服务器和一台IP 10.10.10.7的Windows电脑。 我的计划是使Debian服务器使用这些iptables规则将所有RDPstream量转发给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计算机时,它将build立RDP连接,但不能通过服务器工作。 10.10.10.5的Nmap为3389返回“filtered”,但是10.10.10.7的nmap返回“open”。 可能是什么问题呢?

由于似乎所有的机器都在同一个子网上,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 

除了SNAT之外,MASQUERADE也应该这样做,并且会使它更容易一些。 MASQUERADE是SNAT,不是指定一个IP地址,而是指定一个接口; 这意味着如果您添加更多端口转发,则不需要添加POSTROUTING规则。

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

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