使用FRP搭建內網穿透工具,自己公網服務器獨享內外網端口轉發

內網穿透,也即 NAT 穿透,進行 NAT 穿透是為了使具有某一個特定源 IP 地址和源端口號的數據包不被 NAT 設備屏蔽而正確路由到內網主機。

簡單來說,就是讓互聯網(外網)設備能訪問局域網(內網)設備提供的服務,這里的設備通常指電腦。

一、內網穿透的應用場景

對開發人員來說,需要使用到內網穿透的一個典型的應用場景就是針對第三方授權(通常是 OAuth2.0)和支付回調的開發調試。通過內網穿透工具將第三方 SDK 或平臺的回調地址映射到本機開發環境,從而達到實時調試的目的。

其次是節約部署成本(通常是公網服務器費用)。通過將應用部署在本機,再利用內網穿透工具對外提供服務,這樣既能節約服務器租用費用,又能提升服務器的硬件配置。

目前,市面上有不少免費提供內網穿透的工具/產品,比如很大眾化的nat123,那為什么還要自己搭建呢?

筆者搭建內網穿透的目的就屬于,低頻率開發調試用,在擁有公網服務器的條件下,自建是最合適的方式。

二、內網穿透的搭建工具

ngrok:一個國外的穿透工具,1.0 版本是開源的,目前 2.0 及以上版本已經閉源,并且提供免費和收費的服務。

frp:這是一個國內的開源工具,目前最新版本為 v0.61.1(截止2025-02-14),有比較詳盡的中文文檔,并且一直在維護更新。

由于 frp 一直開源,并且維護積極、更新頻繁,再加上中文文檔的加持,筆者最終選擇了 frp 作為搭建工具。

注:frp 自主搭建需要一個有公網 ip 的服務器,本文使用阿里云 ECS。

三、frp 下載和版本選擇

官方 github release 地址,目前最新版本是 v0.61.1(截止2025-02-14),官方github地址可能不易訪問和下載,這里提供了 v0.61.1 的常用平臺安裝包:developbook.cn/download/fr…

1、版本選擇說明

壓縮包說明

frp_0.61.1_darwin_amd64.tar.gz適用于 Mac OS 系統

frp_0.61.1_freebsd_amd64.tar.gz適用于 FreeBSD 64 位系統

frp_0.61.1_linux_amd64.tar.gz適用于 Linux 64 位系統

frp_0.61.1_linux_arm.tar.gz適用于 Linux 32 位嵌入式系統

frp_0.61.1_linux_arm64.tar.gz適用于 Linux 64 位嵌入式系統

frp_0.61.1_windows_amd64.zip適用于 Windows 64 位系統

frp_0.61.1_windows_arm64.zip適用于 Windows 64 位嵌入式系統

筆者的服務器系統為 CentOS7 64 位,所以選擇了 frp_0.61.1_linux_amd64.tar.gz;筆者的個人電腦系統為 Mac OS X,所以選擇了 frp_0.60.1_darwin_amd64.tar.gz。

2、下載方式

直接下載

直接點擊鏈接,使用瀏覽器下載到本機。利用 ssh 工具連接到阿里云 ECS,再使用 lrzsz 工具的 rz 命令將 frp_0.61.1_linux_amd64.tar.gz 上傳到服務器,而壓縮包 frp_0.61.1_darwin_amd64.tar.gz 直接在本機解壓。

推薦大家一款Mac上好用的免費SSH工具:FinalShell

注:ssh 工具、lrzsz 實用工具的安裝和用法可自行搜索。

終端命令下載

? ? 服務器// 下載
wget https://developbook.cn/download/frp/v0.61.1/frp_0.61.1_linux_amd64.tar.gz

// 解壓
tar -xzvf frp_0.61.1_linux_amd64.tar.gz

? ? 本機// 使用curl下載
curl -O https://developbook.cn/download/frp/v0.61.1/frp_0.61.1_darwin_amd64.tar.gz

// 解壓
tar -xzvf frp_0.61.1_darwin_amd64.tar.gz

3、frp 壓縮包文件說明

每個壓縮包解壓后都包含以下文件:

? ? frpc —— 客戶端可執行二進制文件
frpc.toml —— 客戶端使用的配置文件
frps —— 服務端可執行二進制文件
frps.toml —— 服務端使用的配置文件

注:服務端只需用到 frp_0.61.1_linux_amd64 目錄下的 frps 相關文件,本機(客戶端)只需用到 frp_0.61.1_darwin_amd64 目錄下的 frpc 相關文件。

四、FRP服務端配置和啟動

1、在服務器上打開 frps.toml:

??vi frps.toml

注:確保當前已進入工作目錄/root/frp_0.61.1_linux_amd64/。

2、配置 frps 要監聽的端口:按下 i 進入編輯模式,在末尾增加一行:vhostHTTPPort = 8080,使 frps.toml 最終配置如下:

??[common]
bindPort = 7000
vhostHTTPPort = 8080

注:vhostHTTPPort 監聽的端口不能被占用,否則會導致 frps 不能啟動,端口可根據實際需要修改;bindPort 端口為 frp 服務端和客戶端連接通信的端口,默認為 7000。

3、保存配置并退出:按下 Esc,輸入:wq。

4、啟動 frps 程序:

??./frps -c ./frps.toml

注:如遇 permission denied 錯誤,表明 frps 可能沒有運行權限,則先賦權:

??chmod 700 frps

然后再次執行啟動命令。

五、FRP客戶端配置和啟動

1、在本機進入 frp_0.61.0_darwin_amd64 目錄,打開 frpc.toml 文件;

2、以配置訪問內網的 web 服務(常見情形)為例,最終修改 frpc.toml 如下:

??serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "local-service"
type = "http"
localIP = "127.0.0.1"
localPort = 3000

注:x.x.x.x 為運行 frps 的服務器公網 ip,localPort 為本機啟動的 web 服務對應的端口,請根據實際情況修改。

3、啟動 frpc 程序:

??sudo ./frpc -c ./frpc.toml

注:此時 frpc 會通過 7000 端口嘗試與 frps 建立通信連接,如果一切順利,則終端會提示連接成功;但實際情況卻顯示連接失敗,因為還少了兩個步驟:

一、需要登錄阿里云控制臺將 7000 端口加入阿里云 ECS 安全組的入站規則里面,同理還需將 8080 端口加入。具體操作參考:添加安全組規則;

二、將 7000 和 8080 加入服務器防火墻規則,具體操作參考:CentOS7 使用 firewalld 打開關閉防火墻與端口。

當一切就緒,frpc 啟動并連接成功后,打開瀏覽器輸入 x.x.x.x:8080 就能訪問到本機 127.0.0.1:3000 的服務(本機 web 服務需要處于啟動狀態)。

至此,一個最簡配置的基于 frp 的內網穿透便搭建完成,更多配置和用法,請參考官方文檔:frp 官方中文文檔。

六、小結

有公網主機資源和有一定的網絡知識的,是可以花點時間自己搭建自己專屬的內網穿透服務器的,采用FRP這樣的開源工具,社區支持文檔多,有什么問題可以參考相應教程來處理。

沒有公網IP的和普通用戶,或確實不想多折騰的,還要是要老老實實用其他三方內網穿透工具,如nat123這樣的有界面直接操作一步添加映射可以自定義內網地址和公網地址端口,就能實現內網提供發布到互聯網。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916528.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916528.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaWeb01——基礎標簽及樣式(黑馬視頻筆記)

1.如何用VScode寫html代碼 1. 首先在vscode上安裝一些插件,插件如下: 2.打開你要寫入的html文件的文件夾,然后右擊“ 新建文件”,命名 “xxx.html”, 3.如果是寫 css文件,那么也是右擊“新建文件”,命名“x…

在2G大小的文件中,找出高頻top100的單詞

將 2GB 的大文件分割為 2048 個大小為 512KB 的小文件,采用流式讀取方式處理,避免一次性加載整個文件導致內存溢出。初始化一個長度為 2048 的哈希表數組,用于分別統計各個小文件中單詞的出現頻率。利用多線程并行處理機制遍歷所有 2048 個小…

基于LNMP分布式個人云存儲

1.準備工作a.關閉兩臺虛擬機的安全軟件客戶端:[rootmaster ~]# systemctl stop firewalld [rootmaster ~]# systemctl disable firewalld [rootmaster ~]# systemctl status firewalld ○ firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (…

指針運算全攻略:加減、比較與排序

常見的指針指針運算說明1.指針與整數的加減運算對指針可以進行加法運算&#xff0c;即p n或者p - n。其結果依舊是一個是一個指針&#xff0c;新的指針是在原來的地址值基礎上加上/減去n *(sizeof(指針指向的數據類型)&#xff09;個字節。示例&#xff1a;#include<stdio.…

物聯網安裝調試-物聯網網關

物聯網網關作為連接終端設備與云平臺的核心樞紐,其分類與選型需結合功能定位、硬件性能、連接方式及應用場景等多維度考量。以下從分類體系和產品推薦兩方面系統梳理,助您高效決策: ?? 一、物聯網網關分類體系 1. 按功能定位劃分 類型 核心能力 典型場景 代表產品 邊緣計…

Jenkins教程(自動化部署)

Jenkins教程(自動化部署) 1. Jenkins是什么&#xff1f; Jenkins是一個開源的、提供友好操作界面的持續集成(CI)工具&#xff0c;廣泛用于項目開發&#xff0c;具有自動化構建、測試和部署等功能。Jenkins用Java語言編寫&#xff0c;可在Tomcat等流行的servlet容器中運行&…

linux 驅動驗證是否成功 之 查看moudle信息

這些是 Linux 內核模塊&#xff08;.ko&#xff09;中的元信息&#xff08;metadata&#xff09;&#xff0c;可以通過如下方式查看&#xff1a;? 1. 使用 modinfo 命令查看已加載或已編譯模塊信息 示例&#xff1a; modinfo aw2013.ko輸出內容大概如下&#xff1a; filename:…

瀏覽器關閉之前請求接口到后端

2025.07.24今天我學習了如何在瀏覽器關閉之前請求一個接口返回到后端。可以用performance.navigation判斷是瀏覽器關閉&#xff0c;還是瀏覽器刷新&#xff0c;因為我這邊只需要瀏覽器關閉的時候才去觸發1. 利用performance API&#xff08;刷新檢測&#xff09; 刷新頁面時&am…

MySQL批量數據處理與事務管理

MySQL是一種廣泛應用的關系型數據庫管理系統&#xff0c;尤其在數據分析和業務邏輯處理方面具有重要地位。在數據量龐大的業務場景中&#xff0c;批量數據處理和事務管理是提高效率和保障數據一致性的重要手段。掌握高效的批量數據操作方法與事務管理技巧&#xff0c;不僅能夠提…

iOS網絡之異步加載

為什么你的圖片要異步加載&#xff1f;在仿寫天氣預報時&#xff0c;我們常常需要從網絡加載天氣圖標&#xff0c;例如顯示某個小時的天氣狀態圖標。這看似簡單的事情&#xff0c;如果處理不當&#xff0c;卻很容易造成界面卡頓&#xff0c;甚至影響整個 App 的用戶體驗。錯誤做…

C#值類型屬性的典型問題

問題復現&#xff1a;值類型屬性的副本問題以下代碼展示了值類型屬性的典型問題&#xff1a;struct Point {public int X;public int Y; }class MyClass {public Point Position {get; set;} }// 使用屬性修改結構體&#xff08;無效&#xff01;&#xff09; var obj new MyC…

機器學習基礎-k 近鄰算法(從辨別水果開始)

一、生活中的 "分類難題" 與 k 近鄰的靈感 你有沒有這樣的經歷&#xff1a;在超市看到一種從沒見過的水果&#xff0c;表皮黃黃的&#xff0c;拳頭大小&#xff0c;形狀圓滾滾。正當你猶豫要不要買時&#xff0c;突然想起外婆家的橘子好像就是這個樣子 —— 黃色、圓…

【WPF】NumericUpDown的用法

在 WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;NumericUpDown 控件并不是內置的標準控件之一&#xff0c;但它是一個非常常用的控件&#xff0c;用于讓用戶輸入一個數值&#xff08;整數或浮點數&#xff09;&#xff0c;并提供上下箭頭來遞增或…

Kotlin位運算

Kotlin 提供了幾種用于操作整數各個位&#xff08;bit&#xff09; 的運算符。這些操作是由處理器直接支持的&#xff0c;速度快且操作簡單。在底層編程中非常重要&#xff0c;比如設備驅動、低級圖形處理、網絡通信、加密和壓縮等。 盡管計算機通常都有高效的硬件指令來執行算…

墨者:通過手工解決SQL手工注入漏洞測試(MongoDB數據庫)

一、SQL手工注入漏洞測試(MongoDB數據庫) 本文以墨者學院靶場為例&#xff0c;演示MongoDB數據庫的手工SQL注入全過程。靶場以自己的地址為準&#xff1a;http://124.70.71.251:42286/new_list.php?id1 二、注入原理說明 MongoDB作為NoSQL數據庫&#xff0c;其注入方式與傳…

Kafka——CommitFailedException異常處理深度解析

引言在分布式消息系統Kafka的生態中&#xff0c;消費者組&#xff08;Consumer Group&#xff09;機制是實現高吞吐量和負載均衡的核心設計。然而&#xff0c;消費過程中位移提交&#xff08;Offset Commit&#xff09;的穩定性始終是開發者面臨的最大挑戰之一。當消費者嘗試提…

kafka的部署和jmeter連接kafka

zookeeper的安裝 kafka依賴Zookeeper所以要先安裝Zookeeper kafka的安裝文章引用來源:Kafka下載和使用&#xff08;linux版&#xff09;-CSDN博客 通過wget命令安裝 # 安裝wget https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.7.1-bin.tar.gz# 解壓tar…

Android UI 組件系列(八):ListView 基礎用法與適配器詳解

博客專欄&#xff1a;Android初級入門UI組件與布局 源碼&#xff1a;通過網盤分享的文件&#xff1a;Android入門布局及UI相關案例 鏈接: https://pan.baidu.com/s/1EOuDUKJndMISolieFSvXXg?pwd4k9n 提取碼: 4k9n 一、引言 在上一篇文章《Android UI 組件系列&#xff08;…

Android學習專題目錄(持續更新)

1.Android 調試 1.1&#xff1a;Logcat日志分析 2.Android編譯 2.1&#xff1a;android編譯過程中的mk文件和bp文件的掃描機制 2.2&#xff1a;Android 構建系統中常見的 .mk 文件及其作用 2.3&#xff1a;Android構建系統中的mk文件語法函數 2.4&#xff1a;安卓中定…

c#Lambda 表達式與事件核心知識點整理

一、Lambda 表達式1. 概念 Lambda 表達式是一種匿名函數&#xff08;無名稱的函數&#xff09;&#xff0c;簡化了委托和匿名方法的寫法&#xff0c;格式為&#xff1a; (參數列表) > 表達式或語句塊 它可以作為參數傳遞&#xff0c;或賦值給委托類型變量。2. 基本語法與簡寫…