我之前问过如何使用中间服务器配置 2 个 SSH 隧道以便通过它们运行远程桌面,我设法让它工作。现在,我尝试使用相同的机器做同样的事情,但顺序相反。以下是设置:
- 专用网络中的 Windows 7 PC,位于防火墙后面。
- 公共访问 Linux 服务器,可以访问 PC。
- 家里的 Windows 7 笔记本电脑,我希望在其上从 PC 进行远程桌面操作。
我使用笔记本电脑上的 Putty 创建从它到 Linux 服务器的反向隧道:R60666 localhost:3389
。
我使用 PC 上的 Putty 创建从它到 Linux 服务器的常规隧道:L60666 localhost:60666
。
我通过 SSH 连接到 Linux 服务器并运行 telnet localhost 60666 ,它似乎产生了预期的输出,正如我收到的调试提示中所述这里。
我尝试将远程桌面从 PC 连接到笔记本电脑:localhost:60666
。它要求我输入用户名和密码,我单击“确定”,然后锁定笔记本电脑上的当前会话(因此我看到笔记本电脑上的欢迎屏幕而不是桌面),它在远程桌面屏幕上显示“欢迎”消息,然后屏幕变黑。它没有断开连接,没有显示任何错误,我无法在远程桌面屏幕上执行任何操作。我尝试在 Windows XP 笔记本电脑上进行相同的设置,但遇到了相同的症状。我还尝试使用 60666 以外的其他端口,但没有任何变化。有人知道我做错了什么吗?
更新:正如@jwinders 指出的那样,我无法telnet PC 3389
直接从 Linux 服务器运行。由于 Windows 防火墙有一条规则允许端口 3389 上的所有连接,所以我不知道是什么阻止了它。幸运的是,我能够从 Linux 机器到 PC 创建 SSH 隧道ssh 3389:localhost:3389 'domain\user'@PC
。
答案1
我今天也遇到了同样的黑屏 + 断开连接问题,使用 Putty 作为客户端。我确实找到了一个解决方案最终。
我从 putty 切换到bitvise 隧道,并S2C
使用以下设置建立连接:
listen if:0.0.0.0
listen port:13389
destination host:localhost
dest port:3389
碰巧的是,我的服务器上使用的是 bitvise ssh 服务器,所以这可能是同一供应商生产的两种产品的完美组合。如果这能为其他人解决问题,那就太好了。
需要声明的是,我和这些人没有任何关系。
答案2
我没有发现您的 SSH 隧道有什么问题。连接到 PC 上的 localhost:60666 应该会到达笔记本电脑上的 localhost:3389。而且您看到登录屏幕的事实证实了这一评估。
在空白屏幕上进行一点谷歌搜索后,我找到了这篇 Microsoft 知识库文章:http://support.microsoft.com/kb/555840。它指出,空白屏幕可能是由于 MTU 大小不匹配造成的:
验证服务器、客户端和网络设备使用的“MTU”大小。
考虑到您的网络跳数、防火墙等相当多,数据包碎片化的可能性很大 :) 大多数 Windows 计算机默认使用 1300 的 MTU,而大多数 Linux 计算机使用 1500(LAN 的最大允许值,不考虑巨型帧)。您可以尝试降低这些值以减少碎片化。
也可以看看:
答案3
VPN 不是更合适吗?OpenVPN 配置起来非常简单。这里有一个示例配置和一些链接,可指导您完成证书创建过程。
只需将中介配置为主人,客人就可以拨入并仍然可以相互通信。
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
然后创建一个新文件/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
然后为每个要连接的用户构建一个密钥,并在 ccd 目录中创建配置文件
./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]
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
答案4
我认为你可以用笔记本电脑完成所有的会议
在您的笔记本电脑上设置到 Linux 机器的 Putty 连接。然后在“连接”>“SSH”>“隧道”中,在“源端口”字段中输入 60666,并确保选中本地单选按钮。在“目标”中输入 win7-box-name-or-ip:3389。
保存所有这些,它应该允许您打开一个到 linux-box 的 putty 会话,它会自动创建一个隧道,将流量转发到 localhost(您的笔记本电脑):60666 到 win7:3389
如果你在命令行上执行此操作,它应该是这样的
ssh -L60666:win7:3389 linux-box