最早開始接觸內(nèi)網(wǎng)穿透裳涛,是在調(diào)試微信支付的時(shí)候诀拭,微信需要回調(diào)一個(gè)公網(wǎng)地址迁筛,經(jīng)過(guò)一番搜索,我選用了 natapp耕挨,優(yōu)點(diǎn)是有免費(fèi)隧道细卧,缺點(diǎn)是公網(wǎng)域名和端口是隨機(jī)分配的,偶爾調(diào)試用下還可以筒占。
后來(lái)贪庙,因?yàn)橐成涔竞图依?Windows 遠(yuǎn)程連接的端口,natapp 那種隨機(jī)域名和端口的服務(wù)赋铝,不滿足我的需求插勤。這時(shí) frp 出現(xiàn)在可選列表里,只需要一臺(tái)公網(wǎng)服務(wù)器革骨,就可以搭建,通過(guò)服務(wù)端和客戶端的配置析恋,把內(nèi)網(wǎng)服務(wù)映射到公網(wǎng)上良哲,缺點(diǎn)是每次增加或修改映射,都需要更改客戶端配置文件助隧,然后重啟服務(wù)筑凫。
現(xiàn)在疫情期間,大家都在家辦公并村,在沒有 VPN 的情況下巍实,前后端互交及其不方便,一會(huì)要映射一個(gè) A 項(xiàng)目的接口哩牍,一會(huì) B 項(xiàng)目也要映射棚潦,來(lái)回的更改客戶端配置文件及其不方便,然后無(wú)意中發(fā)現(xiàn)的今天的主角 nps:
nps 的優(yōu)勢(shì)在于有一套官方提供的web管理端膝昆。
前置條件:
- 必選:公網(wǎng) IP 服務(wù)器(阿里云丸边、騰訊云等)
- 可選:域名
服務(wù)端安裝
服務(wù)端需要安裝在具有公網(wǎng) IP 的服務(wù)器上叠必。在 github 上可以看到 nps 的所有版本。這么多版本妹窖,可能你也分不清楚要下哪個(gè)版本纬朝,沒關(guān)系,官方維護(hù)的有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. 下載服務(wù)端配置文件
在啟動(dòng)鏡像之前共苛,需要把服務(wù)端相關(guān)的配置文件下載下來(lái),用于 docker 鏡像的掛載蜓萄,我這里用了個(gè)笨方法俄讹,把整個(gè)倉(cāng)庫(kù)克隆到了電腦上。
然后把 conf 文件夾的文件上傳到服務(wù)器的 /dudiao/nps/conf 目錄下绕德,最終結(jié)構(gòu)如下:
3. 啟動(dòng) nps 鏡像
服務(wù)端默認(rèn)需要占用 _80患膛,8024,8080 _端口(可通過(guò)配置文件 nps.conf 更改)耻蛇,請(qǐng)確保這些端口不被使用踪蹬。
$ 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
訪問(wèn) http://ip:8080 可以登錄到 nps web管理端,用戶名密碼默認(rèn)是:admin/123臣咖,至此 nps 的服務(wù)端安裝完成跃捣。
客戶端安裝
客戶端一般安裝在內(nèi)網(wǎng)環(huán)境,這里使用 Windows10 64位系統(tǒng)作為演示夺蛇。
1. 下載合適的客戶端
下載 windows_amd64_client.tar.gz疚漆,解壓。
2. 在web管理端添加客戶端
左側(cè)菜單 客戶端-新增刁赦,如下:
[圖片上傳失敗...(image-6d9f22-1587280656468)]
其中娶聘,_是否允許客戶端以配置文件模式連接 _選擇 no,即客戶端以無(wú)配置文件模式運(yùn)行甚脉,這樣做的好處在于:
各種配置只需在服務(wù)端web管理界面中完成丸升,客戶端除運(yùn)行一條命令外無(wú)需任何其他設(shè)置
3. 注冊(cè)服務(wù)(開機(jī)啟動(dòng),守護(hù)進(jìn)程)
使用 nps 自帶的命令牺氨,很方便的注冊(cè)到服務(wù)中狡耻,使用管理員身份運(yùn)行cmd。
D:\windows_amd64_client> npc.exe install -server=1.2.3.4:8024 -vkey=dudiao#2020
其中 _1.2.3.4 為 nps 服務(wù)端 IP猴凹,-vkey _為第二步中填寫的 客戶端驗(yàn)證秘鑰夷狰。
4. 啟動(dòng)
D:\windows_amd64_client>
# 啟動(dòng)
npc.exe start
# 停止
npc.exe stop
# 卸載
npc.exe uninstall
注冊(cè)到服務(wù)后,日志文件 windows 位于當(dāng)前目錄下郊霎,linux和darwin位于/var/log/npc.log沼头。
與Nginx同時(shí)使用
有時(shí)候我們還需要在云服務(wù)器上運(yùn)行 nginx 來(lái)保證靜態(tài)文件緩存等,但nginx 的 80 端口會(huì)和 nps 沖突歹篓,需要將服務(wù)端 nps 的配置文件 _nps.conf _中
http_proxy_port 設(shè)置為非 80 端口瘫证,并在 nginx 中配置代理揉阎,例如http_proxy_port 為 81 時(shí):
server {
listen 80;
server_name *.aml.plus;
location / {
proxy_set_header Host $http_host;
# 需要寫成內(nèi)網(wǎng)地址
proxy_pass http://172.21.0.6:81;
}
}
官方文檔中 proxy_pass 寫的是 127.0.0.1,但我測(cè)試的時(shí)候 nginx 報(bào)拒絕連接的錯(cuò)誤背捌,換成內(nèi)網(wǎng)地址就好使了毙籽。
本次僅進(jìn)行了功能性測(cè)試,性能方面并沒有和 frp 進(jìn)行對(duì)比毡庆,不過(guò) nps 功能強(qiáng)大的 web管理端深得我心坑赡。