目錄
背景:
frp 原理:
準備
部署
1、在公網伺服器上(阿裡雲)部署FRP 服務程式。
2、在内網電腦/伺服器/裝置 上部署FRP 用戶端程式。
配置
伺服器配置
伺服器網絡配置
伺服器FRP程式設定
用戶端配置
背景:
把自己本地的網站,服務分享到外網。可控性強。(想外網通路自己家裡的電腦/主機)
實作方法:FRP
frp 原理:
需要有公網的伺服器(例如阿裡雲)運作FRP 服務程式進行中間轉發。
我們的内網 電腦/裝置 上運作 FRP 用戶端,連接配接公網伺服器上的FRP服務程式,
我們外網通路時,通路公網伺服器上的FRP服務程式,FRP服務程式轉發給我們的内網FRP 用戶端,到達我們内網,消息就完成了從外網到内網的穿透。
準備
1、一個公網伺服器 (阿裡雲等)
FRP 程式
部署
linux:
winddows:
配置
開發端口
伺服器主機的端口開放:
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7500/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=8081/tcp --permanent
檢視所有打開的端口:
firewall-cmd --zone=public --list-ports
也可以直接關閉防火牆服務,因為阿裡雲有執行個體安全組規則配置相當于防火牆,關閉後就不用兩頭配置了,節約時間。
安全組端口開放:
2、開放7000、7500端口等其他frp需要用到的端口
批量開放端口:
因為是服務端,使用到的是:frps(啟動程式),frps.ini(配置檔案)
開機啟動設定:
“bind_port”表示用于用戶端和服務端連接配接的端口,這個端口号我們之後在配置用戶端的時候要用到。
“dashboard_port”是服務端儀表闆的端口,若使用7500端口,在配置完成服務啟動後可以通過浏覽器通路 x.x.x.x:7500 (其中x.x.x.x為VPS的IP)檢視frp服務運作資訊。
“token”是用于用戶端和服務端連接配接的密碼,請自行設定并記錄,稍後會用到。
“dashboard_user”和“dashboard_pwd”表示打開儀表闆頁面登入的使用者名和密碼,自行設定即可。
“vhost_http_port”和“vhost_https_port”用于反向代理HTTP主機時使用。
配置後,啟動,linux:
啟動後:監控服務端狀态位址:http://xx.xx.xx.xx:7500/
注意:FRP服務端和用戶端版本要一緻。
用戶端:frpc(啟動程式),frpc.ini(配置檔案)
标記配置檔案:
“server_addr”為服務端IP位址,填入即可。
“server_port”為伺服器端口,填入你設定的端口号即可,如果未改變就是7000
“token”是你在伺服器上設定的連接配接密碼,原樣填入即可。
更多配置說明:
下面說比較關鍵的點,以及一些額外配置:
1、添加端口監聽,比如 ssh 的端口監聽(用戶端配置:frpc.ini)
<col>
1
2
3
4
5
<code>[</code><code>ssh</code><code>]</code>
<code>type</code> <code>= tcp</code>
<code>local_ip = 127.0.0.1</code>
<code>local_port = 22</code>
<code>remote_port = 6000</code>
上面的 [ssh] 括号裡面的 ssh 隻是一個命名,命名的意思是,你可以随便寫什麼(不要寫什麼特殊字元就好,因為不一定支援)。
type:類型,有 tcp、udp 等,最常用的是 tcp
local_ip:用戶端(内網伺服器)監聽的 ip
local_port:用戶端(内網伺服器)監聽的端口
remote_port:公網伺服器的端口
配置了上面幾個的效果是:
我們通路公網伺服器的 remote_port 端口的時候,對應的網絡包會被轉發到 内網伺服器的 local_port 端口。
比如,上面的配置:我們想要 ssh 連接配接内網的時候,需要在使用 ssh 指令的時候指定連接配接公網伺服器的 6000 端口,
ssh -oPort=6000 [email protected]
我們想要新增端口監聽也很簡單,一般來說,按上面的格式複制粘貼到 frpc.ini 後面就可以了,好比如,内網有個 mysql 服務(預設端口 3306),我們想要通過公網的 3307 端口通路内網的 mysql,我們可以添加如下配置:
<code>[mysql]</code>
<code>local_port = 3306</code>
<code>remote_port = 3307</code>
2、github 上面的文檔沒有給出常駐程序的方法,我們可以使用 supervisor 來實作
supervisor 的安裝就不說了,對應的配置檔案如下:
6
7
8
9
10
<code>[program:frp]</code>
<code>process_name=(program_name)s_%(process_num)02d</code>
<code>command</code><code>=</code><code>/home/ruby/frp_0</code><code>.20.0_linux_amd64</code><code>/frpc</code> <code>-c </code><code>/home/ruby/frp_0</code><code>.20.0_linux_amd64</code><code>/frpc</code><code>.ini</code>
<code>directory=</code><code>/home/ruby/frp_0</code><code>.20.0_linux_amd64</code>
<code>autostart=</code><code>true</code>
<code>autorestart=</code><code>true</code>
<code>user=ruby</code>
<code>numprocs=1</code>
<code>redirect_stderr=</code><code>true</code>
<code>stdout_logfile=</code><code>/var/log/frp</code><code>.log</code>
當然,上面的相關路徑需要根據實際情況修改
使 supervisor 配置生效:
<code>sudo</code> <code>supervisorctl reread</code>
<code>sudo</code> <code>supervisorctl reload</code>
<code>sudo</code> <code>supervisorctl start frp:*</code>
這裡有個需要注意的坑是,如果 supervisor 開啟了 web 管理界面,謹慎點選 restart 來重新開機 frp 相關程序,因為不一定有權限,沒有權限的情況下,可能會導緻程序 stop 了,但是并沒有 start,因為 supervisorctl 需要權限來運作 frp 的程序。這樣一般情況下,是沒有什麼問題的,但是如果某一天,你改了一下 frp 配置,想在 supervisor web 管理界面重新開機 frp 程序,突然就發現再也連不上了,而内網伺服器又不在旁邊,那就隻能等到可以真機操作的時候再重新開機了。