PortWay的背景
我相信做過客戶遠程支持的同學都有這么痛苦的經歷:為了去查詢一個問題,你得讓客戶的IT開個QQ遠程控制給你,然后再通過他的QQ遠程連接到服務器的遠程桌面,然后再在服務器的遠程桌面上打開各種管理工具,然后就痛苦看著糊成一團的畫面,小心謹慎的敲下鍵盤上的每個字母并等著這些字母在客戶服務器的屏幕上逐個顯示出來…………
我們也用過動態域名+路由器端口映射,但是這個風險太高,稍有常識的客戶網管直接會斃掉這種支持方案。后來也讓客戶網管在服務器上裝TeamViewer,但是要么運行得慢,要么TeamViewer直接傲嬌的告訴你,“疑似商業使用”,給你來個使用5分鐘就斷線。最后用得最多的還是QQ遠程,但是效率極低。
最重要的是,當你需要開發定位BUG時,你會發現最有效率的方式還是帶上完整的開發環境去到客戶現場,接入客戶的網絡,然后打開開發工具直接調試。而對于實施來講,如果你需要幫客戶調整一個配置,你可能需要遠程搞上大半天才能搞定,如果碰上客戶太忙的話,你會發現時間完全是被浪費掉的。
PortWay能做什么
說了那么多,PortWay到底能做什么?
PortWay我寫的一款內網穿透工具,用GoLang開發,主要是就為了讓實施或是開發像在客戶現場一樣去完成自己的工作,PortWay支持以下兩種方式的內網穿透:
一. Http穿透
在局域網內(例如公司網絡)運行一個Agent工具,就可以將你局域網內的http網站(例如oa/crm之類的)發布到公網,讓大家可以在互聯網上方便的訪問,不需要做路由器配置,更不需要做防火墻及動態域名配置。
二. TCP穿透
在局域網內(例如公司網絡)運行一個Agent工具,然后帶到電腦在其他可訪問Internet的地方(比如我們裝逼常去的星巴克)運行一個Proxy,然后你就可以像在局域網里面一樣,隨意訪問你的數據庫/OA/ERP等等(只要是基于TCP網絡端口的服務)。這個過程不需要vpn,更不需要遠程桌面。
PortWay如何使用
1. PortWay下載
鏈接:https://http://pan.baidu.com/s/1xRT_qPgc4BS5GyZc3vogFg
提取碼:z84y
之前只放了windows版本,現在更新了win/linux/mac的版本,如果只需要在windows上使用,下載portway-win就可以,如果需要在linux/mac上使用,可以下載portway-full。比如:你如你使用NAS,可以下載portway-full,然后找到linux版本的agent,放到你的NAS上啟動時運行就可以:)
2. 使用說明
PortWay是綠色軟件,不需要安裝,也沒有組件依賴,下載解壓后就可以運行。
2.1 Agent使用說明
agent?是在你需要訪問的局域網內部運行。對于實施或是開發人員來說,通常會把agent運行在客戶內網的機器上。agent?相當于在局域網內網安裝了一個轉發器,這個轉發器有自己的編號,我們稱之為 “tunnel”?或是 “信道標識”。我們可以看看 tunnel?的配置,我們打開agent目錄下的app.ini,這個就是agent的配置
在agent的app.ini中,有兩個配置節點
2.1.1 setting節點設置中央服務器及tunnel
center_host=gw.isuf.cn? ?
center_port=80
這個是我提供給大家的中央服務端,我安裝在朋友的服務器的80端上,大家可以先免費使用,都不要告訴他:),也就是說這里的配置大家沒有必要去修改。
tunnel=<you_tunnel_tag>
這個是用來設置 tunnel?標識,你也可以不設置,不設置的話,等于號右側留空就行,啟動時系統會自動分配標識,就像是TeamViewer的ID一樣。
自定義的tunnel標識請全部小寫,不然Http轉發可能會失敗
需要注意的是,由于我是免費提供中央服務端給大家使用,所以我沒有校驗tunnel,只認為是最后連接的有效。也就是說,如果你先打開了agent,如果別人的tunnel跟你的tunnel一樣,那么你會被系統踢下線。
2.1.2 httpmap節點設置需要發布到公網的內網網站
[httpmap]
k3=127.0.0.1:80
我們來看看這個簡單的配置,這里啟用了一個http發布,發布了前綴為k3的站點,指向局域網的127.0.0.1:80。
如果我們的tunnel標識為 rogertong,那么,啟動agent后,你就可以通過 http://k3.rogertong.iotube.cn?來訪問你的局域網網站了,iotube.cn是固定的,這是我提供出來的域名。
我們做個簡單的演示,比如我的局域網內有一臺IIS服務器 http://192.168.151.58,我想用rogertong做為我的信道標識,那么我這可以樣發布:
這里要注意:自定義的tunnel標識請全部小寫,不然Http轉發可能會失敗
[setting]
center_host=gw.isuf.cn
center_port=80
tunnel=rogertong
[httpmap]
k3=192.168.151.58:80??
我們可以看到映射已經生效了,已經可以順利的通過公網訪問內網的IIS服務
2.1 Proxy使用說明
我們在前面說過,如果你在局域網內啟動了Agent,那么就可以Proxy訪問局域網絡內部的所有TCP服務,Proxy會通過中央服務端告訴Agent需要訪問哪些服務,所以Proxy的配置稍微復雜一些,我們看一個完整的proxy所對應的配置文件app.ini
[setting]
center_host=gw.isuf.cn
center_port=80
tunnel=rogertong
[tcpmap]
radmin=true
mssql=true
[radmin]
server_ip=127.0.0.1
server_port=4899
local_ip=0.0.0.0
local_port=48990
[mssql]
server_ip=127.0.0.1
server_port=1433
local_ip=0.0.0.0
local_port=1433?
setting節點部份的配置跟agent一樣,這里的tunnel用于指明當前的proxy使用哪個tunnel信道,服務端依據信道會將proxy與agent配對。
tcpmap節點,用于確認哪些端口映射配置生效,必須有對應的端口映射配置節點
上面示例中的 radmin / mssql?則是端口映射配置節點,表示需要在proxy所在的機器上,建立鏡像端口,這個鏡像端口收發的所有數據,都會經指定的信道,傳輸給agent所在局域對應的服務器,看圖示:
例如:?我運行agent局域網內有臺服務器192.168.151.88開啟了windows遠程桌面服務(tcp3389),同時也有一個MSSQL數據庫服務在這臺服務器運行,agent的tunnel標識為rogertong。我想連192.168.151.88的遠程桌面,那么我的proxy可以這樣配置
[setting]
center_host=gw.isuf.cn
center_port=80
tunnel=rogertong
[tcpmap]
rdp=true
mssql=true[rdp]
server_ip=192.168.151.88
server_port=3389
local_ip=0.0.0.0
local_port=33890?
[mssql]
server_ip=192.168.151.88
server_port=1433
local_ip=0.0.0.0
local_port=1433? ?
提示:由于上面的配置中需要用到本機的1433端口,所以如果你需要連接到客戶192.168.151.58的MSSQL數據庫的話,記得關閉自己機器上的MSSQL數據庫服務
那么,我在自己的機器上運行proxy后,我就可以在自己的機器上通過連 127.0.0.1:33890,就可以訪問到 192.168.151.88?的遠程桌面了
此時如果需要連接192.168.151.58的MSSQL數據庫,也可以像訪問本機數據庫一樣訪問: