nps 是一款輕量級、高性能、功能強大的內網穿透代理服務器。
目前支持 tcp、udp 流量轉發,可支持任何 tcp、udp 上層協議(訪問內網網站、本地支付接口調試、ssh 訪問、遠程桌面,內網 dns 解析等等……),此外還支持內網 http 代理、內網 socks5 代理、p2p 等,并帶有功能強大的 web 管理端。
功能
協議支持全面,兼容幾乎所有常用協議,例如 tcp、udp、http(s)、socks5、p2p、http 代理...
全平臺兼容(linux、windows、macos、群輝等),支持一鍵安裝為系統服務
https 集成,支持將后端代理和 web 服務轉成 https,同時支持多證書
操作簡單,只需簡單的配置即可在 web ui 上完成其余操作
展示信息全面,流量、系統信息、即時帶寬、客戶端版本等
擴展功能強大,該有的都有了(緩存、壓縮、加密、流量限制、帶寬限制、端口復用等等)
域名解析具備自定義 header、404 頁面配置、host 修改、站點保護、URL 路由、泛解析等功能
快速開始
安裝
https://github.com/ehang-io/nps/releases
下載對應的系統版本即可,服務端和客戶端是單獨的
服務端啟動
下載完服務器壓縮包后,解壓,然后進入解壓后的文件夾
執行安裝命令
對于 linux|darwin
sudo ./nps install
對于 windows,管理員身份運行 cmd,進入安裝目錄
nps.exe install
默認端口
nps 默認配置文件使用了 80,443,8080,8024 端口
啟動
對于 linux|darwin
sudo nps start
對于 windows,管理員身份運行 cmd,進入程序目錄
nps.exe start
安裝后 windows 配置文件位于 C:\Program Files\nps
,linux 和 darwin 位于/etc/nps
如果發現沒有啟動成功,可以查看日志(Windows 日志文件位于當前運行目錄下,linux 和 darwin 位于/var/log/nps.log
)
訪問服務端 ip:web 服務端口(默認為 8080)
使用用戶名和密碼登陸(默認 admin/123,正式使用一定要更改)
客戶端連接
點擊 web 管理中客戶端前的+號,復制啟動命令
執行啟動命令,linux 直接執行即可,windows 將./npc
換成 npc.exe
用 cmd 執行 如果需要注冊到系統服務可查看注冊到系統服務
https://ehang-io.github.io/nps/#/use?id=注冊到系統服務
配置
客戶端連接后,在 web 中配置對應穿透服務即可
可以查看使用示例
使用示例
統一準備工作(必做)
開啟服務端,假設公網服務器 ip 為 1.1.1.1
,配置文件中bridge_port
為 8024,配置文件中web_port
為 8080
內網客戶端運行(windows 使用 cmd 運行加.exe)
./npc -server=1.1.1.1:8024 -vkey=客戶端的密鑰
注意:
運行服務端后,請確保能從客戶端設備上正常訪問配置文件中所配置的bridge_port
端口,telnet,netcat 這類的來檢查
域名解析
適用范圍:
小程序開發、微信公眾號開發、產品演示
注意:
域名解析模式為 http 反向代理,不是 dns 服務器,在 web 上能夠輕松靈活配置
假設場景:
有一個域名 proxy.com
,有一臺公網機器 ip 為 1.1.1.1
兩個內網開發站點 127.0.0.1:81
,127.0.0.1:82
想通過(http|https://)a.proxy.com
訪問127.0.0.1:81
,通過(http|https://)b.proxy.com
訪問127.0.0.1:82
使用步驟:
將*.proxy.com
解析到公網服務器 1.1.1.1
點擊剛才創建的客戶端的域名管理,添加兩條規則規則:
域名:a.proxy.com
,內網目標:127.0.0.1:81
,
域名:b.proxy.com
,內網目標:127.0.0.1:82
現在訪問(http|https://)a.proxy.com
,b.proxy.com
即可成功
tcp 隧道
適用范圍:
ssh、遠程桌面等 tcp 連接場景
假設場景:
想通過訪問公網服務器 1.1.1.1 的 8001 端口,連接內網機器 10.1.50.101
的 22 端口,實現 ssh 連接
使用步驟:
在剛才創建的客戶端隧道管理中添加一條 tcp 隧道,填寫監聽的端口(8001)、內網目標 ip 和目標端口(10.1.50.101:22
),保存。
訪問公網服務器 ip(1.1.1.1),填寫的監聽端口(8001),相當于訪問內網 ip(10.1.50.101):目標端口(22),例如:ssh -p 8001 root@1.1.1.1
udp 隧道
適用范圍:
內網 dns 解析等 udp 連接場景
假設場景:
內網有一臺 dns(10.1.50.102:53
),在非內網環境下想使用該 dns,公網服務器為 1.1.1.1
使用步驟:
在剛才創建的客戶端的隧道管理中添加一條 udp 隧道,填寫監聽的端口(53)、內網目標 ip 和目標端口(10.1.50.102:53
),保存。
修改需要使用的 dns 地址為 1.1.1.1,則相當于使用 10.1.50.102
作為 dns 服務器
socks5 代理
適用范圍:
在外網環境下如同使用 vpn 一樣訪問內網設備或者資源
假設場景:
想將公網服務器 1.1.1.1 的 8003 端口作為 socks5 代理,達到訪問內網任意設備或者資源的效果
使用步驟:
在剛才創建的客戶端隧道管理中添加一條 socks5 代理,填寫監聽的端口(8003),保存。
在外網環境的本機配置 socks5 代理(例如使用 proxifier 進行全局代理),ip 為公網服務器 ip(1.1.1.1),端口為填寫的監聽端口(8003),即可暢享內網了
注意:
經過 socks5 代理,當收到 socks5 數據包時 socket 已經是 accept 狀態。表現是掃描端口全 open,建立連接后短時間關閉。若想同內網表現一致,建議遠程連接一臺設備。
http 正向代理
適用范圍:
在外網環境下使用 http 正向代理訪問內網站點
假設場景:
想將公網服務器 1.1.1.1 的 8004 端口作為 http 代理,訪問內網網站
使用步驟:
在剛才創建的客戶端隧道管理中添加一條 http 代理,填寫監聽的端口(8004),保存。
在外網環境的本機配置 http 代理,ip 為公網服務器 ip(1.1.1.1),端口為填寫的監聽端口(8004),即可訪問了
注意:
對于私密代理與 p2p,除了統一配置的客戶端和服務端,還需要一個客戶端作為訪問端提供一個端口來訪問
私密代理
適用范圍:
無需占用多余的端口、安全性要求較高可以防止其他人連接的 tcp 服務,例如 ssh。
假設場景:
無需新增多的端口實現訪問內網服務器 10.1.50.2
的 22 端口
使用步驟:
在剛才創建的客戶端中添加一條私密代理,并設置唯一密鑰 secrettest 和內網目標 10.1.50.2:22
./npc -server=1.1.1.1:8024 -vkey=vkey -type=tcp -password=secrettest -local_type=secret
如需指定本地端口可加參數-local_port=xx
,默認為2000
注意:
password 為 web 管理上添加的唯一密鑰,具體命令可查看 web 管理上的命令提示
假設 10.1.50.2 用戶名為 root,現在執行ssh -p 2000 root@127.0.0.1
即可訪問 ssh
p2p 服務
適用范圍:
大流量傳輸場景,流量不經過公網服務器,但是由于 p2p 穿透和 nat 類型關系較大,不保證 100%成功,支持大部分 nat 類型。nat 類型檢測
假設場景:
想通過訪問使用端機器(訪問端,也就是本機)的 2000 端口---->訪問到內網機器 10.2.50.2 的 22 端口
使用步驟:
在nps.conf中設置p2p_ip(nps 服務器 ip)和p2p_port
(nps 服務器 udp 端口)
注:若 p2p_port 設置為 6000,請在防火墻開放 6000~6002(額外添加 2 個端口)udp 端口
在剛才剛才創建的客戶端中添加一條 p2p 代理,并設置唯一密鑰 p2pssh
在使用端機器(本機)執行命令
./npc -server=1.1.1.1:8024 -vkey=123 -password=p2pssh -target=10.2.50.2:22
如需指定本地端口可加參數-local_port=xx
,默認為2000
注意:
password 為 web 管理上添加的唯一密鑰,具體命令可查看 web 管理上的命令提示
假設內網機器為 10.2.50.2 的 ssh 用戶名為 root,現在在本機上執行ssh -p 2000 root@127.0.0.1
即可訪問機器 2 的 ssh,如果是網站在瀏覽器訪問 127.0.0.1:2000 端口即可。
開源地址
https://github.com/ehang-io/nps
該文章在 2024/5/7 11:29:49 編輯過