1. 程式人生 > >十分鐘快速搭建frp的ssh和http的內網穿透

十分鐘快速搭建frp的ssh和http的內網穿透

frp簡介

frp 是一個可用於內網穿透的高效能的反向代理應用,支援 tcp, udp, http, https 協議。frp目前最新版本為0.13.0,frp目前仍然處於前期開發階段,未經充分測試與驗證,不推薦用於生產環境。

其實關於frp的使用官方文件已經說明得很詳細了,本篇文章是對於frp的一個快速搭建,更詳細的內容還請參考官方文件

環境準備

在開始之前我們需要準備的東西有一臺需要做內網穿透的內網伺服器(後文稱為客戶端),一臺可以訪問外網的伺服器(後文稱為服務端)(阿里雲等)以及一個已經備案的域名(僅做ssh內網穿透不需要)

安裝

上述所需的伺服器以及域名都已經準備好之後便可以開始進行frp的配置,首先我們需要在frp的

release頁面下載frp已經打包好的釋出版。點選這裡可以直接下載0.13.0的linux版本

外網伺服器SSH環境配置

首先將frp的安裝包上傳到外網伺服器,linux建議放到/usr/local/frps目錄下,使用tar命令解壓frp安裝包

tar -zxvf frp_0.13.0_linux_amd64.tar.gz

接著進入frp的解壓目錄下

cd /usr/local/frps/frp_0.13.0_linux_amd64

進入目錄中可以看到
frpc
frpc_full.ini
frpc.ini
frps
frps_full.ini
frps.ini
LICENSE


這七個檔案

  • frpc:客戶端可執行程式
  • frpc_full.ini:客戶端所有配置項(可以再此檔案檢視frp的所有的配置項)
  • frpc.ini:客戶端配置項
  • frps:服務端可執行程式
  • frps_full.ini:服務端所有配置項(可以再此檔案檢視frp的所有的配置項)
  • frps.ini:服務端配置項
  • LICENSE:許可證

在服務端我們不需要客戶端的可執行程式和配置,為了避免誤操作,我們可以先刪除掉所有客戶端的配置

rm -rf frpc frpc_full.ini frpc.ini

接下來可以對服務端配置進行修改。

vi frps.ini

可以看到服務端的預設配置如下:

[common]
bind_port = 7000

預設的配置資訊中只有一個繫結埠為7000,意思是我們在外網伺服器中繫結7000埠和客戶端進行通訊。注:埠可以自定義,但是需要客戶端和服務端進行統一。阿里雲伺服器需要在esc管理中配置安全組規則中新增7000埠

接著在服務端使用如下命令啟動程式

./frps -c frps.ini

這行命令的意思是根據frps.ini這個配置檔案去啟動frps

看到外網伺服器打印出如下資訊,表示啟動成功
image

但是這樣退出啟動控制檯程式便中斷了。於是我們通常選擇後臺啟動。在linux中使用如下命令進行後臺啟動。然後執行的日誌會輸出到當前目錄的nohup.log檔案中

nohup ./frps -c frps.ini &

以上是外網伺服器最基本的一個配置。十分簡單

內網伺服器SSH環境配置

內網伺服器與外網伺服器一樣,首先將安裝包上傳到內網伺服器的/usr/local/frpc目錄下,然後刪除掉我們不需要的服務端檔案

rm -rf frps frps_full.ini frps.ini

接著修改我們的客戶端配置檔案frpc.ini

vi frpc.ini

可以看到客戶端預設配置如下:

[common]
server_addr = 120.79.17.158
server_port = 7000

[ssh]
type = tcp
local_ip = 192.168.3.9
local_port = 22
remote_port = 6000
  • [common]表示以下配置資訊是一些公用配置資訊
  • server_addr是我們服務端即外網伺服器的公網訪問ip
  • server_port是我們前面在服務端配置的frps.ini中bind_port中對應的埠。需保持兩邊一致
  • [ssh]表示以下配置資訊是我們使用ssh連線內網伺服器時需要的一些配置資訊
  • type 是連線型別,ssh方式連線就用tcp
  • local_ip 是本機ip。注意不能使用127.0.0.1,應該是本機的區域網ip。如192.168.3..9
  • local_port 是本地ssh埠,ssh預設埠為22
  • remote_port 是外網伺服器請求過來的埠 注:阿里雲伺服器需要在esc管理中配置安全組規則中新增6000埠

瞭解瞭如上配置後,我們對配置進行相應的修改。修改為對應的資訊後,既可以使用如下命令啟動客戶端程式

./.frpc -c frpc.ini

這行命令的意思是根據frpc.ini這個配置檔案去啟動frpc

看到內網伺服器打印出如下資訊表示啟動成功:
image

啟動成功後可以直接通過外網伺服器ip加上內網伺服器配置的remote_port進行ssh連線
如:

ssh 120.79.17.158 -p 6000

就可以發現我們可以直接通過公網ip登入內網伺服器了

外網伺服器HTTP配置

通常我們在開發的時候想讓別人通過外網可以直接訪問到我們的系統,以便於除錯和測試,我是在做微信開發的時候需要使用到內網穿透的http服務,於是我們需要在frp中新增http服務的內網穿透配置

在外網伺服器的frps.ini中新增http服務配置如下:

[common]
bind_port = 7000
vhost_http_port = 6001

bind_port和之前做ssh時是一個意思。也是為了和客戶端建立通訊的埠,只需要在之前的配置檔案中新增上vhost_http_port = 6001,這個配置意思是讓別人在訪問我們的伺服器6001埠時。frp將http請求轉發到內網伺服器

服務端的http請求配置到這裡就結束了

內網伺服器HTTP配置

內網伺服器需要在frpc.ini中新增上如下內容:

[web]
type = http
local_port = 80
custom_domains = wannabe.fun
  • [web]表示我們的配置是一個web服務
  • type表示我們的請求方式是http方式
  • local_port表示我們的本地服務埠號為80
  • custom_domains表示配置為一個已經備案的域名(必填,並且需要域名可用,開始我認為這個不是必須的,於是花了很長時間,),並且域名解析配置為外網伺服器ip

以上配置完成後,我們就可以使用wannabe.fun:6001訪問到我們部署在內網伺服器的80埠的服務了。