如何使用 frp 實現內網穿透

背景

做爲一名程序員,家裏多多少少會有一些落了灰的電腦,若是把閒置的電腦變成服務器,不只有良好的配置,還能用來作各類測試,那就再好不過了。可是局域網的設備怎麼被外網訪問呢?這就靠內網穿透來實現了。linux

內網穿透又叫 NAT 穿透,經常使用的工具備不少,好比 ngrok、花生殼、frp等,由於我使用的是 frp,這也是本篇文章的主題。git

NAT 是在 IP 數據包經過路由器或防火牆的時候重寫 IP 地址的技術。由於如今的公網 IP 數量有限,國家不能給每一個設備分配一個公網 IP,因此只能多臺計算機共用一個公網 IP 對外通信,這樣就須要進行網絡轉換,而 NAT 的目的正是如此。程序員

基本實現原理

frp 分爲服務端與客戶端,前者運行在有公網 IP 的服務器上,後者運行在局域網內的設備上,服務端默認會先開放 7000 端口,而後客戶端與其相連。github

同時客戶端能夠開啓用於 ssh 的端口,與服務端的某個端口作映射,這樣咱們在終端訪問服務端的端口時,會自動轉發到客戶端去。web

除了 ssh 端口以外,frp 還支持 web 端口來接收 http 訪問。shell

安裝使用

目前須要公網服務器、內網服務器各一臺,個人內網服務器重裝了 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 服務。ssh

./frps -c ./frps.ini
複製代碼

以下提示便是安裝成功。tcp

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
複製代碼

原文首發連接:pingyeaa.com/2020/05/13/…


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


感謝你們的觀看,若是以爲文章對你有所幫助,歡迎關注公衆號「平也」,聚焦Go語言與技術原理。

關注我
相關文章
相關標籤/搜索