使用frp工具實現內網的穿透以及配置多個ssh和web服務
frp簡介
FRP 專案地址https://github.com/fatedier/frp/blob/master/README_zh.md
frp 是一個可用於內網穿透的高效能的反向代理應用,支援 tcp, udp 協議,為 http 和 https 應用協議提供了額外的能力,且嘗試性支援了點對點穿透。
環境準備
ssh連線
1. 需要一臺可以直接訪問外網的伺服器,比如阿里雲伺服器(服務端)
2. 需要做內網穿透的伺服器,比如公司內部的區域網測試伺服器(客戶端)
web訪問
3. 需要額外的已經備案的域名
下載地址
https://github.com/fatedier/frp/releases
選擇最新的就行,一般都是linux環境
安裝步驟
客戶端跟服務端都需要的安裝操作
cd /usr/local/
wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
tar -zxvf frp_0.27.0_linux_amd64.tar.gz
mv frp_0.27.0_linux_amd64 frp
下載完畢frp的目錄檔案
- frpc:客戶端可執行程式
- frpc_full.ini:客戶端所有配置項(可以再此檔案檢視frp的所有的配置項)
- frpc.ini:客戶端配置項
- frps:服務端可執行程式
- frps_full.ini:服務端所有配置項(可以再此檔案檢視frp的所有的配置項)
- frps.ini:服務端配置項
- LICENSE:許可證
- 服務端只需要編輯frps.ini檔案
- 客戶端只需要編輯frpc.ini檔案
服務端配置
檢視frps.ini檔案,修改為如下內容
[common]
bind_port = 7000 # 客戶端跟服務端繫結的埠號
預設的配置資訊中只有一個繫結埠為7000,意思是我們在外網伺服器中繫結7000埠和客戶端進行通訊。注:埠可以自定義,但是需要客戶端和服務端進行統一。阿里雲伺服器需要在esc管理中配置安全組規則中暴露7000埠
啟動服務端
./frps -c frps.ini
如下表示啟動成功
啟動成功之後,關閉xshell或者是退出回話,都會使連線斷開,可以使用nohup來進行後臺啟動(後面啟動都可以使用這種方式)
如下是後臺啟動並將日誌輸入到file.log檔案中
nohup ./frps -c ./frps.ini > file.log 2>&1 &
客戶端配置
檢視frpc.ini檔案,修改為如下內容
[common]
server_addr = 39.105.97.50 # 你的公網ip
server_port = 7000 # 繫結的埠,自定義,跟服務端一直即可
[ssh]
type = tcp
local_ip = 127.0.0.1 # 繫結的ip,填寫127.0.0.1表示本機即可
local_port = 22
remote_port = 6008 # ssh預設是22,現在轉發為6008埠
- [common]表示以下配置資訊是一些公用配置資訊
- server_addr是我們服務端即外網伺服器的公網訪問ip
- server_port是我們前面在服務端配置的frps.ini中bind_port中對應的埠。需保持兩邊一致
- [ssh]表示以下配置資訊是我們使用ssh連線內網伺服器時需要的一些配置資訊
- type是連線型別,ssh方式連線就用tcp
- local_ip是本機ip,直接使用127.0.0.1即可
- local_port是本地ssh埠,ssh預設埠為22
- remote_port是外網伺服器請求過來的埠 注:阿里雲伺服器需要在esc管理中配置安全組規則中新增6008埠
啟動客戶端
./frpc -c ./frpc.ini
OK,之後可以通過xshell來連線,只需要指定埠號為remote_port(6008)即可,如下
多個ssh配置
單個ssh配置成功,項配置多個,一樣的操作,在另一臺機器進行下載frp,之後只需要修改frpc.ini檔案,修改格式如下
[common]
server_addr = 39.105.97.50
server_port = 7000
[ssh001] # 不能重複
type = tcp
local_ip = 127.0.0.1 local_port = 22 remote_port = 6009 # 不能重複
需要將remote_port進行修改,[ssh]名稱不能重複
frpc命令啟動即可。
外網伺服器HTTP配置
配置了http之後,就可以訪問內網的web服務了,比如雲盤前提是需要有已經備案的域名,這樣才能配置。
配置方式
服務端:修改frps.ini,內容如下
[common]
bind_port = 7000
vhost_http_port = 6001 # 訪問6001埠,對映到內網web服務
bind_port和之前做ssh時是一個意思。也是為了和客戶端建立通訊的埠,只需要在之前的配置檔案中新增上vhost_http_port = 6001,這個配置意思是讓別人在訪問我們的伺服器6001埠時。frp將http請求轉發到內網伺服器
客戶端:修改frpc.ini,修改內容如下
[common]
server_addr = 39.105.97.50
server_port = 7000
[ssh]
type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6008 [web] type = http local_port = 8080 # 訪問本地8080web服務 custom_domains = www.chendahai.cn # 必須已經備案
- [web]表示我們的配置是一個web服務
- type表示我們的請求方式是http方式
- local_port表示我們的本地服務埠號為80
- custom_domains表示配置為一個已經備案的域名(必填,並且需要域名可用) 並且域名解析配置為外網伺服器ip
OK,使用frpc命令重啟即可,通過www.chendahai.cn:6001,即可訪問內網的8080服務了。
多個web服務配置
如果想配置多個web服務怎麼辦,跟ssh類似,新增多個[web]即可,注意不能重名
服務端不需要做任何修改,修改ftpc.ini內容如下
[common]
server_addr = 39.105.97.50
server_port = 7000
[ssh]
type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6008 [web01] type = http local_port = 8080 custom_domains = www.chendahai.cn [web02] type = http local_port = 80 custom_domains = cd.chendahai.cn # 使用二級域名進行配置
之後訪問內網的80埠web服務可以通過cd.chendahai.cn:6001就可以訪問了,二級域名是需要配置域名解析的。
如下是配置了2個ssh和3個web服務,服務端日誌如下
結束
OK,內網穿透基本配置完畢
frp的使用和配置相當簡單,如有疑問或者想了解關於frp的其它功能可以檢視官方中文文件
補充
倘若想配置連線資料庫mysql
可以這麼操作,修改frpc.ini,新增如下配置
[mysql]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 3366
重啟,連線即可
切記,如果需要,記得新增安全組規則