frp 是一個可用于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用,支持 tcp, udp, http, https 協(xié)議。
1.frp源碼地址:https://github.com/fatedier/frp
2.frp中文文檔:https://github.com/fatedier/frp/blob/master/README_zh.md
一、服務(wù)器安裝
1.go語言環(huán)境安裝
? 登陸網(wǎng)址https://golang.org下載源碼
? wgethttps://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
a.解壓縮文件:
? tar -C /usr/local -xzf /go1.8.3.linux-amd64.tar.
b.在文件~/.profile添加環(huán)境變量
? export PATH=$PATH:/usr/local/go/bin
? export GOROOT=/usr/local/go
? export GOBIN=$GOROOT/bin
? export PATH=$PATH:$GOBIN
? export GOPATH=$HOME/gopath (可選設(shè)置)
? 更新環(huán)境變量:source?/etc/profile
c.檢查go是否安裝完成 :go version 有顯示版本就是安裝完成
2.下載frp源碼
git clone https://github.com/fatedier/frp.git $GOPATH/src/github.com/fatedier/frp
a.進入源碼根目錄,執(zhí)行make命令開始編譯
如果系統(tǒng)報錯如下:
則執(zhí)行sudo apt-get install make make-guile -y ?安裝make make-guile
編譯完成后,bin目錄下是編譯好的可執(zhí)行文件,conf目錄下是示例配置文件。
1.將 ./bin/frps 和 ./conf/frps.ini 拷貝至服務(wù)器任意目錄。
2.將 ./bin/frpc 和 ./conf/frpc.ini 拷貝至客戶端任意目錄。
3.根據(jù)要實現(xiàn)的功能修改兩邊的配置文件。
4.在服務(wù)器B執(zhí)行nohup ./frps &或者nohup ./frps -c ./frps.ini &。
5.在服務(wù)器A執(zhí)行nohup ./frpc &或者nohup ./frpc -c ./frpc.ini &。
6.通過ssh -oPort=6000 {user}@x.x.x.x測試是否能夠成功連接服務(wù)器A({user}替換為服務(wù)器A上存在的真實用戶),或通過瀏覽器訪問自定義域名驗證 http 服務(wù)是否轉(zhuǎn)發(fā)成功。
以下轉(zhuǎn)自官網(wǎng)配置
tcp 端口轉(zhuǎn)發(fā)
轉(zhuǎn)發(fā) tcp 端口需要按照需求修改 frps 和 frpc 的配置文件。
[common]bind_addr= 0.0.0.0#用于接收 frpc 連接的端口bind_port= 7000log_file= ./frps.loglog_level= info#ssh 為代理的自定義名稱,可以有多個,不能重復(fù),和frpc中名稱對應(yīng)[ssh]auth_token= 123bind_addr= 0.0.0.0#最后將通過此端口訪問后端服務(wù)listen_port= 6000
[common]#frps 所在服務(wù)器綁定的IP地址server_addr= x.x.x.xserver_port= 7000log_file= ./frpc.loglog_level= info#用于身份驗證auth_token= 123#ssh 需要和 frps.ini 中配置一致[ssh]#需要轉(zhuǎn)發(fā)的本地端口local_port= 22#啟用加密,frpc與frps之間通信加密,默認(rèn)為 falseuse_encryption= true
如果只需要一對一的轉(zhuǎn)發(fā),例如服務(wù)器B的80端口轉(zhuǎn)發(fā)服務(wù)器A的8000端口,則只需要配置tcp 端口轉(zhuǎn)發(fā)即可,如果需要使服務(wù)器B的80端口可以轉(zhuǎn)發(fā)至多個web服務(wù)端口,則需要指定代理的類型為 http,并且在 frps 的配置文件中配置用于提供 http 轉(zhuǎn)發(fā)服務(wù)的端口。
按照如下的內(nèi)容修改配置文件后,需要將自定義域名的A 記錄解析到 [server_addr],如果 [server_addr] 是域名也可以將自定義域名的CNAME 記錄解析到 [server_addr]。
之后就可以通過自定義域名訪問到本地的多個 web 服務(wù)。
[common]bind_addr= 0.0.0.0bind_port= 7000#如果需要支持http類型的代理則需要指定一個端口vhost_http_port= 80log_file= ./frps.loglog_level= info[web01]#type 默認(rèn)為 tcp,這里需要特別指定為 httptype= httpauth_token= 123#自定義域名綁定,如果需要同時綁定多個以英文逗號分隔custom_domains= web01.yourdomain.com[web02]type= httpauth_token= 123custom_domains= web02.yourdomain.com
[common]server_addr= x.x.x.xserver_port= 7000log_file= ./frpc.loglog_level= infoauth_token= 123#自定義域名在 frps.ini 中配置,方便做統(tǒng)一管理[web01]type= httplocal_ip= 127.0.0.1local_port= 8000#可選是否加密use_encryption= true[web02]type= httplocal_ip= 127.0.0.1local_port= 8001