更新:我现在需要尽快解决这个问题。我大概知道我可以设置一些iptables
NAT 和端口转发,但我真的不太了解这个工具及其语法,无法制定自己的规则。
- 我的本地网络上有一台具有静态 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 服务器,并且流量将通过隧道传输到公司服务器。