如何使用 frp 實現內網穿透

来源:https://www.cnblogs.com/pingyeaa/archive/2020/05/15/12897746.html
-Advertisement-
Play Games

這有一個專註Gopher技術成長的開源項目 "「go home」" 背景 作為一名程式員,家裡多多少少會有一些落了灰的電腦,如果把閑置的電腦變成伺服器,不僅有良好的配置,還能用來做各種測試,那就再好不過了。但是區域網的設備怎麼被外網訪問呢?這就靠內網穿透來實現了。 內網穿透又叫 "NAT" 穿透,常 ...


這有一個專註Gopher技術成長的開源項目「go home」

背景

作為一名程式員,家裡多多少少會有一些落了灰的電腦,如果把閑置的電腦變成伺服器,不僅有良好的配置,還能用來做各種測試,那就再好不過了。但是區域網的設備怎麼被外網訪問呢?這就靠內網穿透來實現了。

內網穿透又叫 NAT 穿透,常用的工具有很多,比如 ngrok、花生殼、frp等,因為我使用的是 frp,這也是本篇文章的主題。

NAT 是在 IP 數據包通過路由器或防火牆的時候重寫 IP 地址的技術。因為現在的公網 IP 數量有限,國家不能給每個設備分配一個公網 IP,所以只能多台電腦共用一個公網 IP 對外通訊,這樣就需要進行網路轉換,而 NAT 的目的正是如此。

基本實現原理

frp 分為服務端與客戶端,前者運行在有公網 IP 的伺服器上,後者運行在區域網內的設備上,服務端預設會先開放 7000 埠,然後客戶端與其相連。

同時客戶端可以開啟用於 ssh 的埠,與服務端的某個埠做映射,這樣我們在終端訪問服務端的埠時,會自動轉發到客戶端去。

除了 ssh 埠之外,frp 還支持 web 埠來接收 http 訪問。

安裝使用

目前需要公網伺服器、內網伺服器各一臺,我的內網伺服器重裝了 linux 系統,方便試驗各類工具。

服務端安裝配置

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar zxvf frp_0.33.0_linux_amd64.tar.gz
cd frp_0.33.0_linux_amd64/

服務端的配置文件是 frps.ini,預設綁定 7000 埠,如果購置了雲伺服器,註意打開 7000 埠。

[common]
bind_port = 7000

通過 fprs 二進位文件啟動 frp 服務。

./frps -c ./frps.ini

如下提示即是安裝成功。

2020/05/15 22:16:29 [I] [service.go:178] frps tcp listen on 0.0.0.0:7000
2020/05/15 22:16:29 [I] [root.go:209] start frps success
2020/05/15 22:16:38 [I] [service.go:432] [e3c5096bd4291972] client login info: ip [14.114.230.168:44422] version [0.24.1] hostname [] os [linux] arch [amd64]
2020/05/15 22:16:38 [I] [tcp.go:63] [e3c5096bd4291972] [ssh] tcp proxy listen port [7001]
2020/05/15 22:16:38 [I] [control.go:445] [e3c5096bd4291972] new proxy [ssh] success

客戶端安裝配置

把自己的破電腦拿出來,以同樣的方式下載 frp。

wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
tar zxvf frp_0.33.0_linux_amd64.tar.gz
cd frp_0.33.0_linux_amd64/

客戶端的配置文件是 frpc.ini。

[common]
server_addr = 127.0.0.1
server_port = 7000

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

common 為通用配置

  • server_addr 為公網伺服器 IP 地址
  • server_port 為公網伺服器配置的 7000 埠

ssh 用於終端命令行訪問

  • type 連接類型,預設為 tcp
  • local_ip 本地 IP
  • local_port 用於 ssh 的埠號,預設 22
  • remote_port 映射的服務端埠,訪問該埠時預設轉發到客戶端的 22 埠

啟動客戶端進程

./frpc -c ./frpc.ini

如有以下提示則代表與服務端連接成功

2020/05/15 22:34:49 [I] [service.go:282] [9bc650122a538aab] login to server success, get run id [9bc650122a538aab], server udp port [0]
2020/05/15 22:34:49 [I] [proxy_manager.go:144] [9bc650122a538aab] proxy added: [ssh]
2020/05/15 22:34:49 [I] [control.go:179] [9bc650122a538aab] [ssh] start proxy success

測試

啟動完成後就可以通過 ssh 連接到內網伺服器了。

ssh -p 6000 [email protected]

原文首發鏈接:https://pingyeaa.com/2020/05/13/network/frp/


我是平也,這有一個專註Gopher技術成長的開源項目「go home」


感謝大家的觀看,如果覺得文章對你有所幫助,歡迎關註公眾號「平也」,聚焦Go語言與技術原理。
關註我


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​ 學習編程,操作系統是你必須要掌握的基礎知識,那麼操作系統到底是什麼呢? 這還用說麽,操作系統不就是Windows、Linux、Mac、IOS、Android、IOS這類我們天天都在用的東西麽? 此話不假,但是操作系統作為電腦科學里的一門基礎學科,肯定不能這麼接地氣對不對,總的來點高大上的概念, ...
  • 前幾日做了名為"It's a Mod, Mod, Mod, Mod World"(膜世界)的題 給定$t$組$p,n,q$,求解 $\sum_{i=1}^n [(pi)\,mod\,q]$,其中$1 \le p,n,q \le 10^6$,$1 \le t \le 10^4$,限時$1s$ 註意,這 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題61. 撲克牌中的順子 題目 從撲克牌中隨機抽5張牌,判 ...
  • 伺服器版本 CentOS7.2 MongoDB版本 3.4 1/ 下載所需資源 阿裡鏡像地址 http://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb org/3.4/x86_64/RPMS/ 下載rpm安裝包: 2/ 安裝 MongoDB 先安裝 ...
  • 本文記錄,如何在 Python Script 中使用 Shebang 行。 Shebang Line 是什麼: 也被叫做 Hashbang Line,只要是一個由,井號和嘆號 開頭,並構成的字元序列 ,就叫做 Shebang Line。在開頭字元之後,可以有一個或數個空白字元。這個字元串,通常只出現 ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題63. 股票的最大利潤 與以下題目相同 前往:LeetC ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 121. 買賣股票的最佳時機 題目 給定一個數組,它的第 i ...
  • 在使用Python時,需要使用各種各樣的庫,通常會使用pip直接安裝,這樣最為簡單也最方便。但最為崩潰的地方在於有時候速度出奇的慢,因為pip預設使用的源為官方源,而官方源在國外。通常的解決方法是更換源,常見的國內源如下所示: Windows下永久更換源 1.在運行視窗或資源管理器中輸入 %APPD ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...