如何使用 frp 實現內網穿透


這有一個專注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 enoch@xxx.xx.xxx.xxx

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


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


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


免責聲明!

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



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