私有网络上有一台远程 Windows 服务器,我可以通过远程桌面连接来连接它。我希望能够从我的计算机与该服务器网络上的其他计算机建立 TCP/IP 连接。
远程桌面连接使得通过该连接共享打印机、驱动器和其他本地资源成为可能。有没有办法通过 RDC“隧道化” TCP/IP 连接?
我想要类似于 SSH 提供的端口转发功能。我看不出有任何方法可以通过 RDC 来实现这一点,但我希望有这种功能,只是我不知道。
答案1
我认为您无法通过 RDP 建立隧道,但是如果您通过 RDP 连接到服务器,然后启动 SSH 隧道返回到您的客户端,您的机器将通过 SSH 连接。您可以转发远程和本地端口,这样您就可以反向操作
编辑
如果您在客户端 PC 上安装了 ssh 服务器并将其设置为在端口 443 上接受 ssh 连接,那么您可以从服务器(使用 ssh 客户端连接)连接到 ssh 服务器(您的客户端),并且您不需要打开任何端口(443 应该对 https 开放)
答案2
如果你在客户端运行 rdesktop(而不是原生 Windows 客户端),则可以使用rdp2tcp.
它允许您通过 RDP 连接管理 TCP 端口转发。
答案3
我没有找到比rdp2tcp与不允许管理员访问或接口到接口网络路由的 Windows Server 一起使用。您需要执行OOP 补丁在您的 rdesktop 上使其工作(转到最后几页以找到与最新版本的 rdesktop 相对应的页面)。我使用 MinGW 编译器来编译隧道的 Windows 端。
文档也很出色且简洁。
似乎有点小问题:如果您使用带有“-”的“addin”名称,rdesktop 将无法正确解析命令行。这可能是需要正确转义的 bashism,但我不确定。
请注意,据我所知,这不是一个“真正的”TCP 隧道,它“看到”TCP 协议数据单元,因为如果没有 Windows 端的管理员权限,这是不可能的。它更像是一个带有预先配置的端点的 socks 代理(虽然不是很重要)。如果您喜欢的话,它还具有一个实际的 socks 代理。
我轻松地用它管理了一个交互式 SSH 会话,但它无法支持 SSH 文件传输(在 rdesktop 控制台中显示“虚拟通道已断开连接”(rdp2tcp 作为其子进程运行,stdout/stdin 由 rdesktop dup2'ed/piped,但 stderr 没有变化))。源中有一个名为 RDP2TCP_PING_TIMEOUT 的常量,看起来像是用于阻止隧道的保持活动超时。假设中间网络存在某种限制,将其从 5 秒增加到 900 秒似乎已经解决了问题,并且它可以支持高达 100MB 的传输(在该特定网络上大约需要 15 分钟)。
除此之外,还发现 rdp2tcp 收到了 SIGPIPE,据称这是由于 rdesktop 管道中断而收到的,尽管我无法从 rdesktop 代码或“lsof”的输出中找到发生这种情况的任何证据,'lsof' 的输出显示在 SIGPIPE 触发之前和之后 rdesktop 的管道数量没有变化。
如果发生这种情况,您将需要重新启动 rdesktop,并且可能还需要重新启动隧道的 Windows 端。您可以使用 rsync 并恢复文件传输,也许您可以自动执行整个恢复过程。
所有这些都假设 Linux 是您的客户端。由于我在使用 Cygwin/X 时遇到了一些不相关的问题,我还没有在 Windows 上尝试过修补后的 rdesktop。我想它应该可以工作。
此外,我的经验是使用 SSH,但通过任何其他方式传输大文件都可能会遇到同样的问题。
答案4
我认为您可以使用本地端口转发到 RDP:
A -> B -> C
A 是 Windows 或 Mac,B 是 Linux,C 是 Windows。如果您想从 A 通过 RDP 连接到 C,而 C 无法从 A 直接访问,则在 A 上
ssh username@B -L 7777:C:3389
打开 RD 客户端,然后指向 127.0.0.1:7777 使用 C 的用户名和密码。我从 Mac 尝试过这个,但应该适用于 Windows。