當前位置: 妍妍網 > 碼農

幾款實用的內網穿透工具,安排!

2024-04-24碼農

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

👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 贈書福利

全棧前後端分離部落格計畫 2.0 版本完結啦, 演示連結 http://116.62.199.48/ 新計畫正在醞釀中 。全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了239小節,累計38w+字,講解圖:1645張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,

  • 0x00 前言

  • 0x01 nps-npc

  • 0x02 frp

  • 0x03 ew

  • 0x04 ngrok

  • 0x00 前言

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

    0x01 nps-npc

    1.1 簡介

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

  • 一台有公網IP的伺服器(VPS)執行伺服端(NPS)

  • 一個或多個執行在內網的伺服器或者PC執行客戶端(NPC)

  • 圖片

    1.2 特點

  • Go語言編寫

  • 支持跨平台

  • 支持多種協定的代理

  • 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.gztar xzvf linux_amd64_server.tar.gzcd ~/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)可以出網,就需要修改成出網埠。

    ##bridgebridge_type=tcpbridge_port=443 # 修改連線埠bridge_ip=0.0.0.0

    啟動

    #Mac/Linux./nps test|start|stop|restart|status 測試配置檔|啟動|停止|重新開機|狀態#Windowsnps.exe test|start|stop|restart|status 測試配置檔|啟動|停止|重新開機|狀態

    NPC

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

    圖片

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

    圖片

    web管理端

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

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

    圖片

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

    0x02 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 存取家裏的機器

    修改 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.xserver_port = 7000# 用於身份驗證,請自行修改,要保證伺服端與客戶端一致token = abcdefgh[rdp]type = tcplocal_ip = 127.0.0.1local_port = 3389remote_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

    滑鼠右擊,貼上為捷徑即可。

    2. 透過 SSH 存取公司內網機器

    frps 的部署步驟同上。

    啟動 frpc,配置如下:

    # frpc.ini[common]server_addr = x.x.x.xserver_port = 7000# 用於身份驗證,請自行修改,要保證伺服端與客戶端一致token = abcdefgh[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000

    透過 SSH 存取內網機器,假設使用者名稱為 test:

    ssh -oPort=6000 test@x.x.x.x

    3. 透過自訂網域名稱存取部署於內網的 Web 服務

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

    修改 frps.ini 檔,設定 http 存取埠為 8080:

    # frps.ini[common]bind_port = 7000vhost_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.xserver_port = 7000# 用於身份驗證,請自行修改,要保證伺服端與客戶端一致token = abcdefgh[web]type = httplocal_port = 80custom_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 服務。

    4. 對外提供簡單的檔存取服務

    透過 static_file 外掛程式可以對外提供一個簡單的基於 HTTP 的檔存取服務。

    frps 的部署步驟同上。

    啟動 frpc,啟用 static_file 外掛程式,配置如下:

    # frpc.ini[common]server_addr = x.x.x.xserver_port = 7000# 用於身份驗證,請自行修改,要保證伺服端與客戶端一致token = abcdefgh[test_static_file]type = tcpremote_port = 6000plugin = static_file# 要對外暴露的檔目錄plugin_local_path = /tmp/file# 存取 url 中會被去除的字首,保留的內容即為要存取的檔路徑plugin_strip_prefix = staticplugin_http_user = abcplugin_http_passwd = abc

    透過瀏覽器存取 http://x.x.x.x:6000/static/ 來檢視位於 /tmp/file 目錄下的檔,會要求輸入已設定好的使用者名稱和密碼。

    1. 統計面板(Dashboard)

    透過瀏覽器檢視 frp 的狀態以及代理統計資訊展示。

    註:Dashboard 尚未針對大量的 proxy 數據展示做最佳化,如果出現 Dashboard 存取較慢的情況,請不要啟用此功能。

    需要在 frps.ini 中指定 dashboard 服務使用的埠,即可開啟此功能:

    [common]dashboard_port = 7500# dashboard 使用者名稱密碼,預設都為 admindashboard_user = admindashboard_pwd = admin

    開啟瀏覽器透過 http://[server_addr]:7500 存取 dashboard 界面,使用者名稱密碼預設為 admin

    2. 加密與壓縮

    這兩個功能預設是不開啟的,需要在 frpc.ini 中透過配置來為指定的代理啟用加密與壓縮的功能,壓縮演算法使用 snappy:

    # frpc.ini[ssh]type = tcplocal_port = 22remote_port = 6000use_encryption = trueuse_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。

    3. 代理限速

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

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

    在代理配置中增加 bandwidth_limit 欄位啟用此功能,目前僅支持 MB KB 單位。

    4. 範圍埠對映

    在 frpc 的配置檔中可以指定對映多個埠,目前只支持 tcp 和 udp 的型別。

    這一功能透過 range: 段落標記來實作,客戶端會解析這個標記中的配置,將其拆分成多個 proxy,每一個 proxy 以數位為字尾命名。

    例如要對映本地 6000-6005, 6007 這 6 個埠,主要配置如下:

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

    實際連線成功後會建立 8 個 proxy,命名為 test_tcp_0, test_tcp_1 ... test_tcp_7

    0x03 ew

    3.1 簡介

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

    圖片

    3.2 特點

  • 輕量級,C語言編寫

  • 可以設定多級代理

  • 跨平台

  • 但是只支持Socks5代理

  • 3.3 使用方法

    以下使用方法均摘自:http://rootkiter.com/EarthWorm/

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

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

    1. 正向 SOCKS v5 伺服器

    $ ./ew -s ssocksd -l 1080

    2. 反彈 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

    成功。

    3. 多級級聯

    工具中內建的三條埠轉發指令, 它們的參數格式分別為:

    $ ./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

    0x04 ngrok

    4.1 簡介

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

    4.2 特點

  • 官方維護,一般較為穩定

  • 跨平台,閉源

  • 有流量記錄和重發功能

  • 4.3 使用方法

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

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

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

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

  • 圖片

    可以透過官網的UI界面檢視封包和流量等等(但是要付費==、)

    圖片

    還可以透過一些命令將內網的檔和其他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

    👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 贈書福利

    全棧前後端分離部落格計畫 2.0 版本完結啦, 演示連結 http://116.62.199.48/ 新計畫正在醞釀中 。全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了239小節,累計38w+字,講解圖:1645張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,


    1. 

    2. 

    3. 

    4. 

    最近面試BAT,整理一份面試資料Java面試BATJ通關手冊,覆蓋了Java核心技術、JVM、Java並行、SSM、微服務、資料庫、數據結構等等。

    獲取方式:點「在看」,關註公眾號並回復 Java 領取,更多內容陸續奉上。

    PS:因公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下在看,加個星標,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。

    「在看」支持小哈呀,謝謝啦