介紹個好用的內網穿透工具:nps

最早開始接觸內網穿透,是在調試微信支付的時候,微信需要回調一個公網地址,經過一番搜索,我選用了 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 鏡像的掛載,我這裏用了個笨方法,把整個倉庫克隆到了電腦上。

https://github.com/ehang-io/nps

然後把 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】上,歡迎關注!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章