xshell三種端口轉發的認識


工作中經常會遇到一些服務器訪問受限的問題:某些服務器只有私網ip地址,僅能通過內網ip連接,或如mysql服務器或登錄其它機器的ssh。
這些問題當然許多解決辦法,本文就使用' xshell '通過ssh開啟代理的方式來解決這個問題,惻重介紹其內置的三種方式:
Local(Outgoing)
Remote(Incoming)
Dynamic(SOCKS4/5)


如何打開代理設置面板
點擊:view -> Tunneling Pane,在彈出的窗口選擇Forwarding Rules。
Alt+p:'Connection->SSH->Tunneling'。

從'Add...'按鈕或右鍵菜單即可添加。

一、Local
把遠程服務器到本機的端口映射。多於訪問那些偵聽的回環地址的服務,或位於防火牆后面,或沒有公網ip的服務。
Type選擇"Local(Outgoing)",'Source Host'使用默認的'localhost','Listen Port'添上mysql的端口3306;


'Destination Host'使用默認的localhost,'Destination Port'添上3306;

Descripting根據自己需要進行描述,可以留空。配置完成后點擊'OK'會彈出一個對話框,點擊是的話會對當前會話進行保存,以后每次連接此ssh會話,開啟此端口轉發,可自行決定是否保存。

添加完成后在'Forwarding Rules'對話框可以看到框中有一行轉發配置,確保Status的狀態是'Open',如果顯示的是'Failed'可能是3306這個本地端口已經被占用了,可以嘗試將'Listen Port'修改為其它端口進行重新設置。

至此,xshell已經將服務器的3306端口映射到本地3306端口,可以通過工具進行測試。只需要連接'localhost'或'127.0.0.1'(或本機的其它ip)的3306端口即可連上mysql,默認能訪問到本機的所有ip的機器(同一局域網)及端口(本機防火牆已關閉的情況下)就能訪問遠程的mysql服務器;如果僅讓本機可連,可將'Accept local connections only'這樣的選項勾上,這樣更安全一些(這種僅能從本機連接的方式同樣適用於其它兩種模式,下面不做多述)。

在Type選擇"Local(Outgoing)"的時候,'Source Host'表示使用的本地ip地址,可以是localhost也可以是本地內網ip或者公網ip,使用相應的ip便可以被本地網絡的用戶訪問到,比如上例中,如果需要同ip段的同事訪問3306的端口管理服務器,便可以設置成他可以訪問到的那個ip地址。

'Destination Host'表示服務器端的ip地址,可以是服務器本地的地址localhost或者是服務器可以訪問到的一個ip地址,例如服務器同機房的某個ip,或者服務器可以連接公網的話,可以是公網上某台服務器的ip地址。

二、Remote
'Local'用於把服務器上的服務映射到本機的某端口上,'Remote'則相反,它將本地的端口映射到服務器的某一端口上,在服務器上訪問該端口,實際是訪問本機的服務。與此類似的是:防火牆的端口映射模式,與之不同的是:前者是在公司防火牆上開了一個洞,是合法的操作;后者是鑿了一個洞,是非法操作,無須經過網管人員。后者可能為公司企業帶來泄密的風險,尤其是做了到ssh端口映射,就可從外部服務器上就可訪問公司整個內部網絡!

'Source Host'為遠程服務器的地址,默認為'localhost',當然也可以那台主機上的其它ip地址,為了安全起見,ssh僅會偵聽回環(127.0.0.1)地址,即使填寫的是公網地址也是如此。'Listen Port'為指定在公網服上偵聽的端口,注意不要與其它已經在用的端口相沖突。'Destination Host'這個為公司內網地址,這個地址的端口上運行着你想訪問的服務,當然也可以只映射到本機上的某一端口。

因此這種方式也叫做"反向代理"。

示例:讓公網上的服務器訪問局域網里的某台機器的的服務

訪問另外一台機器(192.168.18.100)上的web服務



通過ssh登錄內部一台機器的ssh,這樣遠程的機器就能控制內部這台機器了,如果能登錄成功的話,還可以從它跳轉登錄到局域網其它機器。



在linux下,可以借助於' autossh '這款工具來實現。


三、Dynamic
即socket代理,用於給本地開啟代理端口,只要程序支持Socket連接方式,如瀏覽器通過本端口代理上網。

在彈出的'Forwarding Rule',按照如圖所示進行配置,Type選擇"Dynamic(SOCK54/5";'Listen Port'默認使用1080,這里也可以按照自己需求進進行端口設置;Descripting根據自己需要進行描述,可以留空,配置后點擊OK會彈出一個對話框,點擊是的話會對當前會話進行保存,以后每次連接此ssh會話,本地socket代理會自動打開。



添加完成后在'Forwarding Rules'對話框可以看到的一行轉發配置,確保Status的狀態是"Open",如果顯示的是"Failed"可能是1080這個本地端口已經被占用了,可以嘗試修改代理端口為其它端口進行重新設置。

至此,代理服務器設置已經完成了,下面將進行瀏覽器客戶端的配置。

打開Internet選項,點擊“連接”選項卡,在這個頁面點擊“局域網設置”,彈出“局域網(LAN)設置”。

在代理服務器下面勾選“為LAN使用代理服務器”,地址和端口全部留空,點擊“高級”,進入“代理服務器設置”端口。在套接字一行,代理服務器地址寫"localhost",端口寫"1080",然后依次點擊確定,回到瀏覽器頁面就可以通過代理進行上網了。可以訪問  http://www.ip138.com/  來看一下出來的ip地址是否有變化。

如果想給本地其它電腦做代理,可以給其它電腦做類似設置,但是地址需要寫和對方進行通信的內網ip地址而不是socket了。這個方法主要針對那些你不能打開的網頁,比如公司在出口路由上對影響工作的網站或應用進行了屏避,或逃過公司做你上網記錄的收集(交換機端口鏡像),這個方法就非常好用了,其實我經常用后者來對我的隱私做最大的保護。

除了為本地的機器開啟上網瀏覽服務外,還可以用來解決文章前面所提及的直接登錄外部機房里只有私有ip的機器,這樣你就不用先登錄有公網ip的機器,然后在那台機器里用ssh再登錄內網機器了。操作方法如下:
host_a:你在公司的pc,裝有xshell
host_b:外網服務器,其上有公網ip和私網ip
host_c:外網服務器,其上僅有私網ip

這里要知道:host_b與host_c它們是位於機房中的局域網內,它們之間的通信只能通過私網進行,數據包不會出公網。且host_a與'host_b,host_c'的私網是完全獨立的,沒有任何關系。


現在從host_a使用xshell連接host_b,並開啟Socket代理,端口為'1080',建立好連接后,打開'cmd'容器,使用指令'netstat -na|more'看下應該有'1080'端口處於偵聽(LISTENING)狀態。同是不要斷開連接,因為host_a發住host_c的數據信息都要從這個端口到host_b,然后再由host_b轉發至host_c。


建立到host_c的ssh連接,寫好host_c的私網ip地址(不是host_b的),用戶名及密碼,做好后先不要連接(實際也連接不上),在設置好其代理后才可繼續連接。


在'Connection'->'Proxy Server'頁中,如果沒有添加host_b的代理名稱及信息話,點擊'Browse...'按紐。


添加一個已經建立起連接的名稱,這里為'nhk3','host'一般為'127.0.0.1'的地址(如果有公司內有專用的代理機的話,則填入那台機器的ip地址),端口為剛才使用的端口。




選擇適用的'Proxy Server'為'nhk3',確定后即可開始連接。要終端窗口里會打印出通過'Proxy'連接的信息:
Connecting to proxy server(127.0.0.1:1080)...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Fri Apr 19 15:41:06 2013 from 192.168.x.x

這里的'192.168.x.x'即是'host_b'的私網ip。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM