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
重啟,連接即可
切記,如果需要,記得添加安全組規則