一、簡介
NPS是一款輕量級,高性能,強大功能的內網穿透代理服務器。目前支持TCP,UDP流量轉發,可支持任何TCP,UDP上層協議(訪問內網網站,本地支付接口調試,SSH訪問,遠程桌面,內網dns解析等等......),此外還支持內網http代理,內網socks5代理,p2p等,並帶有功能強大的網絡管理端。
源碼地址:https://github.com/cnlh/nps
發佈地址:https://github.com/cnlh/nps/releases
通常內網穿透工具都有服務端和客戶端,安裝要求如下:
- 服務端:需要安裝在一個有公網IP的服務器上,系統爲Linux/Windows/Mac均可。
- 客戶端:一般安裝在一個內網的VPS服務器或Windows/Mac/Linux電腦上使用。
二、服務端配置
1、修改配置文件
conf/nps.conf 如無特殊需求,無需修改。
#web管理端口
web_port
#web界面管理密碼
web_password
#服務端客戶端通信端口
bridge_port
#ssl certFile絕對路徑
https_default_cert_file
#ssl keyFile絕對路徑
https_default_key_file
#域名代理https代理監聽端口
https_proxy_port
#域名代理http代理監聽端口
http_proxy_port
#客戶端與服務端連接方式kcp或tcp
bridge_type
2、nps server啓動
nps.exe start
#重啓/停止服務端
nps.exe stop|restart
服務端運行nps test,無報錯後nps start啓動服務端。
然後打開地址http://ip:8080訪問管理界面,具體端口以自己修改的爲準,再使用密碼登錄進去,默認用戶名admin,默認密碼爲123。
3、nps server添加client
隨便填就行,client config文件用得到,socks5、http代理時候需要用到basic認證帳號密碼。
client狀態:
得到客戶端啓動命令:
./npc.exe -server=192.168.91.1:8024 -vkey=adminkey -type=tcp
192.168.91.1爲我服務器端的IP
三、客戶端配置
1、Linux系統
#啓動客戶端,比如服務端公網IP爲192.168.91.1,服務端配置文件中tcpport爲8024
./npc -server=192.168.91.1:8024 -vkey=客戶端的密鑰
2、Windows系統
#啓動客戶端,比如服務端公網IP爲192.168.91.1,服務端配置文件中tcpport爲8024
npc.exe -server=192.168.91.1:8024 -vkey=客戶端的密鑰
四、使用場景
關於使用場景,Github文檔寫的很清楚了,這裏大概的說下。
1、tcp隧道模式
適用:想在外網通過ssh連接內網的機器,做雲服務器到內網服務器端口的映射,或者做微信公衆號開發、小程序開發等。
詳細教程→點擊查看。
2、udp隧道模式
適用:在非內網環境下使用內網dns,或者需要通過udp訪問內網機器等。
詳細教程→點擊查看。
3、http代理模式
適用:在外網使用HTTP代理訪問內網站點。
詳細教程→點擊查看。
4、socks5代理模式
適用:搭建一個內網穿透55,在外網如同使用內網v皮n一樣訪問內網資源或者設備。
詳細教程→點擊查看。
五、使用測試
1、TCP隧道
兩種配置方式:server web配置和client config文件配置。其一即可。
(1)、server web配置
點擊tunnel創建隧道
增加tcp隧道:
隧道建立後,連接server ip 192.168.91.1的7000端口,即連接到內網192.168.91.149的3389端口。
(2)、client config文件配置
config文件在nps client啓動時加載即可。
[common]
server_addr=x.x.x.x:8024
conn_type=tcp
vkey=adminkey
auto_reconnection=true
crypt=true
compress=true
[tcp]
mode=tcp
target_addr=192.168.91.149:3389
server_port=7000
client 的config文件無法重載,故,只能啓動時候加載上所有配置,不建議用config文件方式進行隧道配置,不靈活,推薦使用server web配置方式。
2、UDP隧道
UDP隧道配置和TCP過程一樣,mode改成UDP即可。
3、socks5內網代理
兩種配置方式:server web配置和client config文件配置。其一即可。
(1)、server web配置
增加socks5:
代理設置完畢後,連接server ip 192.168.91.1的9000端口即可代理到內網中。
在nps server添加client時,設置了basic權限認證admink/admink,部分瀏覽器插件如SwitchyOmega不支持s5的basic認證,建議使用proxychains或者Proxifier進行代理。
proxychains配置:
socks5 x.x.x.x 9000 admink admink
(2)、client config文件配置
config文件在nps client啓動時加載即可。
[common]
server_addr=x.x.x.x:8024
conn_type=tcp
vkey=adminkey
auto_reconnection=true
basic_username=admink
basic_password=admink
crypt=true
compress=true
[socks5]
mode=socks5
server_port=9000
client 的config文件無法重載,故,只能啓動時候加載上所有配置,不建議用config文件方式進行socks5代理配置,不靈活,推薦使用server web配置方式。
4、http內網代理
http內網代理和socks5過程一樣,mode改成httpProxy即可。
5、內網文件訪問服務
內網文件訪問配置只能在client config中進行。
config文件在nps client啓動時加載即可。
[common]
server_addr=x.x.x.x:8024
conn_type=tcp
vkey=adminkey
auto_reconnection=true
basic_username=admink
basic_password=admink
crypt=truecompress=true
[file]mode=file
server_port=8888
local_path=C:\\
strip_pre=/fileservice/
local_path配置內網機要設置文件服務的目錄。
server_port配置一個server ip上的端口。
strip_pre配置訪問文件服務的path。
啓動
npc.exe -config=npc.conf
成功啓動:
瀏覽器中訪問:http://x.x.x.x:8888/fileservice/
目前只能做文件訪問,還做不到文件管理。
六、相關功能
1、數據壓縮支持
由於是內網穿透,內網客戶端與服務端之間的隧道存在大量的數據交換,爲節省流量,加快傳輸速度,由此本程序支持SNNAPY形式的壓縮。
- 所有模式均支持數據壓縮,可以與加密同時使用
- 開啓此功能會增加cpu和內存消耗
- 在server端加上參數-compress=snappy(或在web管理中設置)
2、加密傳輸
如果公司內網防火牆對外網訪問進行了流量識別與屏蔽,例如禁止了ssh協議等,通過設置配置文件,將服務端與客戶端之間的通信內容加密傳輸,將會有效防止流量被攔截。
- 開啓此功能會增加cpu和內存消耗
- 在server端加上參數-crypt=true(或在web管理中設置)
3、站點保護
域名代理模式所有客戶端共用一個http服務端口,在知道域名後任何人都可訪問,一些開發或者測試環境需要保密,所以可以設置用戶名和密碼,nps將通過Http Basic Auth來保護,訪問時需要輸入正確的用戶名和密碼。
- web管理中可配置
4、host修改
由於內網站點需要的host可能與公網域名不一致,域名代理支持host修改功能,即修改request的header中的host字段。
- 在web管理中設置
5、自定義header
支持對header進行新增或者修改,以配合服務的需要。
6、404頁面配置
支持域名解析模式的自定義404頁面,修改/web/static/page/error.html中內容即可,暫不支持靜態文件等內容。
7、流量限制
支持客戶端級流量限制,當該客戶端入口流量與出口流量達到設定的總量後會拒絕服務,域名代理會返回404頁面,其他會拒絕連接。
8、帶寬限制
支持客戶端級帶寬限制,帶寬計算方式爲入口和出口總和,權重均衡。
9、負載均衡
本代理支持域名解析模式的負載均衡,在web域名添加或者編輯中內網目標分行填寫多個目標即可實現輪訓級別的負載均衡。
10、守護進程
本代理支持守護進程,使用示例如下,服務端客戶端所有模式通用,支持linux、darwin、windows。
./(nps|npc) start|stop|restart|status 若有其他參數可加其他參數 (nps|npc).exe start|stop|restart|status 若有其他參數可加其他參數
11、KCP協議支持
KCP是一個快速可靠協議,能以比TCP浪費10%-20%的帶寬的代價,換取平均延遲降低30%-40%,在弱網環境下對性能能有一定的提升。可在app.conf中修改bridgeType爲kcp。
- 當服務端爲kcp時,客戶端連接時也需要加上參數-type=kcp。
該工具很強大,更多的使用可以自行研究,如果有人知道Frp管理面板的話,可以給博主提供下。
七、防禦方案
- 加強內網攻擊檢測
- 部署apt設備和蜜罐設備
- 捕捉內網攻擊行爲
參考文章
https://mp.weixin.qq.com/s/NTBd8AI92yG4Au7W5W9Ktw
https://blog.csdn.net/superDE009/article/details/99700179