安排幾款實用的內網穿透工具+教程

民工哥發表於2021-11-24

前言

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

nps-npc

簡介

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

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

image.png

特點
  • Go語言編寫
  • 支援跨平臺
  • 支援多種協議的代理
  • web管理端
使用方法

https://github.com/ehang-io/n...

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  

image.png

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

image.png

web管理端

在客戶端介面可以通過新增的方式新增客戶端連線,每一個連線的vkey都是唯一區分的。

每一個客戶端,在建立連線後,都可以建立多個不同協議的隧道,這一個個隧道就是不同的代理了。

image.png

通過不同的協議和埠就可以連線代理的內網機器。

frp

簡介

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

image.png

特點
  • 客戶端服務端通訊支援 TCP、KCP 以及 Websocket 等多種協議。
  • 埠複用,多個服務通過同一個服務端埠暴露。
  • 跨平臺,但是支援的比nps少一點
  • 多種外掛,提供很多功能
使用方法

下載:https://github.com/fatedier/f...

  • 通過 rdp 訪問家裡的機器

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

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

啟動 frps:

./frps -c ./frps.ini

修改 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

啟動 frpc:

./frpc -c ./frpc.ini

通過 rdp 訪問遠端的機器,地址為:

x.x.x.x:6000
開機自啟

針對 Windows 系統,為了便於使用,可以配置一下開機的時候靜默啟動。在 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

複製 start_frpc.vbs 檔案,開啟以下目錄,注意將

<USER_NAME>
改為你的使用者名稱:

C:\Users\<USER_NAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

滑鼠右擊,貼上為快捷方式即可。

  • 通過 SSH 訪問公司內網機器

frps 的部署步驟同上。

啟動 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

通過 SSH 訪問內網機器,假設使用者名稱為 test:

ssh -oPort=6000 test@x.x.x.x
  • 通過自定義域名訪問部署於內網的 Web 服務

有時想要讓其他人通過域名訪問或者測試我們在本地搭建的 Web 服務,但是由於本地機器沒有公網 IP,無法將域名解析到本地的機器,通過 frp 就可以實現這一功能,以下示例為 http 服務,https 服務配置方法相同, vhost_http_port 替換為 vhost_https_port, type 設定為 https 即可。

修改 frps.ini 檔案,設定 http 訪問埠為 8080:

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

啟動 frps:

./frps -c ./frps.ini

修改 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

啟動 frpc:

./frpc -c ./frpc.ini

將 www.yourdomain.com 的域名 A 記錄解析到 IP x.x.x.x,如果伺服器已經有對應的域名,也可以將 CNAME 記錄解析到伺服器原先的域名。

通過瀏覽器訪問 http://www.yourdomain.com:8080 即可訪問到處於內網機器上的 Web 服務。

  • 對外提供簡單的檔案訪問服務

通過 static_file 外掛可以對外提供一個簡單的基於 HTTP 的檔案訪問服務。

frps 的部署步驟同上。啟動 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

通過瀏覽器訪問 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。

ew

簡介

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

image.png

特點
  • 輕量級,C語言編寫
  • 可以設定多級代理
  • 跨平臺
  • 但是隻支援Socks5代理
使用方法

以下所有樣例,如無特殊說明代理埠均為1080,服務均為SOCKSv5代理服務.

該工具共有 6 種命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。

正向 SOCKS v5 伺服器

$ ./ew -s ssocksd -l 1080  

反彈 SOCKS v5 伺服器,這個操作具體分兩步:

a) 先在一臺具有公網 ip 的主機A上執行以下命令:

$ ./ew -s rcsocks -l 1080 -e 8888   

b) 在目標主機B上啟動 SOCKS v5 服務 並反彈到公網主機的 8888埠

$ ./ew -s rssocks -d 1.1.1.1 -e 8888   

成功。

多級級聯

工具中自帶的三條埠轉發指令, 它們的引數格式分別為:

$ ./ew -s lcx_listen -l  1080   -e 8888    
$ ./ew -s lcx_tran   -l  1080   -f 2.2.2.3 -g 9999    
$ ./ew -s lcx_slave  -d 1.1.1.1 -e 8888    -f 2.2.2.3  -g  9999  

通過這些埠轉發指令可以將處於網路深層的基於TCP的服務轉發至根前,比如 SOCKS v5。首先提供兩個“二級級聯”本地SOCKS測試樣例:

a) lcx_tran 的用法

$ ./ew -s ssocksd  -l 9999  
$ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999 

b) lcx_listen、lcx_slave 的用法

$ ./ew -s lcx_listen -l 1080 -e 8888  
$ ./ew -s ssocksd    -l 9999  
$ ./ew -s lcx_slave  -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999  

再提供一個“三級級聯”的本地SOCKS測試用例以供參考

$ ./ew -s rcsocks -l 1080 -e 8888   
$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999    
$ ./ew -s lcx_listen -l 9999 -e 7777    
$ ./ew -s rssocks -d 127.0.0.1 -e 7777  

資料流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

ngrok

簡介

ngrok 是一個反向代理,通過在公共端點和本地執行的 Web 伺服器之間建立一個安全的通道,實現內網主機的服務可以暴露給外網。ngrok 可捕獲和分析所有通道上的流量,便於後期分析和重放,所以ngrok可以很方便地協助服務端程式測試。

特點
  • 官方維護,一般較為穩定
  • 跨平臺,閉源
  • 有流量記錄和重發功能
使用方法

進入ngrok官網(https://ngrok.com/),註冊ngrok賬號並下載ngrok;

根據官網給定的授權碼,執行如下授權命令;

./ngrok authtoken 1hAotxhmORtzCYvUc3BsxDBPh1H_******************

./ngrok http 80即可將機器的80埠http服務暴露到公網,並且會提供一個公網域名。

image.png

可以通過官網的UI介面檢視資料包和流量等等(但是要付費==、)

image.png

還可以通過一些命令將內網的檔案和其他TCP服務 暴露到公網中。

有授權的設定檔案共享

ngrok http -auth="user:password" file:///Users/alan/share  

無授權的設定檔案共享

ngrok http "file:///C:\\Users\\alan\\Public Folder" 

將主機的3389的TCP埠暴露到公網

ngrok tcp 3389  

更多使用方法參考:https://ngrok.com/docs

來源:v0w.top/2020/08/11/IntranetProxy

相關文章