最早開始接觸內網穿透,是在調試微信支付的時候,微信需要回調一個公網地址,經過一番搜索,我選用了 natapp,優點是有免費隧道,缺點是公網域名和端口是隨機分配的,偶爾調試用下還可以。
後來,因爲要映射公司和家裏 Windows 遠程連接的端口,natapp 那種隨機域名和端口的服務,不滿足我的需求。這時 frp 出現在可選列表裏,只需要一臺公網服務器,就可以搭建,通過服務端和客戶端的配置,把內網服務映射到公網上,缺點是每次增加或修改映射,都需要更改客戶端配置文件,然後重啓服務。
現在疫情期間,大家都在家辦公,在沒有 VPN 的情況下,前後端互交及其不方便,一會要映射一個 A 項目的接口,一會 B 項目也要映射,來回的更改客戶端配置文件及其不方便,然後無意中發現的今天的主角 nps:
nps 的優勢在於有一套官方提供的web管理端。
前置條件:
- **必選:**公網 IP 服務器(阿里雲、騰訊雲等)
- 可選:域名
服務端安裝
服務端需要安裝在具有公網 IP 的服務器上**。**在 github 上可以看到 nps 的所有版本。這麼多版本,可能你也分不清楚要下哪個版本,沒關係,官方維護的有docker 鏡像。
1. 拉取 nps 鏡像
# 鏡像地址:https://hub.docker.com/r/ffdfgdfg/nps
$ docker pull ffdfgdfg/nps:0.26.2
# docker 加速器
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
$ docker pull index.docker.io/ffdfgdfg/nps:0.26.5
2. 下載服務端配置文件
在啓動鏡像之前,需要把服務端相關的配置文件下載下來,用於 docker 鏡像的掛載,我這裏用了個笨方法,把整個倉庫克隆到了電腦上。
然後把 conf 文件夾的文件上傳到服務器的 /dudiao/nps/conf 目錄下,最終結構如下:
3. 啓動 nps 鏡像
服務端默認需要佔用 _80,8024,8080 _端口(可通過配置文件 nps.conf 更改),請確保這些端口不被使用。
$ docker run -d --name nps --net=host \
-v /dudiao/nps/conf:/conf ffdfgdfg/nps:0.26.2
$ docker run -d --name nps-0265 --net=host \
-v /dudiao/nps/conf:/conf index.docker.io/ffdfgdfg/nps:0.26.5
訪問 http://ip:8080 可以登錄到 nps web管理端,用戶名密碼默認是:admin/123,至此 nps 的服務端安裝完成。
客戶端安裝
客戶端一般安裝在內網環境,這裏使用 Windows10 64位系統作爲演示。
1. 下載合適的客戶端
下載 windows_amd64_client.tar.gz,解壓。
2. 在web管理端添加客戶端
左側菜單 客戶端-新增,如下:
[圖片上傳失敗…(image-6d9f22-1587280656468)]
其中,_是否允許客戶端以配置文件模式連接 _選擇 no,即客戶端以無配置文件模式運行,這樣做的好處在於:
各種配置只需在服務端web管理界面中完成,客戶端除運行一條命令外無需任何其他設置
3. 註冊服務(開機啓動,守護進程)
使用 nps 自帶的命令,很方便的註冊到服務中,使用管理員身份運行cmd**。**
D:\windows_amd64_client> npc.exe install -server=1.2.3.4:8024 -vkey=dudiao#2020
其中 _1.2.3.4 爲 nps 服務端 IP,-vkey _爲第二步中填寫的 客戶端驗證祕鑰。
4. 啓動
D:\windows_amd64_client>
# 啓動
npc.exe start
# 停止
npc.exe stop
# 卸載
npc.exe uninstall
註冊到服務後,日誌文件 windows 位於當前目錄下,linux和darwin位於/var/log/npc.log。
與Nginx同時使用
有時候我們還需要在雲服務器上運行 nginx 來保證靜態文件緩存等,但nginx 的 80 端口會和 nps 衝突,需要將服務端 nps 的配置文件 _nps.conf _中
http_proxy_port 設置爲非 80 端口,並在 nginx 中配置代理,例如http_proxy_port 爲 81 時:
server {
listen 80;
server_name *.aml.plus;
location / {
proxy_set_header Host $http_host;
# 需要寫成內網地址
proxy_pass http://172.21.0.6:81;
}
}
官方文檔中 proxy_pass 寫的是 _127.0.0.1,_但我測試的時候 nginx 報拒絕連接的錯誤,換成內網地址就好使了。
本次僅進行了功能性測試,性能方面並沒有和 frp 進行對比,不過 nps 功能強大的 web管理端深得我心。
我的最新文章會先發到公衆號【讀釣的YY】上,歡迎關注!