實戰frp內網穿透內部主機也能對外服務 - 網管人
文章推薦指數: 80 %
圖1為本測試使用的架構圖,從圖中可以看出,在公網主機或雲端主機(frps with public IP address,FQDN為stock.ddnsking.com)上架設frps(frp Server), ...
疫情時代儲存難題怎解?快來聽專家說分明
熱門活動精彩回顧都在這
>技術專欄
行動網路
內網穿透
雲端
資安
可連入行動網路後端主機 提供http及https連線功能
實戰frp內網穿透 內部主機也能對外服務
2021-01-26
丁光立
frp程式能夠讓內網主機輕鬆地提供對外服務,只要在公網(雲端)主機上架設frps,就可以讓內部主機提供外網功能。
但內部主機直接放在公網上供人存取,可能會有安全上的疑慮,所以務必先做好資安相關部署再正式啟用。
行動網路已逐漸成為生活必需品,與固網線路相較,行動網路受限於IP數量限制、先天架構及價格考量,鮮少提供真實IP供用戶使用。
因此使用行動網路要架設網站相對困難。
本文將介紹如何在使用行動網路的狀況下,透過在雲端(公網)的Linux主機,從而連入行動網路後端的主機,進一步提供http及https的連線功能。
實作環境與測試架構
目前市面上可以做到內網穿透的工具很多,例如Ngrok、Localtunnel、花生殼等等。
廣義來說,其實SSHTunnel也算是一種內網穿透機制,這些工具各有其利弊。
在本文中採用的frp是使用Go語言開發的,它的全名是FastReverseProxy,顧名思義,它是一個快速的反向代理伺服器。
其設定方式相當簡單,功能也很強大。
除了內網穿透之外,也可以讓外部伺服器提供對外服務、Proxy、Socket5的部分功能,甚至也能加上簡單的帳號及密碼認證功能。
本次實作所使用的作業系統及軟體版本如下:
‧公網主機:Ubuntu14.04.6、frp_0.33.0
‧內部主機:Ubuntu20.04.1、frp_0.34.0、Apache2.4.41、OpenSSH_8.2p1
這裡會在公網主機上使用frps,在內部主機使用frpc,分別擔任Server及Client的角色。
圖1為本測試使用的架構圖,從圖中可以看出,在公網主機或雲端主機(frpswithpublicIPaddress,FQDN為stock.ddnsking.com)上架設frps(frpServer),在內部主機(10.100.32.34)則安裝frpc(frpClient)的軟體。
在兩者建立連線之後,外部使用者可以連接frps的特定Port,此時frps會將其封包轉發至frpc的指定Port。
圖1 測試架構圖。
如此一來,即使是原先無法直接提供對外服務的主機,也能簡單地提供對外服務的功能。
frps相關設定說明
原則上,應該要手動下載frps的原始程式,並自行編輯其設定檔,再啟動frps以達到預期的功能。
但網路上已有人提供簡易的安裝方式,其採取對話視窗的方式進行安裝及設定,因此在此階段先使用此方式進行安裝及設定。
首先,將安裝檔下載回來:
wgethttps://raw.githubusercontent.com/MvsCode/frps-onekey/master/install-frps.sh-O./install-frps.sh
接著,賦予其可執行的屬性。
然後,執行安裝程式:
chmod700./install-frps.sh./install-frps.shinstall
接下來,安裝程式會逐步詢問相關資訊,基本上都是使用預設值即可(直接按下〔Enter〕鍵):
Pleaseselectfrpsdownloadurl:[1].aliyun[2].github(default)Enteryourchoice(1,2orexit.default[github]):
此處為用來建立連線的Port,請設定為能被外部網路連線的Port,在此使用預設值5443:
Pleaseinputfrpsbind_port[1-65535](DefaultServerPort:5443):frpsbind_port:5443
由於本次示範公網主機的80Port有對外服務,因此使用8000Port避免衝突:
Pleaseinputfrpsvhost_http_port[1-65535](Default:80):8000frpsvhost_http_port:8000
接著要設定httpsPort,這裡使用預設的443:
Pleaseinputfrpsvhost_https_port[1-65535](Default:443):443frpsvhost_https_port:443
frps其實有提供儀表板介面,可以簡單地從網頁看出目前的使用情形,在此使用預設的6443Port。
Pleaseinputfrpsdashboard_port[1-65535](Default:6443):frpsdashboard_port:6443
必須設定儀表板介面的帳號,使用預設的admin即可:
Pleaseinputfrpsdashboard_user(Default:admin):frpsdashboard_user:admin
接著要設定網頁介面的密碼,系統會自動產生,如果有其他需求亦可自行設定,在此設定為liveisnevereasy:
Pleaseinputfrpsdashboard_pwd(Default:tklzEU4G):liveisnevereasyfrpsdashboard_pwd:liveisnevereasy
然後是在建立建線時使用的Token,可以想像為建立連線時的密碼,可避免frps讓外人任意建立連線,在此使用系統自動產生的數值即可:
Pleaseinputfrpstoken(Default:kdC5ePAaBDa656gD):frpstoken:kdC5ePAaBDa656gD
緊接著是最重要的部分,若有對外https連線的需求,建議輸入FQDN,若僅有http的需求,輸入IP即可:
Pleaseinputfrpssubdomain_host(Default:59.105.191.159):stock.ddnsking.comfrpssubdomain_host:stock.ddnsking.com
隨後還有六個問題會詢問,包含每個連線可建立的連接數(MaxPoolcount)、Log等級及留存日、是否使用tcp_mux(tcpportservicemultiplexer)及kcp加速等。
若無特殊需求,建議使用預設值即可。
設定完成後,它會將之前的所有設定列表,若沒有問題就輸入任意鍵繼續安裝流程:
==========Checkyourinput=========YouServerIP :59.105.191.159Bindport :5443kcpsupport :truevhosthttpport :8000vhosthttpsport :443Dashboardport :6443Dashboarduser :adminDashboardpassword:liveisnevereasytoken :kdC5ePAaBDa656gDsubdomain_host :stock.ddnsking.comtcp_mux :trueMaxPoolcount :50Loglevel :infoLogmaxdays :3Logfile :enable=====================================Pressanykeytostart...orPressCtrl+ctocancel
安裝完成後,主程式及設定檔均會存放在「/usr/local/frps」目錄中,若後續需要手動調整frps的設定檔,必須進入此目錄,手動編輯frps.ini,並重新啟動frps。
想要執行frps時,只須在任意目錄執行「frpsstart」指令,就可以啟動其程式。
在程式啟動後,可以看一下目前的網路連線情形,如圖2所示,可使用「ss-antp」指令查看。
由圖2中可以看出,frps所Listen的Port包含443、8000、5443、6443以及6000。
圖2 查看frps建立的連線。
然後使用瀏覽器開啟「http://stock.ddnsking.com:6443」,其輸出如圖3所示。
可以發現,此儀表板有簡單的統計功能,並沒有管理功能。
不過,此儀表板能夠檢視網路的使用量,若為雲端主機的租用者,將可藉此調整其流量租約。
圖3 frps的儀表板介面。
frpc相關設定介紹
相較於frps有人寫好安裝Script,frpc則必須手動進行安裝及設定。
首先,切換至「/usr/local」目錄:
cd/usr/local/
接著,下載目前最新的0.34版:
wgethttps://github.com/fatedier/frp/releases/download/v0.34.0/frp_0.34.0_linux_amd64.tar.gz
frp最新的版本會放在「https://github.com/fatedier/frp/releases/」網址,可自行依需求下載。
接著,將之解壓縮,並重新命名為frpc,避免與frps主機混淆,然後切換至該目錄:
tarfrp_0.34.0_linux_amd64.tar.gzmvfrp_0.34.0_linux_amd64frpccdfrpc
下載的原始檔中,同時會有frps和frpc,在此僅使用frpc。
先做最簡單的設定,編輯frpc.ini,並設定其內容如下例。
server_addr部分,設定為frps主機的公網IP。
而token的部分,請與frps.ini相符。
在此設定將frps的6000Port轉發至本機(127.0.0.1)的22Port:
[common]server_addr=59.105.191.159server_port=5443token=kdC5ePAaBDa656gDlog_file=./frpc.log#debug,info,warn,errorlog_level=debuglog_max_days=3 [ssh]type=tcplocal_ip=127.0.0.1local_port=22remote_port=6000
frpc.ini設定好存檔後,接著執行frpc(請切換至該目錄):
./frpc-cfrpc.ini&
確認成功執行之後,從外地主機(139.175.16.2)使用SSHClient連線至stock.ddnsking.com的6000Port,就可建立連線至frpc的SSHPort。
然後,查看frpc目前建立的連線。
在此使用「ss-anpt|grepfrpc」指令,可以看出10.100.32.34(frpc)透過49620Port連線至59.105.191.159的5443Port,另外frpc從本機的43124Port連線至本機的22Port,如圖4所示。
圖4 觀察frpc連線情形。
接著,查看frps的連線情形,可以看出139.175.13.32(10.100.32.34的PublicIP),使用TCPPort49620連線至59.105.191.159的5443Port,以建立frp連線。
外部主機139.175.16.2連線至59.105.191.159的6000Port,如圖5所示。
從圖4和圖5可以發現,6000Port的連線需求會被包在5443Port的連線中,在frpc看不出建立6000Port的連線。
圖5 檢視frps連線情形。
HTTP封包的轉發
接著要進行設定,讓內部主機的網頁能夠被公網上的電腦存取。
回到frpc的主機,切換至「/usr/local/frpc」目錄,編輯frpc.ini,並新增以下內容:
[http]type=httplocal_port=80custom_domains=stock.ddnsking.com
在此補充說明一下,如果只有http的需求,在frps.ini的subdomain_host以及frpc.ini的custom_domains使用IP即可,無須使用FQDN。
除此之外,[http]裡的http可以自行命名,這裡只是單純以功能來命名便於識別。
在frpc.ini設定完成後,將frpc重啟:
kill-9`psax|grepfrpc.ini|grep-v grep|awk'{print$1}'`./frpc-cfrpc.ini&
接著開啟「http://stock.ddnsking.com:8000」,可以看到在10.100.32.34上架設的網頁,如圖6所示。
由於採取的是http連線,因此可以發現這是一個不安全的連線。
圖6 從外部網路開啟內部網頁伺服器。
直接把內部網頁放在公網上有點危險,所以在frpc.ini加上一點保護機制。
在的段落中,加上以下的設定值:
http_user=kltinghttp_pwd=showmethemoney
接著,別忘了重啟frpc。
再次開啟「http://stock.ddnsking.com:8000」,就能看到詢問帳號及密碼的視窗,如圖7所示。
圖7 為內部網頁加上簡單的保護機制。
HTTPS封包的轉發
可以使用frp讓內部的http網站提供https的服務。
既然是https的服務,當然要申請合法的憑證,因此在進行frpc設定之前,要先備妥合法的憑證。
由於提供對外連線的實際上是stock.ddnsking.com這一部主機,因此要申請憑證時也是以其名稱進行申請。
這裡以可以免費使用90天的zerossl作為示範,網址為「https://zerossl.com/」。
在簡單地註冊帳號之後,登入此網站,並點選「NewCertificate」申請新的憑證,如圖8所示。
圖8 申請新的憑證。
接著,在EnterDomains頁面中,輸入「stock.ddnsking.com」,如圖9所示,然後點選「NextStep→」。
圖9 新增Domain。
接下來選擇有效期限,由於本次僅是測試性質,使用預設的90天效期即可。
90天效期的憑證是免費的,頁面如圖10所示,點選「NextStep→」繼續。
圖10 選擇憑證的有效期限。
再來要選擇方案,同樣選擇預設的「Free」,並點選「NextStep→」,如圖11所示。
圖11 選擇適當的方案。
之後是最重要的部分,要讓zerossl驗證目前網站的身分,在此使用的是「HTTPFileUpload」的方式。
簡單來說,要在「http://stock.ddnsking.com/.well-knows/pki-validation/」目錄中,將zerossl提供的檔案(點選DownloadAuthFile連結就可以下載)放進去,並設定網頁伺服器和檔案的屬性,讓zerossl網站可以讀取這個檔案。
在準備完成後,點選「NextStep→」讓zerossl檢查檔案,如圖12所示。
圖12 設定網頁伺服器讓zerossl驗證身分。
可以用瀏覽器開啟圖12中的連結,確認可以讀取該檔案的內容後,再點選「VerifyDomain」,如圖13所示。
圖13 備援檔案供zerossl驗證身分。
在所有的步驟都完成後,終於可以下載憑證的相關檔案。
如圖14所示,點選「NextStep→」將之下載。
圖14 下載憑證壓縮檔。
把憑證的壓縮檔下載後上傳至frpc主機,將之解壓縮後放置到自訂的目錄內。
在此例中,放置在「/etc/apache2/sites-available/」目錄中。
最後編輯frpc.ini,並新增以下內容:
[https]type=httpslocal_port=80custom_domains=stock.ddnsking.complugin=https2httpplugin_local_addr=127.0.0.1:80plugin_host_header_rewrite=127.0.0.1plugin_header_X-From-Where=frpplugin_crt_path=/etc/apache2/sites-available/certificate.crtplugin_key_path=/etc/apache2/sites-available/private.key
在此做一簡單說明,[https]同樣只是名稱,可以自行命名。
本次使用frp的https2http模組(Plugin),將https的連線需求,轉換為http的連線需求,再轉發給frpc指定的http伺服器。
因為IP實際上是不一樣的,因此header的部分也必須改寫為127.0.0.1。
另外,也告知X-From-Where是由frp設定的。
事實上,header的部分不設定也可以正常運作,但為了有利於之後的維運及追蹤,建議還是設定為佳。
crt及key的部分,則是剛剛解壓縮的憑證壓縮檔,裡面包含了這兩個檔案。
接著開啟「https://stock.ddnsking.com」,就可以在瀏覽器看到鎖頭的圖示,如圖15所示,代表這是一個合法的憑證。
圖15 確認為合法的憑證。
點選這個鎖頭的圖示,就能夠檢視憑證的詳細資訊,如圖16所示,可以看到簽發者是ZeroSSL,有效期確實是90天無誤。
圖16 確認憑證的核發單位為ZeroSSL。
結語
frp使用非常簡單的方式,讓內網主機可以輕鬆地提供對外服務。
只要能夠在公網(雲端)主機上架設frps,就可以讓內部主機提供外網功能。
但內部主機若要直接放在公網上供人存取時,記得要做好資安的相關部署。
frps和frpc在連線時並沒有加密,可以在frps增加「use_encryption=true」設定,這個功能提供加密,會讓連線更安全。
此外,frp也提供stcp的連線方式,能夠讓對外服務更安全。
如果真的需要使用frp讓內部主機提供對外服務時,千萬記得要做好資安防護的工作。
<本文作者:丁光立,在ISP工作多年。
對於Cisco設備較熟悉,除此之外也研究Linux,這幾年慢慢把觸角伸到資安的領域,並會在自己的blog(http://tiserle.blogspot.com/)分享一些實務上的經驗和測試心得。
>
分享
您可能感興趣的文章
推薦文章
最新上架
more→
NetApp與思科攜手推出FlexPodXCS 將HCI延伸至混合雲
2022-03-18
混合辦公倚重商務通話 VoIP整合維繫客戶關係
2022-03-18
中國駭客早已虎視眈眈!奧義智慧挖掘金融機構攻擊事件內幕,呼籲即刻清查供應鏈避免情勢惡化
2022-03-17
解決急就章整合不全 數位優化造就彈性辦公
2022-03-17
電信營運商攜手VMware朝向科技巨頭轉型
2022-03-16
Temenos聯袂經濟學人智庫調查顯示:銀行改變客戶體驗並推動新的商業模式,人工智慧AI的應用日趨成熟
2022-03-16
達梭系統於3DEXPERIENCE平台推出生命週期評估解決方案
2022-03-16
混合辦公非一蹴可幾 循序漸進完備資安協作
2022-03-16
Supermicro邊緣方案 開拓電信、工業和智慧邊緣的新商機
2022-03-15
區塊鏈技術助力資料治理 安全信任增進存證合規
2022-03-15
人氣點閱
more→
「即服務」加速現代化轉型
2022-03-11
零售業迎向雲端新常態
2022-03-11
Pure推旗艦儲存 效能安全兼顧
2022-03-10
推跨雲服務架構 VMware力挺多雲
2022-03-11
元宇宙開啟虛擬世界大門 相關應用商機持續發酵
2022-02-10
活用vSphere內建工具 搞定大量虛機部署管理
2022-03-14
產業維新勿陷名詞之爭 用決策型組織強化競爭力
2022-02-11
以風險評估數值為基礎 逐步落實零信任控管
2022-02-10
玉山銀、北榮聯手SAS落實AI營運化
2022-03-14
郵件資安攻擊板塊位移 物流詐騙信隨疫情增25倍
2022-03-05
月刊雜誌
第194期
2022年3月
混合辦公倚重商務通話 VoIP整合維繫客戶關係
more→
精選影音
從負載均衡到雲原生應用服務與安全線上講堂
後疫情時代資安新常態:「零信任」架構網路安全性—Aruba,aHewlettPackard
Keynote:RebuildingaTrustedIoTEnvironmentinaPost-pandemicWorld—JohnMoor
more→
請輸入您的E-mail
追蹤我們Featrueus
...
確定
本站使用cookie及相關技術分析來改善使用者體驗。
瞭解更多
我知道了!
延伸文章資訊
- 1實戰frp內網穿透內部主機也能對外服務 - 網管人
圖1為本測試使用的架構圖,從圖中可以看出,在公網主機或雲端主機(frps with public IP address,FQDN為stock.ddnsking.com)上架設frps(frp S...
- 26-4-3 網域內規劃與架設(一)
6-4-3 網域內規劃與架設(二). 網路內網路規劃. 路由器規劃. 設定PC1~PC4. Default-router. Ip address. 設定Server0 http Server. ...
- 3【今網報報】如何架設伺服器(新手篇)
內網就像是社區,外網就是社區外的世界。 一組通訊埠 ( 簡稱 Port ):在真實IP 底下,可以有很多組 ...
- 4兩地辦公室的網路的內網如何互相連接(不使用VPN) - iT 邦幫忙
各位好:. 目前公司分成兩地的辦公室(非常遠,兩邊設備無法手動連接). 兩邊各自有一個實體IP,連到中華電信的網路,辦公室內各自架設內網網段分別是192.168.0.0 ...
- 5[架站教學]自架網站固定IP 網域規劃與設定,架站必學!
之前小編有教大家如何在自家電腦中自己架設網站,透過架站器的方式快速的在10分鐘內架設完成(架站教學參考點選我),不過大家學會了如何在自家電腦架設 ...