說明:內網穿透工具之前已經介紹了不少了,比如Frp
、lanproxy
、Holer
等,現在再介紹個帶Web
面板的穿透工具nps
,之前叫easyProxy
,只是改名了而已,該工具是一款使用go
語言編寫的輕量級、功能強大的內網穿透服務器。支持tcp
、udp
流量轉發,支持內網http
、socks5
代理,同時支持snappy
壓縮(節省帶寬和流量)、站點保護、加密傳輸、多路復用、header
修改等。同時還支持web
圖形化管理。
截圖
安裝
Github地址:https://github.com/cnlh/nps
通常內網穿透工具都有服務端和客戶端,安裝要求如下:
服務端:需要安裝在一個有公網IP的服務器上,系統為Linux/Windows/Mac均可。
客戶端:一般安裝在一個內網的VPS服務器或Windows/Mac電腦上使用。
1、編譯安裝
提示:編譯安裝主要講的Linux系統,其它系統(Win/Mac,也包括Linux)建議直接使用作者編譯好的文件即可。
安裝Go
語言:
#Debian/Ubuntu系統
apt-get -y install golang
#創建目錄並定義GOPATH環境變量指向該目錄
mkdir ~/workspace
echo 'export GOPATH="$HOME/workspace"' >> ~/.bashrc
source ~/.bashrc#CentOS/RHEL系統
yum -y install golang
#創建目錄並定義GOPATH環境變量指向該目錄。
mkdir ~/workspace
echo 'export GOPATH="$HOME/workspace"' >> ~/.bashrc
source ~/.bashrc
安裝git
:
#Debian/Ubuntu系統 apt-get -y install git #CentOS/RHEL系統 yum -y install git
安裝源碼:
go get github.com/cnlh/nps
編譯服務端和客戶端:
#進入指定目錄 cd ~/workspace/src/github.com/cnlh/nps #編譯服務端 go build cmd/nps/nps.go #編譯客戶端 go build cmd/npc/npc.go
編譯好了后,就會在當前目錄生成npc
或nps
二進制文件了,就可以直接拿來用了。
編譯的時候可能出現的問題解決方法:
#只拿一種常見的錯誤做例子,有時候可能會出現很多種這樣的提示 lib/kcp/crypt.go:14:2: cannot find package "golang.org/x/crypto/pbkdf2" in any of: /usr/lib/go-1.7/src/golang.org/x/crypto/pbkdf2 (from $GOROOT) /root/workspace/src/golang.org/x/crypto/pbkdf2 (from $GOPATH) #意思是缺少這種包,然后記住提示的地址,比如上面的golang.org/x/crypto/pbkdf2,有時候也會提示的github地址。 然后再使用命令go get golang.org/x/crypto/pbkdf2命令安裝一下就行了。
2、直接安裝
除了自己編譯外,作者也直接提供了編譯好的文件給你使用,文件下載地址:點擊進去,然后再根據自己的系統架構下載對應的最新版服務端和客戶端。
如果對於Linux
服務器還是不知道怎么選擇的,這里拿Vultr
、搬瓦*大多數VPS
為例。先使用命令getconf LONG_BIT
獲取系統版本,32
位就選386
,64
就選amd64
,具體還是以實際情況為准。
服務端使用
這里博主使用的是Vultr Linux x64
服務器,直接使用命令:
#記得復制前先將下面鏈接替換成當前最新版地址 cd ~ #下載並解壓服務端 wget https://github.com/cnlh/nps/releases/download/v0.0.14/linux_amd64_server.tar.gz && tar zxvf linux_amd64_server.tar.gz #編輯配置文件 cd nps nano conf/nps.conf
配置文件參數如下:
#web管理端口 httpport #web界面管理密碼 password #服務端客戶端通信端口 bridePort #ssl certFile絕對路徑 pemPath #ssl keyFile絕對路徑 keyPath #域名代理https代理監聽端口 httpsProxyPort #域名代理http代理監聽端口 httpProxyPort #web api免驗證IP地址 authip #客戶端與服務端連接方式kcp或tcp bridgeType
然后啟動服務端:
./nps start #重啟/停止服務端 ./nps stop|restart
然后打開地址http://ip:8080
訪問管理界面,具體端口以自己修改的為准,再使用密碼登錄進去,默認為123
。
#如果打不開Web界面,就需要開啟防火牆,一般CentOS系統出現情況最多 #Centos 6系統 iptables -I INPUT -p tcp --dport 8080 -j ACCEPT service iptables save service iptables restart #CentOS 7系統 firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload
對於有些服務器,比如阿里雲,谷歌雲等,還需要在服務器管理面板上開放Web
端口才行。
客戶端使用
1、Linux系統
#比如下載的客戶端文件在根目錄,先進入根目錄 cd ~ #啟動客戶端,比如服務端公網IP為1.1.1.1,服務端配置文件中tcpport為8284 ./npc -server=1.1.1.1:8284 -vkey=客戶端的密鑰
2、Windows系統
首先按住Win+R
,輸入cmd
進入命令窗口,然后使用命令:
#比如下載的客戶端文件在D盤,先進入到D盤 cd /d d: #啟動客戶端,比如服務端公網IP為1.1.1.1,服務端配置文件中tcpport為8284 npc.exe -server=1.1.1.1:8284 -vkey=客戶端的密鑰
至於Mac
系統啟動參考上面就行。
使用場景
關於使用場景,Github
文檔寫的很清楚了,這里大概的說下。
1、tcp隧道模式
適用:想在外網通過ssh連接內網的機器,做雲服務器到內網服務器端口的映射,或者做微信公眾號開發、小程序開發等。
詳細教程→點擊查看。
2、udp隧道模式
適用:在非內網環境下使用內網dns,或者需要通過udp訪問內網機器等。
詳細教程→點擊查看。
3、http代理模式
適用:在外網使用HTTP代理訪問內網站點。
詳細教程→點擊查看。
4、socks5代理模式
適用:搭建一個內網穿透55,在外網如同使用內網v皮n一樣訪問內網資源或者設備。
詳細教程→點擊查看。
相關功能
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
管理面板的話,可以給博主提供下。