幾款實用的內網穿透工具


本文以滲透的視角,總結幾種個人常用的內網穿透,內網代理工具,介紹其簡單原理和使用方法。

1.1 簡介

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

 

  • 一台有公網IP的服務器(VPS)運行服務端(NPS)
  • 一個或多個運行在內網的服務器或者PC運行客戶端(NPC)

 

 

1.2 特點

  1. Go語言編寫
  2. 支持跨平台
  3. 支持多種協議的代理
  4. web管理端

1.3 使用方法

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

NPS

安裝配置

找到自己服務器相應版本的server:

cd ~
wget https://github.com/cnlh/nps/releases/download/v0.23.2/linux_amd64_server.tar.gz
tar xzvf linux_amd64_server.tar.gz
cd ~/nps

在nps目錄下面會有一個nps可執行文件、conf配置目錄和web網頁目錄,我們只需要修改conf/nps.conf即可:

vim conf/nps.conf

需要改一下#web下面的幾個參數,

web_host= 服務器IP或者域名
web_username= admin(登錄用戶名)
web_password= 你的密碼
web_port=8080(web管理端口)

修改#bridge 可以更改 NPC的連接端口。

比如我們拿到一台權限受限的服務器,有防火牆,可能只有部分端口(80,443)可以出網,就需要修改成出網端口。

##bridge
bridge_type=tcp
bridge_port=443  # 修改連接端口
bridge_ip=0.0.0.0

啟動

#Mac/Linux
./nps test|start|stop|restart|status 測試配置文件|啟動|停止|重啟|狀態
  
#Windows
nps.exe test|start|stop|restart|status 測試配置文件|啟動|停止|重啟|狀態

NPC

./npc -server=你的IP:8024 -vkey=唯一驗證密碼 -type=tcp

 

 新建好客戶端后,也可以在+中看到,詳細的客戶端連接命令:

 

 

web管理端

在客戶端界面可以通過新增的方式添加客戶端連接,每一個連接的vkey都是唯一區分的。每一個客戶端,在建立連接后,都可以建立多個不同協議的隧道,這一個個隧道就是不同的代理了。

 

 

通過不同的協議和端口就可以連接代理的內網機器。

frp

2.1 簡介

frp 是一個專注於內網穿透的高性能的反向代理應用,支持 TCP、UDP、HTTP、HTTPS 等多種協議。可以將內網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。

 

 

2.2 特點

  • 客戶端服務端通信支持 TCP、KCP 以及 Websocket 等多種協議。
  • 端口復用,多個服務通過同一個服務端端口暴露。
  • 跨平台,但是支持的比nps少一點
  • 多種插件,提供很多功能

2.3 使用方法

下載:https://github.com/fatedier/frp/releases

以下內容摘自:https://segmentfault.com/a/1190000021876836

1. 通過 rdp 訪問家里的機器

1.修改 frps.ini 文件,為了安全起見,這里最好配置一下身份驗證,服務端和客戶端的 common 配置中的 token 參數一致則身份驗證通過:

# frps.ini
[common]
bind_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

2. 啟動 frps:

./frps -c ./frps.ini

3. 修改 frpc.ini 文件,假設 frps 所在服務器的公網 IP 為 x.x.x.x:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000

4. 啟動 frpc:

./frpc -c ./frpc.ini

5.通過 rdp 訪問遠程的機器,地址為:

x.x.x.x:6000

開機自啟針對 Windows 系統,為了便於使用,可以配置一下開機的時候靜默啟動。1.在 frpc.exe 的同級目錄創建一個 start_frpc.vbs:

'start_frpc.vbs
'請根據實際情況修改路徑
CreateObject("WScript.Shell").Run """D:\Program Files\frp_windows_amd64\frpc.exe""" & "-c" & """D:\Program Files\frp_windows_amd64\frpc.ini""",0

2.復制 start_frpc.vbs 文件,打開以下目錄,注意將

<USER_NAME>

改為你的用戶名:C:\Users\<USER_NAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup3.鼠標右擊,粘貼為快捷方式即可。2. 通過 SSH 訪問公司內網機器frps 的部署步驟同上。1.啟動 frpc,配置如下:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

2.通過 SSH 訪問內網機器,假設用戶名為 test:ssh -oPort=6000 test@x.x.x.x3. 通過自定義域名訪問部署於內網的 Web 服務有時想要讓其他人通過域名訪問或者測試我們在本地搭建的 Web 服務,但是由於本地機器沒有公網 IP,無法將域名解析到本地的機器,通過 frp 就可以實現這一功能,以下示例為 http 服務,https 服務配置方法相同, vhost_http_port 替換為 vhost_https_port, type 設置為 https 即可。1.修改 frps.ini 文件,設置 http 訪問端口為 8080:

# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

2.啟動 frps:./frps -c ./frps.ini3.修改 frpc.ini 文件,假設 frps 所在的服務器的 IP 為 x.x.x.x,local_port 為本地機器上 Web 服務對應的端口, 綁定自定義域名 www.yourdomain.com:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com

4.啟動 frpc:./frpc -c ./frpc.ini5.將 www.yourdomain.com 的域名 A 記錄解析到 IP x.x.x.x,如果服務器已經有對應的域名,也可以將 CNAME 記錄解析到服務器原先的域名。6.通過瀏覽器訪問 http://www.yourdomain.com:8080 即可訪問到處於內網機器上的 Web 服務。

4. 對外提供簡單的文件訪問服務

通過 static_file 插件可以對外提供一個簡單的基於 HTTP 的文件訪問服務。frps 的部署步驟同上。1.啟動 frpc,啟用 static_file 插件,配置如下:

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
# 要對外暴露的文件目錄
plugin_local_path = /tmp/file
# 訪問 url 中會被去除的前綴,保留的內容即為要訪問的文件路徑
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc

2.通過瀏覽器訪問 http://x.x.x.x:6000/static/ 來查看位於 /tmp/file 目錄下的文件,會要求輸入已設置好的用戶名和密碼。常用功能統計面板(Dashboard)通過瀏覽器查看 frp 的狀態以及代理統計信息展示。注:Dashboard 尚未針對大量的 proxy 數據展示做優化,如果出現 Dashboard 訪問較慢的情況,請不要啟用此功能。需要在 frps.ini 中指定 dashboard 服務使用的端口,即可開啟此功能:

[common]
dashboard_port = 7500
# dashboard 用戶名密碼,默認都為 admin
dashboard_user = admin
dashboard_pwd = admin

打開瀏覽器通過 http://[server_addr]:7500 訪問 dashboard 界面,用戶名密碼默認為 admin。加密與壓縮這兩個功能默認是不開啟的,需要在 frpc.ini 中通過配置來為指定的代理啟用加密與壓縮的功能,壓縮算法使用 snappy:

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

如果公司內網防火牆對外網訪問進行了流量識別與屏蔽,例如禁止了 SSH 協議等,通過設置 use_encryption = true,將 frpc 與 frps 之間的通信內容加密傳輸,將會有效防止流量被攔截。如果傳輸的報文長度較長,通過設置 use_compression = true 對傳輸內容進行壓縮,可以有效減小 frpc 與 frps 之間的網絡流量,加快流量轉發速度,但是會額外消耗一些 CPU 資源。

[TLS

從 v0.25.0 版本開始 frpc 和 frps 之間支持通過 TLS 協議加密傳輸。通過在 frpc.ini 的 common 中配置 tls_enable = true 來啟用此功能,安全性更高。為了端口復用,frp 建立 TLS 連接的第一個字節為 0x17。注意:啟用此功能后除 xtcp 外,不需要再設置 use_encryption。

代理限速

目前支持在客戶端的代理配置中設置代理級別的限速,限制單個 proxy 可以占用的帶寬。

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
bandwidth_limit = 1MB

在代理配置中增加 bandwidth_limit 字段啟用此功能,目前僅支持 MB 和 KB 單位。范圍端口映射在 frpc 的配置文件中可以指定映射多個端口,目前只支持 tcp 和 udp 的類型。這一功能通過 range: 段落標記來實現,客戶端會解析這個標記中的配置,將其拆分成多個 proxy,每一個 proxy 以數字為后綴命名。例如要映射本地 6000-6005, 6007 這 6 個端口,主要配置如下:

# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

實際連接成功后會創建 8 個 proxy,命名為 test_tcp_0, test_tcp_1 ... test_tcp_7。ew3.1 簡介

EW 是一套便攜式的網絡穿透工具,具有 SOCKS v5服務架設和端口轉發兩大核心功能,可在復雜網絡環境下完成網絡穿透。但是,現在工具已經不更新了。。。


免責聲明!

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



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