用開源frp高性能反向代理軟體實現內網穿透方案
做IT運維網絡的小夥伴都知道,要實現對外提供服務必須有公網IP才行。一般區域網訪問網際網路都是動態IP,要實現對外提供服務需要動態域名解析並在區域網主機做埠轉發。
那為什麼要做內網穿透呢?其實做內網穿透的應用場景是蠻多的,好處也是蠻多的,特別是對做IT運維的朋友,難免遇到大晚上下班了,公司項目或什麼的有點問題需要遠程維護。當然有時在外面需要查下家裡電腦資料,或想把閒置電腦做個WEB網站應用,甚至可以通過家裡監控照看老人、小孩和你家的寵物呢。
有關這方面的軟體網上不是沒有,隨便下載的涉及安全問題敢用嗎?就算是商業的軟體、關鍵是花錢,還不是100%放心吧。開源的項目,我們懂技術的小夥伴就不用說了,源碼在手在自己伺服器上放心、關鍵是穩定好用不花錢哦!
好,我們能看下frp是怎麼實現的吧。Frp可以支持http、https、tcp、udp等協議類型,還能根據域名做路由轉發。簡單的話,frp其實就是一個反向代理應用,是一個數據傳輸的中轉站,即網際網路frp伺服器內網設備。 我們來看下frp的架構:
通過上面的介紹,我們知道frp軟體有兩個端,一個在公網的服務端、一個在內網的客戶端。源碼和二進位包在github上都可以下載到。作者測試用的是下面的版本:
我們再進去看下二進位包有什麼文件:
很簡單,分為兩部分:frps開頭是服務端、frpc開頭的是客戶端,並包括各自的配置樣例文件。另外,systemd是啟動關閉服務用的。
首先,我們來配置一下服務端。
1、我們把frpc.ini 複製一份到etc下,cp frpc.ini /etc/frp/frpc.ini 打開編輯配置文件 vim /etc/frp/frpc.ini 加上自己需要的配置(如不清楚,可以參考官網的完整配置示例frpc_full.ini),如下圖所示:
官網默認只綁定了一個7000埠提供服務。這裡,我配置了管理面板,可以通過web界面訪問查看各服務狀態的,打馬賽克的是密碼哈。
2、進入剛上面目錄的systemd 把 frps.service 複製到 /usr/lib/systemd/system 此目錄,
還有把frps程序複製到 /usr/bin下面。這樣就不用手動通過配置文件啟動應用了。
我們看下frps.service服務的內容吧。
紅色箭頭的這行是通過指定配置文件啟動應用的。下面一行應用服務中斷自動重啟的屬性設置。好了,我們可以啟動服務端了systemctl start frps.service 。再執行systemctl status frps.service 如下服務啟動成功,埠處於監聽狀態,需要開機啟動運行systemctl enable frps.service。
記得系統防火牆和雲安全策略要放行相應的埠的哦,不然是無法連接的。
剛上面我們是配置了web管理面板的,現在我們登錄web界面看下。
這是overview總覽圖,啟用的服務埠各狀態都比較清楚。點開proxies再看:
還沒有任何數據,我們還沒配置客戶端嘛。配置好後客戶端就會上線的。
服務端配置好了,我們再來配置客戶端
剛才上面下載的軟體是linux端的,frp支持多平臺終端。Windows做客戶端當然下windows版本了。
我們把軟體解壓放到c盤frp目錄下:
編輯frpc.ini ,我們來做一個web測試一下。加入如下配置項:
到這一步客戶端就可以通過命令行啟動了,常駐服務等下介紹哈,我們先啟動看一下。
是的,已經啟動成功。注意windows防火牆或什麼殺毒軟體的也要把相應程序和埠放行。
再看管理面板上的服務:
看到了吧,status 也處於online狀態了。好了,在本地啟動web伺服器並新建一個測試站點看看:
本地我用的是phpenv集成環境,監聽的是888埠,跟配置的埠一樣。服務端的http埠也是888,埠都可以自定義的。
打馬賽克的是我的真實域名,訪問效果達到了。但這裡要看一個cmd命令窗口,我們把frp加到系統服務,並開機啟動。這裡需要在github下載winsw開源軟體註冊windows系統服務的。下載好後把winsw.exe放在frp的同級目錄並且編寫一個xml配置文件,內容如下:
<service><id>frp</id> <name>frp這裡是服務的名稱</name> <description>這裡是服務的介紹,隨便寫</description> <executable>frpc</executable>這裡是運行的軟體名 <arguments>-c frpc.ini</arguments>這裡是運行的軟體配置文件 <onfailure action=」restart」 delay=」60 sec」/> <onfailure action=」restart」 delay=」120 sec」/> <logmode>reset</logmode></service>
然後以管理員啟動cmd命令窗口,cd到frp目錄,執行兩條命令winsw install和winsw start就行了。如果要卸載先執行winsw stop再執行winsw uninstall。
這樣就大功告成了,出門忘掉帶電腦沒關係,開心的去浪吧!有事可以遠程回家了。