天天看點

【FRP】内網穿透|外網通路内網的方法|公網通路私網|内網

目錄

​​背景:​​

​​frp  原理:​​

​​準備​​

​​部署​​

​​1、在公網伺服器上(阿裡雲)部署FRP 服務程式。​​

​​2、在内網電腦/伺服器/裝置 上部署FRP 用戶端程式。​​

​​配置​​

​​伺服器配置​​

​​伺服器網絡配置​​

​​伺服器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

也可以直接關閉防火牆服務,因為阿裡雲有執行個體安全組規則配置相當于防火牆,關閉後就不用兩頭配置了,節約時間。

安全組端口開放:

【FRP】内網穿透|外網通路内網的方法|公網通路私網|内網

2、開放7000、7500端口等其他frp需要用到的端口

【FRP】内網穿透|外網通路内網的方法|公網通路私網|内網

批量開放端口:

【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 程序,突然就發現再也連不上了,而内網伺服器又不在旁邊,那就隻能等到可以真機操作的時候再重新開機了。

繼續閱讀