nps是一款輕量級、高性能、功能強大的內網穿透代理服務器。目前支持tcp、udp流量轉發,可支持任何tcp、udp上層協議,還支持內網http代理、內網socks5代理、p2p等


nps

  Gitter

nps是一款輕量級、高性能、功能強大的內網穿透代理服務器。目前支持tcp、udp流量轉發,可支持任何tcp、udp上層協議(訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面,內網dns解析等等……),此外還支持內網http代理、內網socks5代理、p2p等,並帶有功能強大的web管理端。

背景

image

  1. 做微信公眾號開發、小程序開發等----> 域名代理模式

  2. 想在外網通過ssh連接內網的機器,做雲服務器到內網服務器端口的映射,----> tcp代理模式

  3. 在非內網環境下使用內網dns,或者需要通過udp訪問內網機器等----> udp代理模式

  4. 在外網使用HTTP代理訪問內網站點----> http代理模式

  5. 搭建一個內網穿透ss,在外網如同使用內網vpn一樣訪問內網資源或者設備----> socks5代理模式

目錄

安裝

releases安裝

releases

下載對應的系統版本即可,服務端和客戶端是單獨的

源碼安裝

  • 安裝源碼

go get -u github.com/cnlh/nps...

  • 編譯

go build cmd/nps/nps.go

go build cmd/npc/npc.go

使用示例

統一准備工作(必做)

  • 開啟服務端,假設公網服務器ip為1.1.1.1,配置文件中bridge_port為8284,配置文件中web_port為8080
  • 訪問1.1.1.1:8080
  • 在客戶端管理中創建一個客戶端,記錄下驗證密鑰
  • 內網客戶端運行(windows使用cmd運行加.exe)
./npc -server=1.1.1.1:8284 -vkey=客戶端的密鑰

域名解析

適用范圍: 小程序開發、微信公眾號開發、產品演示

假設場景:

  • 有一個域名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
  • 點擊剛才創建的客戶端的域名管理,添加兩條規則規則:1、域名:a.proxy.com,內網目標:127.0.0.1:81,2、域名:b.proxy.com,內網目標:127.0.0.1:82

現在訪問(http|https://)a.proxy.comb.proxy.com即可成功

https: 如需使用https請進行相關配置,詳見 使用https

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),即可暢享內網了

http正向代理

適用范圍: 在外網環境下使用http正向代理訪問內網站點

假設場景: 想將公網服務器1.1.1.1的8004端口作為http代理,訪問內網網站

使用步驟

  • 在剛才創建的客戶端隧道管理中添加一條http代理,填寫監聽的端口(8004),保存。
  • 在外網環境的本機配置http代理,ip為公網服務器ip(1.1.1.1),端口為填寫的監聽端口(8004),即可訪問了

私密代理

適用范圍: 無需占用多余的端口、安全性要求較高可以防止其他人連接的tcp服務,例如ssh。

假設場景: 無需新增多的端口實現訪問內網服務器10.1.50.2的22端口

使用步驟

  • 在剛才創建的客戶端中添加一條私密代理,並設置唯一密鑰secrettest和內網目標10.1.50.2:22
  • 在需要連接ssh的機器上以執行命令
./npc -server=1.1.1.1:8284 -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@1.1.1.1即可訪問ssh

p2p服務

適用范圍: 大流量傳輸場景,流量不經過公網服務器,但是由於p2p穿透和nat類型關系較大,不保證100%成功,支持大部分nat類型。nat類型檢測

假設場景: 內網1機器ip為10.1.50.2 內網2機器2 ip為10.2.50.2

想通過訪問內網1機器1的2000端口---->訪問到內網2機器3 10.2.50.3的22端口

使用步驟

  • nps.conf中設置p2p_ip(nps服務器ip)和p2p_port(nps服務器udp端口)
  • 在剛才剛才創建的客戶端中添加一條p2p代理,並設置唯一密鑰p2pssh
  • 在機器1執行命令
./npc -server=1.1.1.1:8284 -vkey=123 -password=p2pssh -target=10.2.50.3:22

如需指定本地端口可加參數-local_port=xx,默認為2000

注意: password為web管理上添加的唯一密鑰,具體命令可查看web管理上的命令提示

假設機器3用戶名為root,現在在機器1上執行ssh -p 2000 root@127.0.0.1即可訪問機器2的ssh

web管理

image

介紹

可在網頁上配置和管理各個tcp、udp隧道、內網站點代理,http、https解析等,功能強大,操作方便。

提示:使用web模式時,服務端執行文件必須在項目根目錄,否則無法正確加載配置文件

啟動

服務端測試

 ./nps test

如有錯誤請及時修改配置文件,無錯誤可繼續進行下去

服務端啟動

 ./nps start

如果無需daemon運行或者打開后無法正常訪問web管理,去掉start查看日志運行即可

web管理

進入web界面,公網ip:web界面端口(默認8080),密碼默認為123

進入web管理界面,有詳細的說明

服務端配置文件重載

如果是daemon啟動

 ./nps reload

說明: 僅支持部分配置重載,例如allow_user_login auth_crypt_key auth_key web_username web_password 等,未來將支持更多

服務端停止或重啟

如果是daemon啟動

 ./nps stop|restart

服務端配置文件

  • /conf/nps.conf
名稱 含義
web_port web管理端口
web_password web界面管理密碼
web_username web界面管理賬號
bridge_port 服務端客戶端通信端口
https_proxy_port 域名代理https代理監聽端口
http_proxy_port 域名代理http代理監聽端口
auth_key web api密鑰
bridge_type 客戶端與服務端連接方式kcp或tcp
public_vkey 客戶端以配置文件模式啟動時的密鑰,設置為空表示關閉客戶端配置文件連接模式
ip_limit 是否限制ip訪問,true或false或忽略
flow_store_interval 服務端流量數據持久化間隔,單位分鍾,忽略表示不持久化
log_level 日志輸出級別
auth_crypt_key 獲取服務端authKey時的aes加密密鑰,16位
p2p_ip 服務端Ip,使用p2p模式必填
p2p_port p2p模式開啟的udp端口

使用https

方式一: 類似於nginx實現https的處理

在配置文件中將https_proxy_port設置為443或者其他你想配置的端口,和在web中對應域名編輯中設置對應的證書路徑,將https_just_proxy設置為false,然后就和http代理一樣了

此外: 可以在nps.conf中設置一個默認的https配置,當遇到未在web中設置https證書的域名解析時,將自動使用默認證書,另還有一種情況就是對於某些請求的clienthello不攜帶sni擴展信息,nps也將自動使用默認證書

方式二: 在內網對應服務器上設置https

nps.conf中將https_just_proxy設置為true,並且打開https_proxy_port端口,然后nps將直接轉發https請求到內網服務器上,由內網服務器進行https處理

與nginx配合

有時候我們還需要在雲服務器上運行nginx來保證靜態文件緩存等,本代理可和nginx配合使用,在配置文件中將httpProxyPort設置為非80端口,並在nginx中配置代理,例如httpProxyPort為8024時

server {
 listen 80;  server_name *.proxy.com;  location / {  proxy_set_header Host $http_host;  proxy_pass http://127.0.0.1:8024;  } }

如需使用https也可在nginx監聽443端口並配置ssl,並將本代理的httpsProxyPort設置為空關閉https即可,例如httpProxyPort為8024時

server {
 listen 443;  server_name *.proxy.com;  ssl on;  ssl_certificate certificate.crt;  ssl_certificate_key private.key;  ssl_session_timeout 5m;  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  ssl_prefer_server_ciphers on;  location / {  proxy_set_header Host $http_host;  proxy_pass http://127.0.0.1:8024;  } }

關閉代理

如需關閉http代理可在配置文件中將http_proxy_port設置為空,如需關閉https代理可在配置文件中將https_proxy_port設置為空。

將nps安裝到系統

如果需要長期並且方便的運行nps服務端,可將nps安裝到操作系統中,可執行命令

(./nps|nps.exe) install

安裝成功后,對於linux,darwin,將會把配置文件和靜態文件放置於/etc/nps/,並將可執行文件nps復制到/usr/bin/nps或者/usr/local/bin/nps,安裝成功后可在任何位置執行

nps test|start|stop|restart|status

對於windows系統,將會把配置文件和靜態文件放置於C:\Program Files\nps,安裝成功后可將可執行文件nps.exe復制到任何位置執行

nps.exe test|start|stop|restart|status

流量數據持久化

服務端支持將流量數據持久化,默認情況下是關閉的,如果有需求可以設置nps.conf中的flow_store_interval參數,單位為分鍾

注意: nps不會持久化通過公鑰連接的客戶端

系統信息顯示

nps服務端支持在web上顯示和統計服務器的相關信息,但默認一些統計圖表是關閉的,如需開啟請在nps.conf中設置system_info_display=true

自定義客戶端連接密鑰

web上可以自定義客戶端連接的密鑰,但是必須具有唯一性

關閉公鑰訪問

可以將nps.conf中的public_vkey設置為空或者刪除

關閉web管理

可以將nps.conf中的web_port設置為空或者刪除

服務端多用戶登陸

如果將nps.conf中的allow_user_login設置為true,服務端web將支持多用戶登陸,登陸用戶名為user,默認密碼為每個客戶端的驗證密鑰,登陸后可以進入客戶端編輯修改web登陸的用戶名和密碼,默認該功能是關閉的。

用戶注冊功能

nps服務端支持用戶注冊功能,可將nps.conf中的allow_user_register設置為true,開啟后登陸頁將會有有注冊功能,

監聽指定ip

nps支持每個隧道監聽不同的服務端端口,在nps.conf中設置allow_multi_ip=true后,可在web中控制,或者npc配置文件中(可忽略,默認為0.0.0.0)

server_ip=xxx

代理到服務端本地

在使用nps監聽80或者443端口時,默認是將所有的請求都會轉發到內網上,但有時候我們的nps服務器的上一些服務也需要使用這兩個端口,nps提供類似於nginx proxy_pass 的功能,支持將代理到服務器本地,該功能支持域名解析,tcp、udp隧道,默認關閉。

即: 假設在nps的vps服務器上有一個服務使用5000端口,這時候nps占用了80端口和443,我們想能使用一個域名通過http(s)訪問到5000的服務。

使用方式: 在nps.conf中設置allow_local_proxy=true,然后在web上設置想轉發的隧道或者域名然后選擇轉發到本地選項即可成功。

客戶端

客戶端啟動

無配置文件模式

此模式的各種配置在服務端web管理中完成,客戶端除運行一條命令外無需任何其他設置

 ./npc -server=ip:port -vkey=web界面中顯示的密鑰

配置文件模式

此模式使用nps的公鑰或者客戶端私鑰驗證,各種配置在客戶端完成,同時服務端web也可以進行管理

 ./npc -config=npc配置文件路徑

配置文件說明

示例配置文件

全局配置
[common] server_addr=1.1.1.1:8284 conn_type=tcp vkey=123 username=111 password=222 compress=true crypt=true rate_limit=10000 flow_limit=100 remark=test max_conn=10
含義
server_addr 服務端ip:port
conn_type 與服務端通信模式(tcp或kcp)
vkey 服務端配置文件中的密鑰(非web)
username socks5或http(s)密碼保護用戶名(可忽略)
password socks5或http(s)密碼保護密碼(可忽略)
compress 是否壓縮傳輸(true或false或忽略)
crypt 是否加密傳輸(true或false或忽略)
rate_limit 速度限制,可忽略
flow_limit 流量限制,可忽略
remark 客戶端備注,可忽略
max_conn 最大連接數,可忽略
域名代理
[common] server_addr=1.1.1.1:8284 vkey=123 [web1] host=a.proxy.com target_addr=127.0.0.1:8080,127.0.0.1:8082 host_change=www.proxy.com header_set_proxy=nps
含義
web1 備注
host 域名(http
target_addr 內網目標,負載均衡時多個目標,逗號隔開
host_change 請求host修改
header_xxx 請求header修改或添加,header_proxy表示添加header proxy:nps
tcp隧道模式
[common] server_addr=1.1.1.1:8284 vkey=123 [tcp] mode=tcp target_addr=127.0.0.1:8080 server_port=9001
含義
mode tcp
server_port 在服務端的代理端口
tartget_addr 內網目標
udp隧道模式
[common] server_addr=1.1.1.1:8284 vkey=123 [udp] mode=udp target_addr=127.0.0.1:8080 server_port=9002
含義
mode udp
server_port 在服務端的代理端口
target_addr 內網目標
http代理模式
[common] server_addr=1.1.1.1:8284 vkey=123 [http] mode=httpProxy server_port=9003
含義
mode httpProxy
server_port 在服務端的代理端口
socks5代理模式
[common] server_addr=1.1.1.1:8284 vkey=123 [socks5] mode=socks5 server_port=9004
含義
mode socks5
server_port 在服務端的代理端口
私密代理模式
[common] server_addr=1.1.1.1:8284 vkey=123 [secret_ssh] mode=secret password=ssh2 target_addr=10.1.50.2:22
含義
mode secret
password 唯一密鑰
target_addr 內網目標
p2p代理模式
[common] server_addr=1.1.1.1:8284 vkey=123 [p2p_ssh] mode=p2p password=ssh2 target_addr=10.1.50.2:22
含義
mode p2p
password 唯一密鑰
target_addr 內網目標
文件訪問模式

利用nps提供一個公網可訪問的本地文件服務,此模式僅客戶端使用配置文件模式方可啟動

[common] server_addr=1.1.1.1:8284 vkey=123 [file] mode=file server_port=9100 local_path=/tmp/ strip_pre=/web/
含義
mode file
server_port 服務端開啟的端口
local_path 本地文件目錄
strip_pre 前綴

對於strip_pre,訪問公網ip:9100/web/相當於訪問/tmp/目錄

斷線重連

[common] auto_reconnection=true

nat類型檢測

 ./npc nat

如果p2p雙方都是Symmetric Nat,肯定不能成功,其他組合都有較大成功率。

狀態檢查

 ./npc status -config=npc配置文件路徑

重載配置文件

 ./npc restart -config=npc配置文件路徑

通過代理連接nps

有時候運行npc的內網機器無法直接訪問外網,此時可以可以通過socks5代理連接nps

對於配置文件方式啟動,設置

[common] proxy_url=socks5://111:222@127.0.0.1:8024

對於無配置文件模式,加上參數

-proxy=socks5://111:222@127.0.0.1:8024

支持socks5和http兩種模式

即socks5://username:password@ip:port

http://username:password@ip:port

群暉支持

可在releases中下載spk群暉套件,例如npc_x64-6.1_0.19.0-1.spk

相關功能

緩存支持

對於web站點來說,一些靜態文件往往消耗更大的流量,且在內網穿透中,靜態文件還需到客戶端獲取一次,這將導致更大的流量消耗。nps在域名解析代理中支持對靜態文件進行緩存。

即假設一個站點有a.css,nps將只需從npc客戶端讀取一次該文件,然后把該文件的內容放在內存中,下一次將不再對npc客戶端進行請求而直接返回內存中的對應內容。該功能默認是關閉的,如需開啟請在nps.conf中設置http_cache=true,並設置http_cache_length(緩存文件的個數,消耗內存,不宜過大,0表示不限制個數)

數據壓縮支持

由於是內網穿透,內網客戶端與服務端之間的隧道存在大量的數據交換,為節省流量,加快傳輸速度,由此本程序支持SNNAPY形式的壓縮。

  • 所有模式均支持數據壓縮
  • 在web管理或客戶端配置文件中設置

加密傳輸

如果公司內網防火牆對外網訪問進行了流量識別與屏蔽,例如禁止了ssh協議等,通過設置 配置文件,將服務端與客戶端之間的通信內容加密傳輸,將會有效防止流量被攔截。

  • nps使用tls加密,所以一定要保留conf目錄下的密鑰文件,同時也可以自行生成
  • 在web管理或客戶端配置文件中設置

站點保護

域名代理模式所有客戶端共用一個http服務端口,在知道域名后任何人都可訪問,一些開發或者測試環境需要保密,所以可以設置用戶名和密碼,nps將通過 Http Basic Auth 來保護,訪問時需要輸入正確的用戶名和密碼。

  • 在web管理或客戶端配置文件中設置

host修改

由於內網站點需要的host可能與公網域名不一致,域名代理支持host修改功能,即修改request的header中的host字段。

使用方法:在web管理中設置

自定義header

支持對header進行新增或者修改,以配合服務的需要

404頁面配置

支持域名解析模式的自定義404頁面,修改/web/static/page/error.html中內容即可,暫不支持靜態文件等內容

流量限制

支持客戶端級流量限制,當該客戶端入口流量與出口流量達到設定的總量后會拒絕服務 ,域名代理會返回404頁面,其他代理會拒絕連接,使用該功能需要在nps.conf中設置allow_flow_limit,默認是關閉的。

帶寬限制

支持客戶端級帶寬限制,帶寬計算方式為入口和出口總和,權重均衡,使用該功能需要在nps.conf中設置allow_rate_limit,默認是關閉的。

負載均衡

本代理支持域名解析模式和tcp代理的負載均衡,在web域名添加或者編輯中內網目標分行填寫多個目標即可實現輪訓級別的負載均衡

端口白名單

為了防止服務端上的端口被濫用,可在nps.conf中配置allow_ports限制可開啟的端口,忽略或者不填表示端口不受限制,格式:

allow_ports=9001-9009,10001,11000-12000

端口范圍映射

當客戶端以配置文件的方式啟動時,可以將本地的端口進行范圍映射,僅支持tcp和udp模式,例如:

[tcp] mode=tcp server_port=9001-9009,10001,11000-12000 target_port=8001-8009,10002,13000-14000

逗號分隔,可單個或者范圍,注意上下端口的對應關系,無法一一對應將不能成功

端口范圍映射到其他機器

[tcp] mode=tcp server_port=9001-9009,10001,11000-12000 target_port=8001-8009,10002,13000-14000 target_ip=10.1.50.2

填寫target_ip后則表示映射的該地址機器的端口,忽略則便是映射本地127.0.0.1,僅范圍映射時有效

守護進程

本代理支持守護進程,使用示例如下,服務端客戶端所有模式通用,支持linux,darwin,windows。

./(nps|npc) start|stop|restart|status 若有其他參數可加其他參數
(nps|npc).exe start|stop|restart|status 若有其他參數可加其他參數

KCP協議支持

KCP 是一個快速可靠協議,能以比 TCP浪費10%-20%的帶寬的代價,換取平均延遲降低 30%-40%,在弱網環境下對性能能有一定的提升。可在nps.conf中修改bridge_type為kcp ,設置后本代理將開啟udp端口(bridge_port

注意:當服務端為kcp時,客戶端連接時也需要使用相同配置,無配置文件模式加上參數type=kcp,配置文件模式在配置文件中設置tp=kcp

域名泛解析

支持域名泛解析,例如將host設置為*.proxy.com,a.proxy.com、b.proxy.com等都將解析到同一目標,在web管理中或客戶端配置文件中將host設置為此格式即可。

URL路由

本代理支持根據URL將同一域名轉發到不同的內網服務器,可在web中或客戶端配置文件中設置,此參數也可忽略,例如在客戶端配置文件中

[web1] host=a.proxy.com target_addr=127.0.0.1:7001 location=/test [web2] host=a.proxy.com target_addr=127.0.0.1:7002 location=/static

對於a.proxy.com/test將轉發到web1,對於a.proxy.com/static將轉發到web2

限制ip訪問

如果將一些危險性高的端口例如ssh端口暴露在公網上,可能會帶來一些風險,本代理支持限制ip訪問。

使用方法: 在配置文件nps.conf中設置ip_limit=true,設置后僅通過注冊的ip方可訪問。

ip注冊:

方式一: 在需要訪問的機器上,運行客戶端

./npc register -server=ip:port -vkey=公鑰或客戶端密鑰 time=2

time為有效小時數,例如time=2,在當前時間后的兩小時內,本機公網ip都可以訪問nps代理.

方式二: 此外nps的web登陸也可提供驗證的功能,成功登陸nps web admin后將自動為登陸的ip注冊兩小時的允許訪問權限。

注意: 本機公網ip並不是一成不變的,請自行注意有效期的設置,同時同一網絡下,多人也可能是在公用同一個公網ip。

客戶端最大連接數

為防止惡意大量長連接,影響服務端程序的穩定性,可以在web或客戶端配置文件中為每個客戶端設置最大連接數。該功能針對socks5http正向代理域名代理tcp代理udp代理私密代理生效,使用該功能需要在nps.conf中設置allow_connection_num_limit=true,默認是關閉的。

客戶端最大隧道數限制

nps支持對客戶端的隧道數量進行限制,該功能默認是關閉的,如需開啟,請在nps.conf中設置allow_tunnel_num_limit=true

端口復用

在一些嚴格的網絡環境中,對端口的個數等限制較大,nps支持強大端口復用功能。將bridge_port、 http_proxy_port、 https_proxy_port 、web_port都設置為同一端口,也能正常使用。

  • 使用時將需要復用的端口設置為與bridge_port一致即可,將自動識別。
  • 如需將web管理的端口也復用,需要配置web_host也就是一個二級域名以便區分

多路復用

nps主要通信默認基於多路復用,無需開啟。

環境變量渲染

npc支持環境變量渲染以適應在某些特殊場景下的要求。

在無配置文件啟動模式下: 設置環境變量

export NPC_SERVER_ADDR=1.1.1.1:8284
export NPC_SERVER_VKEY=xxxxx

直接執行./npc即可運行

在配置文件啟動模式下:

[common] server_addr={{.NPC_SERVER_ADDR}} conn_type=tcp vkey={{.NPC_SERVER_VKEY}} auto_reconnection=true [web] host={{.NPC_WEB_HOST}} target_addr={{.NPC_WEB_TARGET}}

在配置文件中填入相應的環境變量名稱,npc將自動進行渲染配置文件替換環境變量

健康檢查

當客戶端以配置文件模式啟動時,支持多節點的健康檢查。配置示例如下

[health_check_test1] health_check_timeout=1 health_check_max_failed=3 health_check_interval=1 health_http_url=/ health_check_type=http health_check_target=127.0.0.1:8083,127.0.0.1:8082  [health_check_test2] health_check_timeout=1 health_check_max_failed=3 health_check_interval=1 health_check_type=tcp health_check_target=127.0.0.1:8083,127.0.0.1:8082

health關鍵詞必須在開頭存在

第一種是http模式,也就是以get的方式請求目標+url,返回狀態碼為200表示成功

第一種是tcp模式,也就是以tcp的方式與目標建立連接,能成功建立連接表示成功

如果失敗次數超過health_check_max_failed,nps則會移除該npc下的所有該目標,如果失敗后目標重新上線,nps將自動將目標重新加入。

含義
health_check_timeout 健康檢查超時時間
health_check_max_failed 健康檢查允許失敗次數
health_check_interval 健康檢查間隔
health_check_type 健康檢查類型
health_check_target 健康檢查目標,多個以逗號(,)分隔
health_check_type 健康檢查類型
health_http_url 健康檢查url,僅http模式適用

日志輸出

日志輸出級別

對於npc:

-log_level=0~7 -log_path=npc.log
LevelEmergency->0  LevelAlert->1
 LevelCritical->2 LevelError->3  LevelWarning->4 LevelNotice->5  LevelInformational->6 LevelDebug->7

默認為全輸出,級別為0到7

對於nps:

nps.conf中設置相關配置即可

相關說明

獲取用戶真實ip

在域名代理模式中,可以通過request請求 header 中的 X-Forwarded-For 和 X-Real-IP 來獲取用戶真實 IP。

本代理前會在每一個http(s)請求中添加了這兩個 header。

熱更新支持

對於絕大多數配置,在web管理中的修改將實時使用,無需重啟客戶端或者服務端

客戶端地址顯示

在web管理中將顯示客戶端的連接地址

流量統計

可統計顯示每個代理使用的流量,由於壓縮和加密等原因,會和實際環境中的略有差異

當前客戶端帶寬

可統計每個客戶端當前的帶寬,可能和實際有一定差異,僅供參考。

客戶端與服務端版本對比

為了程序正常運行,客戶端與服務端的核心版本必須一致,否則將導致客戶端無法成功連接致服務端。

webAPI

webAPI驗證說明

  • 采用auth_key的驗證方式
  • 在提交的每個請求后面附帶兩個參數,auth_key 和timestamp
auth_key的生成方式為:md5(配置文件中的auth_key+當前時間戳)
timestamp為當前時間戳
curl --request POST \
 --url http://127.0.0.1:8080/client/list \  --data 'auth_key=2a0000d9229e7dbcf79dd0f5e04bb084&timestamp=1553045344&start=0&limit=10'

注意: 為保證安全,時間戳的有效范圍為20秒內,所以每次提交請求必須重新生成。

獲取服務端時間

由於服務端與api請求的客戶端時間差異不能太大,所以提供了一個可以獲取服務端時間的接口

POST /auth/gettime

獲取服務端authKey

如果想獲取authKey,服務端提供獲取authKey的接口

POST /auth/getauthkey

將返回加密后的authKey,采用aes cbc加密,請使用與服務端配置文件中cryptKey相同的密鑰進行解密

注意: nps配置文件中auth_crypt_key需為16位

  • 解密密鑰長度128
  • 偏移量與密鑰相同
  • 補碼方式pkcs5padding
  • 解密串編碼方式 十六進制

詳細文檔

  • 此文檔近期可能更新較慢,建議自行抓包

為方便第三方擴展,在web模式下可利用webAPI進行相關操作,詳情見 webAPI文檔

貢獻

歡迎參與到制作docker、圖標、文檔翻譯等工作

  • 如果遇到bug可以直接提交至dev分支
  • 使用遇到問題可以通過issues反饋
  • 項目處於開發階段,還有很多待完善的地方,如果可以貢獻代碼,請提交 PR 至 dev 分支
  • 如果有新的功能特性反饋,可以通過issues或者qq群反饋

捐助

如果您覺得nps對你有幫助,歡迎給予我們一定捐助,也是幫助nps更好的發展。

支付寶

image

微信

image

交流群

二維碼.jpeg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM