使用 Linux 服务器在 LAN 和 VPN 接口之间转发 RDP 连接

使用 Linux 服务器在 LAN 和 VPN 接口之间转发 RDP 连接

更新:我现在需要尽快解决这个问题。我大概知道我可以设置一些iptablesNAT 和端口转发,但我真的不太了解这个工具及其语法,无法制定自己的规则。

  • 我的本地网络上有一台具有静态 IP 的机器:192.168.1.166。(运行 Debian 10 的 Hyper-V VM)
  • 该机器运行 Cisco AnyConnect 来连接到我的工作 VPN。
    此 VPN 客户端设置了第二个网络接口,这样我就有两个网络接口:(
    eth0我的 LAN)和cscotun0
  • 我希望能够将其放入192.168.1.166我的个人桌面上的 RDP 客户端并让它通过 VM 连接到我工作时的远程桌面。

我唯一的疑问真的需要回答:

如何通过虚拟机将端口 3389 上的 TCP 和 UDP 连接从我的个人桌面路由到工作中的远程系统?

我猜想虚拟机需要“伪装” RDP 连接,就好像它来自在工作网络上获取动态 IP 的 VPN 客户端一样,所以我知道我需要 NAT。这个masquerade工具是否也需要呢?


原始问题:

我需要通过 Cisco AnyConnect 全隧道 VPN 使用 RDP 来进行在家工作。

我所在公司的 IT 部门尚未将 VPN 服务器配置为仅支持 RDP 的拆分隧道,而且我可能无论如何都需要在工作中使用其他网络服务,因此我想使用全隧道连接来解决问题。但是,我不想在我的个人计算机上使用 AnyConnect VPN 客户端,因为我觉得这会路由全部我的互联网流量也通过VPN。

我已经设置了一个运行 VPN 客户端的 Debian 10 虚拟机。我想让这个虚拟机伪装成我的 LAN 上的远程 RDP 服务器。这样,我就可以避免在个人计算机上运行 VPN 客户端,只需使用 RDP 客户端连接到虚拟机,然后虚拟机通过 VPN 将 RDP 连接转发到实际的 RDP 服务器。

那么,我该如何实现这一点呢?

我仅具有以下管理权限:

  • 我家里的 Windows 10 桌面。
  • 我的“代理”虚拟机
  • 我的家用路由器
  • 我工作时使用的 Windows 10 桌面。(但如果我的更改存在安全风险,IT 可以阻止/撤消这些更改)

我目前正在使用 VNC 和 RDP 的组合来通过 VM 进行远程桌面跳转,但是它的分辨率受到 VM 管理程序的限制,并且结合了两种协议的缺点。

答案1

如果您的虚拟机192.168.1.166可以访问两个网络(您的本地网络和通过 VPN 的公司网络),则使用socat在您的虚拟机和公司 RDP 服务器之间建立双向隧道。在虚拟机上运行以下命令:

socat tcp4-listen:3389,reuseaddr,fork tcp:remote-addr:3389

这将打开3389您虚拟机上的 TCP 端口,并且到达该端口的任何 TCP 流量都将通过隧道传输到remote-addr:3389

Socat 也支持 UDP。

该选项reuseaddr在手册页中的描述如下:

允许其他套接字绑定到某个地址,即使该地址的一部分(例如本地端口)已被 socat 使用

它能够socat立即重新启动并绑定到指定端口。

该选项fork具有以下效果:

建立连接后,在子进程中处理其通道,并让父进程继续尝试生成更多连接

如果没有此选项,它将socat在其处理的连接终止后终止,并且socat需要重新启动(手动或使用脚本)。使用此选项,socat将继续侦听并为传入连接提供服务,而不会终止。

通过这种方式,您可以192.168.1.166在个人桌面上指定 RDP 服务器,并且流量将通过隧道传输到公司服务器。

相关内容