如何使用 frp 實(shí)現(xiàn)內(nèi)網(wǎng)穿透
這有一個專注Gopher技術(shù)成長的開源項(xiàng)目「go home」
背景
作為一名程序員,家里多多少少會有一些落了灰的電腦,如果把閑置的電腦變成服務(wù)器,不僅有良好的配置,還能用來做各種測試,那就再好不過了。但是局域網(wǎng)的設(shè)備怎么被外網(wǎng)訪問呢?這就靠內(nèi)網(wǎng)穿透來實(shí)現(xiàn)了。
內(nèi)網(wǎng)穿透又叫 NAT 穿透,常用的工具有很多,比如 ngrok、花生殼、frp等,因?yàn)槲沂褂玫氖?frp,這也是本篇文章的主題。
NAT 是在 IP 數(shù)據(jù)包通過路由器或防火墻的時候重寫 IP 地址的技術(shù)。因?yàn)楝F(xiàn)在的公網(wǎng) IP 數(shù)量有限,國家不能給每個設(shè)備分配一個公網(wǎng) IP,所以只能多臺計(jì)算機(jī)共用一個公網(wǎng) IP 對外通訊,這樣就需要進(jìn)行網(wǎng)絡(luò)轉(zhuǎn)換,而 NAT 的目的正是如此。
基本實(shí)現(xiàn)原理
frp 分為服務(wù)端與客戶端,前者運(yùn)行在有公網(wǎng) IP 的服務(wù)器上,后者運(yùn)行在局域網(wǎng)內(nèi)的設(shè)備上,服務(wù)端默認(rèn)會先開放 7000 端口,然后客戶端與其相連。

同時客戶端可以開啟用于 ssh 的端口,與服務(wù)端的某個端口做映射,這樣我們在終端訪問服務(wù)端的端口時,會自動轉(zhuǎn)發(fā)到客戶端去。

除了 ssh 端口之外,frp 還支持 web 端口來接收 http 訪問。
安裝使用
目前需要公網(wǎng)服務(wù)器、內(nèi)網(wǎng)服務(wù)器各一臺,我的內(nèi)網(wǎng)服務(wù)器重裝了 linux 系統(tǒng),方便試驗(yàn)各類工具。
服務(wù)端安裝配置
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/
服務(wù)端的配置文件是 frps.ini,默認(rèn)綁定 7000 端口,如果購置了云服務(wù)器,注意打開 7000 端口。
[common]
bind_port = 7000
通過 fprs 二進(jìn)制文件啟動 frp 服務(wù)。
./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 為公網(wǎng)服務(wù)器 IP 地址
- server_port 為公網(wǎng)服務(wù)器配置的 7000 端口
ssh 用于終端命令行訪問
- type 連接類型,默認(rèn)為 tcp
- local_ip 本地 IP
- local_port 用于 ssh 的端口號,默認(rèn) 22
- remote_port 映射的服務(wù)端端口,訪問該端口時默認(rèn)轉(zhuǎn)發(fā)到客戶端的 22 端口
啟動客戶端進(jìn)程
./frpc -c ./frpc.ini
如有以下提示則代表與服務(wù)端連接成功
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 連接到內(nèi)網(wǎng)服務(wù)器了。
ssh -p 6000 enoch@xxx.xx.xxx.xxx
原文首發(fā)鏈接:https://pingyeaa.com/2020/05/13/network/frp/
我是平也,這有一個專注Gopher技術(shù)成長的開源項(xiàng)目「go home」
感謝大家的觀看,如果覺得文章對你有所幫助,歡迎關(guān)注公眾號「平也」,聚焦Go語言與技術(shù)原理。


浙公網(wǎng)安備 33010602011771號