通过中介服务器进行远程桌面的SSH隧道第二部分

我以前问过如何使用中间服务器来configuration2个SSH隧道,以便通过它们运行远程桌面,并设法使其工作。 现在,我正在尝试使用相同的机器,但以相反的顺序。 这是设置:

  1. Windows 7个人电脑在专用networking中,坐在防火墙后面。
  2. 公共访问Linux服务器,可以访问PC。
  3. Windows 7笔记本电脑,在家里,我想在PC上做远程桌面。

我在笔记本电脑上使用Putty来创build一个从它到Linux服务器的反向隧道: R60666 localhost:3389

我在PC上使用Putty来创build一个从它到Linux服务器的常规隧道: L60666 localhost:60666

我SSH到Linux服务器,我运行telnet localhost 60666,它似乎产生预期的输出,如我在这里收到的debugging提示中所述。

我尝试将远程桌面从PC连接到笔记本电脑: localhost:60666 。 它要求我的用户名和密码,我点击确定,它locking我的笔记本电脑上的当前会话(所以我看到在笔记本电脑上的欢迎屏幕,而不是我的桌面),它显示远程桌面屏幕上的“欢迎”消息,然后它只是黑色。 它不会断开连接,它不会提供任何错误,而且我无法在“远程桌面”屏幕中执行任何操作。 我尝试了与Windows XP笔记本电脑相同的设置,并且遇到相同的症状。 我也尝试使用不同于60666的端口,但没有任何改变。 有人知道我在做什么错吗?


更新 :正如@jwinders所指出的,我无法直接从Linux服务器运行telnet PC 3389 。 由于Windows防火墙有一个规则允许在端口3389上的所有连接,我不知道是什么阻止它。 幸运的是,我能够从Linux机器创build一个SSH隧道到PC ssh 3389:localhost:3389 'domain\user'@PC

我没有看到你的SSH隧道有什么问题。 在PC上连接到本地主机:60666应该在笔记本电脑上的本地主机:3389上结束。 而且,您获得login屏幕的事实证实了这一评估。

在空白屏幕上search一下让我的微软知识库文章: http : //support.microsoft.com/kb/555840 。 由于可能的MTU大小不匹配,它表示可能会有一个空白屏幕:

validation服务器,客户端和使用“MTU”大小的networking设备。

鉴于您的networking跳数,防火墙和你有什么,相当可能的数据包碎片:)大多数Windows机器默认情况下使用MTU 1300,而大多数Linux机器有1500(LAN的最大允许值,不考虑巨型帧)。 您可以尝试降低这些以减less碎片。

也可以看看:

VPN不会更合适吗? OpenVPN是非常简单的configuration。 这里是一个示例configuration和一些链接,指导你通过证书创build过程。

只需configuration中介作为主机,客人可以拨入并仍然可以互相通信。

 apt-get install openvpn mkdir /etc/openvpn/easy-rsa mkdir -p /etc/openvpn/ccd/client_server touch /etc/openvpn/ipp.txt cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa source ./vars ./clean-all ./build-ca ./build-key-server server ./build-dh cd /etc/openvpn/easy-rsa/keys openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile ca.crt 

然后创build一个新的文件/etc/openvpn/client_server.conf并在其中添加以下内容,根据需要更改SERVER_IP_ADDRESS

 local SERVER_IP_ADDRESS port 8443 proto udp dev tun ca /etc/openvpn/easy-rsa/keys/ca.crt pkcs12 /etc/openvpn/easy-rsa/keys/server.p12 dh /etc/openvpn/easy-rsa/keys/dh2048.pem ifconfig-pool-persist /etc/openvpn/ipp.txt server 192.168.100.0 255.255.255.0 client-config-dir /etc/openvpn/ccd/client_server ccd-exclusive keepalive 10 120 comp-lzo persist-key persist-tun status /var/log/openvpn-status.log verb 3 reneg-sec 0 client-to-client 

然后为每个要连接的用户build立一个密钥,并在ccd目录下创buildconfiguration文件

 ./build-key-pkcs12 [email protected] echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/[email protected] 

IP地址务必适用于/ 30子网(见http://www.subnet-calculator.com/cidr.php ),因为每个连接只有2个可用的地址(服务器和客户端)。 所以你下一个可用的客户IP将是192.168.100.6等等。

然后你现在有每个连接用户的静态IP。

然后the [email protected]文件提供给最终用户并使用以下configuration文件

 client dev tun proto udp remote SERVER_IP_ADDRESS 8443 pkcs12 [email protected] resolv-retry infinite nobind ns-cert-type server comp-lzo verb 3 reneg-sec 0 

我今天碰到了同样的黑屏+断开连接问题,用腻子作为我的客户端。 我终于find了解决办法

我从腻子切换到bitvise隧道 ,并使用以下设置build立一个S2C连接:

 listen if:0.0.0.0 listen port:13389 destination host:localhost dest port:3389 

如果有机会,我在我的服务器上使用了bitvise ssh服务器,所以这可能是由同一供应商生产的两种产品的快乐组合。 如果能解决别人的问题,那将是非常好的。

为了logging,我不以任何方式与这些家伙挂钩。

我认为你可以从你的笔记本电脑做所有的conf

在您的笔记本电脑上设置一个腻子连接到Linux的盒子。 然后在“连接”>“SSH”>“隧道”将60666放在“源端口”字段中,并确保已选中“本地”单选button。 在“目标”中inputwin7-box-name-or-ip:3389。

保存所有这一切,它应该允许你打开一个腻子会话,以自动创build一个隧道转发stream量到本地主机(您的笔记本电脑)的linux-box:60666到win7:3389

如果你在命令行上这样做,应该是这样的

 ssh -L60666:win7:3389 linux-box 

我发现,除非所有的用户都完全注销了机器,否则input凭证后会出现空白屏幕。 所以,确保你总是注销。

如果您正在用户帐户(使用putty.exe等程序)运行ssh会话,则当您尝试通过rdplogin时,会中断该连接导致rdp会话中断。 你需要做的是运行ssh隧道作为一个不会中断的服务。