一種穿透內(nèi)網(wǎng)遠(yuǎn)程連接大規(guī)模虛擬機的方法
【專利摘要】本發(fā)明公開了一種基于代理方法,使得遠(yuǎn)程控制工具(vnc4server)可以穿透內(nèi)網(wǎng),連接局域網(wǎng)大規(guī)模機器集群中的任意虛擬機。本發(fā)明方法通過構(gòu)造一個符合規(guī)則的url,直接向代理服務(wù)器發(fā)送請求,代理服務(wù)器通過解析請求的url,得到需要連接的內(nèi)網(wǎng)虛擬機IP和端口號,向該虛擬機轉(zhuǎn)發(fā)請求,并把虛擬機的響應(yīng)轉(zhuǎn)發(fā)給客戶端。本發(fā)明不需要修改vnc4server服務(wù)端的任何配置,只需要部署一臺代理服務(wù)器,用指定規(guī)則的url訪問,就可以通過瀏覽器遠(yuǎn)程連接內(nèi)網(wǎng)中的虛擬機(Linux和Windows)。本發(fā)明方法使用簡單友好,部署簡單易行,訪問過程安全穩(wěn)定可靠。
【專利說明】一種穿透內(nèi)網(wǎng)遠(yuǎn)程連接大規(guī)模虛擬機的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機網(wǎng)絡(luò)領(lǐng)域,特別是涉及遠(yuǎn)程控制工具軟件穿透內(nèi)網(wǎng)的方法。
【背景技術(shù)】
[0002] 本發(fā)明涉及遠(yuǎn)程控制協(xié)議,當(dāng)前的主流有ssh協(xié)議、vnc協(xié)議等。
[0003] SSH為Secure Shell的縮寫,是一種為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié) 議,是專為遠(yuǎn)程登錄會話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。利用SSH協(xié)議可以有效防止 遠(yuǎn)程管理過程中的信息泄露問題。SSH客戶端適用于多種平臺,幾乎所有Unix平臺一包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平臺一都可運行 SSH。
[0004] VNC (Virtual Network Computing),為一種使用RFB協(xié)定的屏幕畫面分享及遠(yuǎn)程 操作軟件。此軟件借由網(wǎng)絡(luò),可傳送鍵盤與鼠標(biāo)的動作及實時的屏幕畫面。VNC與操作系統(tǒng) 無關(guān),因此可跨平臺使用,例如可用Windows連接到某Linux的電腦,反之亦同。甚至在沒 有安裝客戶端程序的電腦中,只要有支持JAVA的瀏覽器,也可使用。
[0005] 由于我們的平臺中申請的虛擬機既有Linux操作系統(tǒng),也有Windows操作系統(tǒng),我 們選擇vnc4server開源軟件作為遠(yuǎn)程控制工具。
[0006] 對于外網(wǎng)訪問內(nèi)網(wǎng)中的機器,現(xiàn)有的技術(shù)就是使用NAT協(xié)議。
[0007] 網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation或簡稱NAT)是一種在IP封包通過 路由器或防火墻時重寫源IP地址或/和目的IP地址的技術(shù)。NAT包括靜態(tài)網(wǎng)絡(luò)地址轉(zhuǎn)換、 動態(tài)網(wǎng)絡(luò)地址轉(zhuǎn)換、網(wǎng)絡(luò)地址及端口轉(zhuǎn)換、動態(tài)網(wǎng)絡(luò)地址及端口轉(zhuǎn)換、端口映射等。NAT的端 口映射功能是將一臺主機的假IP地址映射成一個真IP地址,當(dāng)用戶訪問提供映射端口主 機的某個端口時,服務(wù)器將請求轉(zhuǎn)到內(nèi)部一主機的提供這種特定服務(wù)的主機;利用端口映 射功能還可以將一臺真IP地址機器的多個端口映射成內(nèi)部不同機器上的不同端口。端口 映射功能還可以完成一些特定代理功能,比如代理POP,SMTP,TELNET等協(xié)議。
[0008] 利用端口映射,可以將集群內(nèi)部的虛擬機映射到具有外網(wǎng)IP和內(nèi)網(wǎng)IP的雙網(wǎng)卡 服務(wù)器上的端口,外網(wǎng)通過訪問這臺服務(wù)器上的某個端口就可以連接端口對應(yīng)的虛擬機 了。
[0009] 這種方法有很大的局限性,首先有用端口是受限的,而平臺中的虛擬機資源是可 以不斷擴充的,很有可能沒有足夠的端口來映射虛擬機;其次,用一個數(shù)字(端口)來標(biāo)明一 臺虛擬機,這種方法并不友好,難以記憶。
[0010]
【發(fā)明內(nèi)容】
針對當(dāng)前的技術(shù)背景,本發(fā)明提出了一種基于代理的,能夠使得vnc4server穿透內(nèi) 網(wǎng),遠(yuǎn)程登入大規(guī)模集群平臺中的任意虛擬機。這種方法使用簡單友好,部署簡單易行,擴 展性高,訪問過程安全穩(wěn)定可靠。
[0011] 為了解決上述技術(shù)問題,本發(fā)明通過下述技術(shù)方案得以解決: 一種穿透內(nèi)網(wǎng)遠(yuǎn)程連接大規(guī)模虛擬機的方法,方法如下: 步驟a :在內(nèi)網(wǎng)中的各個虛擬機上安裝vnc4server開源軟件,使用vnc4server軟件, 在網(wǎng)絡(luò)互通的情況下,可以使用瀏覽器以桌面的方式遠(yuǎn)程登入Linux或Window機器; 步驟b :選擇一臺具有外網(wǎng)IP和內(nèi)網(wǎng)IP的雙網(wǎng)卡服務(wù)器,這臺服務(wù)器和其他物理機共 同組成了一個集群;這樣,外網(wǎng)可以連通這臺服務(wù)器,它又可以連接集群內(nèi)網(wǎng)中的虛擬機。
[0012] 步驟c :將代理軟件部署在選定的雙網(wǎng)卡服務(wù)器上;由于代理部署在Linux服務(wù)器 上,采用c語言,進程池-select模型的架構(gòu)開發(fā)代理,該代理主要是處理http協(xié)議和vnc 協(xié)議; 首先是處理http協(xié)議請求,流程如下: (1) 監(jiān)聽外網(wǎng)IP端口,得到來自外網(wǎng)的http請求; (2) 解析http請求中的url,得到需要連接的虛擬機IP和端口,并把源主機IP與目的 虛擬機IP、端口映射起來,保存在一張表中;然后與目的虛擬機建立tcp連接,轉(zhuǎn)發(fā)得到并 經(jīng)過重寫的http請求; (3) 監(jiān)聽內(nèi)網(wǎng)IP端口,得到目的虛擬機的http響應(yīng),直接把該響應(yīng)轉(zhuǎn)發(fā)給對應(yīng)的外網(wǎng) 客戶端; 接下來,代理需要處理vnc協(xié)議。我們的代理軟件不關(guān)心vnc協(xié)議的具體格式,只是簡 單的接收轉(zhuǎn)發(fā),具體流程如下: (1) 監(jiān)聽外網(wǎng)IP端口,得到來自外網(wǎng)的請求; (2) 得到外網(wǎng)請求的源主機IP,查詢映射表,向?qū)?yīng)的目的虛擬機轉(zhuǎn)發(fā)該 請求,并等待目的虛擬機的響應(yīng); (3) 得到目的虛擬機的響應(yīng),直接向?qū)?yīng)的源主機IP轉(zhuǎn)發(fā)該響應(yīng)即可; 以上即為代理軟件的處理流程; 步驟d :外網(wǎng)用戶使用特定規(guī)則的url向代理服務(wù)器發(fā)送請求,即可連接遠(yuǎn)程的虛擬 機,通過身份認(rèn)證后,登入系統(tǒng)。
[0013] 我們規(guī)定的url格式是: http://代理服務(wù)IP:Port/目的虛擬機IP:Port/ 實際部署時,我們使用vnc4server默認(rèn)的端口號5801,于是我們使用http://10. 22. 42. 89:5801/192. 168. 110. 26:5801/就可以通過遠(yuǎn)程桌面的方式連接云平臺中對應(yīng)的虛擬 機了。
[0014] 本發(fā)明由于采用了以上技術(shù)方案,具有顯著的技術(shù)效果: 本發(fā)明是一種基于代理的,能夠使得Vnc4Server穿透內(nèi)網(wǎng),遠(yuǎn)程登入大規(guī)模集群平臺 中的任意虛擬機,本發(fā)明方法使用簡單友好,部署簡單易行,訪問過程安全穩(wěn)定可靠。
【專利附圖】
【附圖說明】
[0015] 圖1是用來說明整個方法的流程; 圖2是用來說明子進程處理http協(xié)議的工作流程; 圖3是用來說明子進程處理vnc協(xié)議的工作流程。
【具體實施方式】
[0016] 下面結(jié)合附圖1至附圖3與實施例對本發(fā)明作進一步詳細(xì)描述: 實施例1 1、進程池模型 本發(fā)明的代理軟件采用進程池模型,預(yù)先創(chuàng)建多個子進程,處理具體的代理工作,而 主進程則維護進程池的大小。進程池的大小用配置文件的兩個閾值MinSpareServers和 MaxSpareServers維護。空閑進程個數(shù)的統(tǒng)計使用文件鎖同步,當(dāng)子進程進入任務(wù)處理流程 時,空閑進程個數(shù)減一,當(dāng)子進程退出任務(wù)處理流程時,空閑進程個數(shù)加一。當(dāng)空閑進程個 數(shù)小于MinSpareServers時,主進程創(chuàng)建新的工作進程,等待任務(wù)的到來,當(dāng)空閑進程個數(shù) 大于MaxSpareServers時,當(dāng)前子進程退出。這樣,就實現(xiàn)了進程池大小的維護。
[0017] 2、主進程工作流程 主進程預(yù)先創(chuàng)建指定個數(shù)的子進程,接著維護進程池的大小。主進程每隔5s鐘醒來, 如果空閑進程個數(shù)小于MinSpareServers,則在子進程列表中尋找一個空槽位,倉ij建一個新 的子進程。至于空閑進程個數(shù)大于MaxSpareServers,這種情況不會出現(xiàn),因為子進程退出 任務(wù)處理流程時,會進行一次判斷,如果空閑進程個數(shù)大于MaxSpareServers時,該子進程 退出。
[0018] 3、子進程工作流程 子進程承擔(dān)代理的實際工作,轉(zhuǎn)發(fā)請求和響應(yīng)。子進程監(jiān)聽服務(wù)器的5801和5901端 口( vnc4server默認(rèn)配置使用這兩個端口),如果是來自5801端口的連接請求,表明源主機 發(fā)送的是http協(xié)議,進入http協(xié)議處理流程;如果來自5901端口的連接請求,表明源主機 發(fā)送的是vnc協(xié)議,進入vnc協(xié)議處理流程。當(dāng)流程結(jié)束時,空閑進程個數(shù)加一,如果空閑 進程個數(shù)大于MaxSpareServers,該子進程退出,否則繼續(xù)等待10事件。
[0019] 3. 1、處理 http 協(xié)議 子進程使用select監(jiān)聽套接字的10事件,對于10事件,不同類型有不同的處理方法: (a)如果是http請求到達(dá),解析url得到對應(yīng)的目的虛擬機IP和端口。如果這是第一 個請求,保存虛擬機IP和端口,并使用TCP連接目的虛擬機,把套接字加入select的監(jiān)聽 隊列中。查找映射表,得到對應(yīng)的目的虛擬機的地址,向其發(fā)送經(jīng)重寫的http請求。
[0020] (b)如果是http響應(yīng),查找映射表,得到源主機地址,向其轉(zhuǎn)發(fā)該響應(yīng)。
[0021] (c) select等待超時,子進程結(jié)束。
[0022] 3.2、處理¥11(3協(xié)議 子進程使用select監(jiān)聽套接字的10事件,對于10事件,不同類型有不同的處理方法: (a)如果是vnc請求到達(dá),查找映射表,得到對應(yīng)的目的虛擬機的地址,如果是第一個 vnc請求,則與虛擬機建立TCP連接。接著向?qū)?yīng)的套接字發(fā)送vnc請求。
[0023] (b)如果是vnc響應(yīng),查找映射表,得到源主機地址,向其轉(zhuǎn)發(fā)該響應(yīng)。
[0024] (c) select等待超時,子進程結(jié)束。
[0025] 總之,以上所述僅為本發(fā)明的較佳實施例,凡依本發(fā)明申請專利范圍所作的均等 變化與修飾,皆應(yīng)屬本發(fā)明專利的涵蓋范圍。
【權(quán)利要求】
1. 一種穿透內(nèi)網(wǎng)遠(yuǎn)程連接大規(guī)模虛擬機的方法,步驟如下: 步驟a :在內(nèi)網(wǎng)中的各個虛擬機上安裝vnc4server開源軟件,使用vnc4server軟件, 在網(wǎng)絡(luò)互通的情況下,可以使用瀏覽器以桌面的方式遠(yuǎn)程登入Linux或Window機器; 步驟b :選擇一臺具有外網(wǎng)IP和內(nèi)網(wǎng)IP的雙網(wǎng)卡服務(wù)器,這臺服務(wù)器和其他物理機共 同組成了一個集群; 步驟c :將代理軟件部署在選定的雙網(wǎng)卡服務(wù)器上;由于代理部署在Linux服務(wù)器上, 采用c語言,進程池 -select模型的架構(gòu)開發(fā)代理,該代理主要是處理http協(xié)議和vnc協(xié) 議; 步驟d :外網(wǎng)用戶使用特定規(guī)則的url向代理服務(wù)器發(fā)送請求,即可連接遠(yuǎn)程的虛擬 機,通過身份認(rèn)證后,登入系統(tǒng)。
2. 根據(jù)權(quán)利要求1所述的穿透內(nèi)網(wǎng)遠(yuǎn)程連接大規(guī)模虛擬機的方法,其特征在于:所述 的步驟c中,代理服務(wù)器的處理http協(xié)議的流程如下: (1) 監(jiān)聽外網(wǎng)IP端口,得到來自外網(wǎng)的http請求; (2) 解析http請求中的url,得到需要連接的虛擬機IP和端口,并把源主機IP與目的 虛擬機IP、端口映射起來,保存在一張表中;然后與目的虛擬機建立tcp連接,轉(zhuǎn)發(fā)得到并 經(jīng)過重寫的http請求; (3) 監(jiān)聽內(nèi)網(wǎng)IP端口,得到目的虛擬機的http響應(yīng),直接把該響應(yīng)轉(zhuǎn)發(fā)給對應(yīng)的外網(wǎng) 客戶端。
3. 根據(jù)權(quán)利要求1所述的穿透內(nèi)網(wǎng)遠(yuǎn)程連接大規(guī)模虛擬機的方法,其特征在于:所述 的步驟c中,代理服務(wù)器的處理vnc協(xié)議的流程如下: (1) 監(jiān)聽外網(wǎng)IP端口,得到來自外網(wǎng)的請求; (2) 得到外網(wǎng)請求的源主機IP,查詢映射表,向?qū)?yīng)的目的虛擬機轉(zhuǎn)發(fā)該請求,并等待 目的虛擬機的響應(yīng); (3) 得到目的虛擬機的響應(yīng),直接向?qū)?yīng)的源主機IP轉(zhuǎn)發(fā)該響應(yīng)即可; 以上即為代理軟件的處理流程。
【文檔編號】H04L29/08GK104125243SQ201310142306
【公開日】2014年10月29日 申請日期:2013年4月23日 優(yōu)先權(quán)日:2013年4月23日
【發(fā)明者】姜曉紅, 黃鵬, 嚴(yán)海明, 吳朝暉, 楊紅星 申請人:浙江大學(xué)