Linux NAT 背后的 Win RDP

Linux NAT 背后的 Win RDP

在我们的设置中,我们有一台带有 2 个 NIC 的 Linux 服务器,一个连接到我们的 LAN/互联网,另一个连接到也提供 RDP 服务的 Windows 机器。我们当然希望通过 RDP 连接并登陆到 Windows 机器上。

我在 2 之间设置了固定 IP -> ping 工作。此外,我还有以下 iptables 设置:

iptables -t nat -A PREROUTING -p tcp -d <external IP of linux machine> --dport 3389 -j DNAT --to-destination <IP of win machine>
iptables -t nat -A POSTROUTING -p tcp -s <IP of win machine> --dport 3389 -j SNAT --to-source <external IP of linux machine>

我也尝试过

iptables -t nat -A POSTROUTING -p tcp -s <IP of win machine> --sport 3389 -j SNAT --to-source <external IP of linux machine>

无法建立 RDP 连接。我做的对吗?我是否应该尝试不在 SNAT 规则上指定任何端口?

/编辑:尝试了未指定端口的 SNAT,但也无法连接。

/编辑:尝试了 MASQUERADE 而不是 SNAT,但仍然没有成功。

sudo iptables -t nat -A POSTROUTING -o <outgoing interface on linux machine> -j MASQUERADE

/编辑:尝试通过以下方式故意转发

sudo iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

但仍然没有连接。

/编辑:怀疑网络管理器是问题的根源。我手动定义了 Linux 机器的内部接口。它仍然显示在网络管理器中,问题仍然没有解决。

答案1

sudo iptables -t nat -A PREROUTING -i <outgoing interface on linux machine> -p tcp --dport 3389 -j DNAT --to-destination <IP of win machine>
sudo iptables -t nat -A POSTROUTING -o <outgoing interface on linux machine> -j SNAT --to-source <external IP of linux machine>
sudo iptables -A FORWARD -i <outgoing interface on linux machine> -p tcp --dport 3389 -j ACCEPT
sudo iptables -A FORWARD -s <IP of win machine> -j ACCEPT

cat /proc/sys/net/ipv4/ip_forward应该返回1

请注意,iptables -A add 只是将规则附加到链中。这意味着如果已经有一条拒绝您的数据包的规则,它将首先执行,并且您的新规则永远不会匹配。如果您不确定,您可以使用iptables -I而不是 来测试上述规则iptables -A。您的规则将插入链中,成为第一个要执行的规则。

相关内容