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


10

之前曾问过如何使用中介服务器配置2个SSH隧道,以便通过它们运行远程桌面,但我设法使其正常工作。现在,我正在尝试使用相同的机器执行相同的操作,但是顺序相反。设置如下:

  1. 专用网络中的Windows 7 PC,位于防火墙后面。
  2. 公共访问Linux服务器,可以访问PC。
  3. 我希望在家中使用Windows 7笔记本电脑从PC上进行“远程桌面”。

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

我在PC上使用Putty在从PC到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


那时我会认真地使用GoToMyPC
ewwhite

1
@ewwhite我看不到任何我不能使用我描述的设置的原因。即使有更简单的解决方案(要求涉及到第三方),我也认为这是一个有趣的挑战。
Mihai Todor 2012年

1
这是一个很明确的帖子,但是问题仍然存在,所有答案似乎都错了,这令人非常沮丧。可以启动连接,但是在启动后会中断一秒钟。该评论“登录通过RDP,会破坏该连接”似乎相干所观察到的,但它并没有回答为什么也不提出一个解决方案。
rhermans

Answers:


3

今天我自己遇到了同样的黑屏+断开问题,使用腻子作为我的客户。最终我确实找到了解决方案

我从腻子切换到bitvise tunnelier,并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机器默认使用的MTU为1300,而大多数Linux机器的MTU默认为1500(LAN的最大允许值,不考虑巨型帧) )。您可以尝试降低这些值以减少碎片。

也可以看看:


1
感谢您的提示,但不幸的是,它不能解决问题。我的笔记本电脑和PC上的MTU均设置为1500(netsh interface ipv4 show subinterfaces),并且ping linux_server -f -l 1472在两台计算机上均成功。作为测试,我试图将PC上的MTU设置为1300,但这并没有帮助。我也尝试过在笔记本电脑上进行更改,但无济于事:(我想知道是否有任何“更智能”的方式可以调试此问题...
Mihai Todor

1

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 user1@domain.com
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/user1@domain.com

IP地址必须适合/ 30子网(请参阅http://www.subnet-calculator.com/cidr.php),因为每个连接只有两个地址(服务器和客户端)。因此,下一个可用的客户端IP为192.168.100.6,依此类推。

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

然后将the user1@domain.com.p12文件提供给最终用户并使用以下配置文件

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 user1@domain.com.p12
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0

1
好吧,是的,这可能行得通,但是我在Linux机器上没有安装东西所需的访问权限:(尽管如此,我发现整个过程非常令人沮丧,因为它在一个方向上起作用而在相反的方向上失败。
Mihai Todor

1

如果您正在用户帐户中运行ssh会话(使用诸如putty.exe之类的程序),则当您尝试通过rdp登录时,它将破坏该连接,从而导致rdp会话中断。您需要做的是将ssh隧道作为服务运行,不会被中断。


1
有趣。我再也无法使用该设置了,因此我将无法检验您的理论,但是对于其他面临相同问题的人来说,获得一些此方面的更多详细信息将是很好的。您的主张有参考吗?腻子中断连接意味着什么?
Mihai Todor 2015年

0

我认为您可以从笔记本电脑上完成所有会议

在笔记本电脑上的Linux框中设置腻子连接。然后在“连接”>“ SSH”>“隧道”中的“源端口”字段中输入60666,并确保选中了“本地”单选按钮。在“目标”中,输入win7-box-name-or-ip:3389。

保存所有内容,它应该允许您打开到linux-box的腻子会话,这将自动创建将流量转发到localhost(您的笔记本电脑):60666到win7:3389的隧道

如果您在命令行上执行此操作,则应类似于

ssh -L60666:win7:3389 linux-box

1
因此,让我们看看...此配置应将端口3389从PC转发到笔记本电脑上的端口60666。不过,我看不到它是如何工作的,无论如何,它不允许我在笔记本电脑上进行远程桌面...据我所知,它需要使用2隧道。
Mihai Todor 2012年

有了这个conf,您不能在笔记本电脑上rdp到localhost:60666吗?
jwinders 2012年

不,它不起作用。
Mihai Todor 2012年

1
那不行 我唯一能做到的方法是先建立从linux盒到PC的隧道ssh 3389:localhost:3389 'domain\user'@PC,然后telnet localhost 3389在Linux盒上做。
Mihai Todor 2012年

1
这是一个有趣的观点,但是我不确定我理解阻止它的原因。Windows防火墙有一个规则,该规则明确允许域中端口3389上的所有连接。
Mihai Todor 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.