2013-09-23 103 views
0

對不起,長久以來,我一直試圖保持清醒。Windows上的遠程桌面+隧道

*小*背景使用從服務器遠程桌面(RDP)與有效的IP地址

因爲我們需要能夠訪問某些計算機項目的一部分(以下簡稱客戶)。這些客戶端位於NAT後面(例如,在DSL Mode + Router後面),因此它們沒有有效的IP地址,但Modem + Router卻有。假設它們都在Windows 7旗艦版上運行,並且沒有防火牆,防病毒軟件或阻止流量的任何東西。

*到目前爲止*

想到的是使用上的調制解調器端口轉發選項的第一個也是最順理成章的事情。但是,這裏的真實生活場景是這些客戶端正在運行一個應用程序(用C#編寫,我們已經提供),我們需要應用程序來做端口轉發,而不是調制解調器,因爲在部署系統之後,我們贏了不知道路由器型號,配置等。另外,我們將無法訪問調制解調器設置。所以,假設這個選項不可用。

*對我們來說可行的選擇,當然,這個問題! *

轉到下一個使用反向隧道(aka遠程端口轉發)的選項,我們更改了應用程序以創建2個套接字。 On用於與客戶端上的RDP服務器進行通信,另一個用於連接到服務器(具有有效IP的服務器)以建立隧道。 在服務器上有另一個應用程序,它從客戶端獲取所有流量並將其發送到遠程桌面客戶端(通過另一個套接字),反之亦然。因此,該架構看起來類似:

|RDP SERVER|<->|Socket1|<->|Socket2|<->The Internet<->|Socket3|<->|Socket4|<->|RDP Client| 
------------ Client side ----------     ------------- Server Side ---------- 

插座1是在客戶端的端口17001,並與端口3389的客戶端(RDP服務器)
插座2是在客戶端的端口17002,並與端口17002通信通信服務器的
插座3是在端口服務器17002,並與客戶端
插座4是服務器的端口17002的端口17002進行通信,並且與服務器的端口3389(RDP客戶端)

上通信的從該點每當服務器上的用戶想要創建遠程桌面公司時,與NAT後面的客戶端連接,他將連接到套接字4,並將所有通信重定向到套接字3,套接字3又將流量傳輸到套接字2,並將套接字2傳輸到套接字1,然後以其他方式傳輸。

問題是,無論客戶端和服務器如何連接,即使服務器和客戶端位於相同的網絡中,在RDP詢問客戶端的密碼之後,它也會執行以下操作之一隨機的基礎上: 1.有時它連接沒有問題,我可以與計算機進行互動 2.有時它停在那裏 3.有時它進入,並在顯示它的客戶端屏幕之前死亡。

我檢查了連接,更改了調制解調器,更改了客戶端和服務器,它仍然是一樣的。我甚至在客戶端(freesshd)嘗試過一個ssh服務器,並使用膩子遠程端口轉發,結果是putty上的奇怪錯誤導致連接丟失。我開始拉我的頭髮了!任何想法是怎麼回事?

回答

0

首先,謝謝大家不回答我的問題!它幫助我弄清楚什麼是錯的。

我想在這裏分享解決方案,所以其他人尋找類似問題的答案可能會有一個想法。

答案:

不管你信不信,這是關係到調試!發佈這個問題幾天後,我發現如果我沒有調試代碼,它工作得很好。我的問題解決了,所以我懶得去想它的原因。

但是,大約三天前,在編寫一個必須與用戶交互的Windows服務的過程中,我不小心碰到了一些讓我明白錯誤的文章。

我越來越深入,發現當你開始一個遠程連接時,你實際上開始一個新的session。你猜怎麼着?您的調試器附加到在另一個Windows會話中運行的進程,因此視頻渲染器未分配給新會話,並且所有地獄都會崩潰!

當然,這是我對問題的理解,但似乎揭示了這個謎團!

+0

ahh是的。如果您想調試另一臺服務器上的進程,則需要使用遠程調試器,以便跨越會話和網絡邊界。我們的商店有幾個問題隻影響使用調試器的開發人員,因此總是需要考慮的問題。真高興你做到了。 –

+0

@FrankThomas謝謝:) – Arashv