某天,小睿同學突然發現校內圖書館的查閱系統居然只有連接上校園網才能訪問(簡稱:內網訪問)。小睿平常好動,於是乎決定利用自己所學的技術,做一款基於微信小程序的“校園圖書查閱”系統。
但是我校的“校園圖書查詢”系統的服務器肯定在內網中,我該如何才能讓外界也能訪問呢?這對於才疏學淺的小睿同學可真是一個困難的問題。幸運的是,小睿得到了王學長的指點——內網穿透。
什麼是內網穿透呢?
兩臺計算機都處於不同的局域網之中,外網與內網的計算機節點需要連接通信,那麼就需要藉助內網穿透技術來解決這個問題,也叫NAT穿透。簡單來說,就是讓外網可以訪問你本地的應用。
爲了能夠在校園外以及未連接校園網,也可以使用“圖書查詢系統”,我決定使用“frp”來實現這一目的。
frp是一個可用於內部網穿透的高級反向代理應用程序,支持tcp,udp協議,爲http和https應用協議提供了額外的能力,並且嘗試性支持了點對點穿透。
下圖是我繪製的一個採用frp實現內網穿透的原理圖,以方便大家區分frp的客戶端和服務端以及工作流程。
我們先在ESC服務器上配置frp的服務端,然後找一臺可訪問局域網的設備,搭建web服務器,並且配置frp客服端。以達到實現廣域網任意pc訪問8080端口,frp服務端就可以把通過8081端口,將請求轉發給局域網內的給8082端口,8082端口再將響應通過8081、8080端口返回給PC機。其實就是一個請求轉發的過程。
配置frp服務端
1、我們先用SSH連接ECS服務器,根據自己操作系統及架構,從 Release 頁面(點擊閱讀原文)下載最新版本的程序。可以通過wget下載,也可以在自己的電腦上下載好後,通過FTP工具上傳。
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz
2、使用tar命令進行解壓
tar -zxvf 解壓下載的壓縮包
3、修改服務端的配置文件
vim frps.ini
[common]
#frp服務端與客戶端連接端口,frps和frpc必須一致
bind_port = 8081
#服務端外部提供的端口
vhost_http_port = 8080
# 儀表盤端口,只有設置了才能使用儀表盤(即後臺)
dashboard_port = 7500
# 儀表盤訪問的用戶名密碼,如果不設置,則默認都是 admin
dashboard_user = admin
dashboard_pwd = admin
然後鍵入ESC+wq+Enter,保存退出。
4、啓動服務端
./frps -c frps.ini
這裏有一個坑,我們斷開SSH連接後,frp的服務端也就停止了。我們可以使用nohup,這樣就可以保持frp的服務端可以保持正常運行。
nohup ./frps -c frps.ini &
配置frp客戶端
1、首頁搭建web服務器,我使用的是Nginx,這都大同小異。只要記得自己的Nginx端口就沒問題。
2、執行以下命令,下載以及下載frp。
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz
tar -zxvf 解壓下載的壓縮包
3、修改客戶端配置文件
vim frpc.ini [common]#服務端公網ip地址
server_addr = x.x.x.x
#與服務端通信端口
server_port = 8081
[web]
type = http
#本地Nginx服務端口
local_port = 8082
#公網ip綁定的域名
custom_domains = xxx.xxx.com
然後鍵入ESC+wq+Enter,保存退出。
4、啓動客戶端
nohup ./frpc -c frpc.ini &
小結
這樣我們即使與局域網有十萬八千里,也可以通過公網ip綁定的域名,輕鬆的訪問到局域網的應用服務。
疑難雜症
有的同學在配置frp中可能會遇到以下困難:
Q:爲什麼我的端口都配置的正確,但是在外網訪問不到了?
A:同學,你可以檢查下你的防火牆是否放行以及端口是否被佔用,還有局域網下是否可聯網。此外,如果你使用的是阿里雲默認關閉的端口,那麼你需要登錄阿里雲,在安全組規則中添加你使用的端口。
因爲阿里雲備案快,我一般使用的都是阿里雲的ESC服務器 + 域名。近期阿里雲的“學生在家實踐計劃”活動,凡是大學生即可領取6個月的ESC服務器。
一些善於折騰的、物聯網的同學,也可以把家中廢棄的電腦、手機變成一臺小型的服務器、雲盤,使用frp工具實現內網穿透。這樣一臺廢棄電腦、手機也可以變廢爲寶啦~
我是 郭小睿同學
歡迎加我微信
備註 姓名+技術or方向+學習or公司
拉你進學習交流羣
對你有幫助,點個贊!
讓更多人受益~