1. 程式人生 > >frp內網穿透

frp內網穿透

什麼是FRP?

frp 是一個高效能的反向代理應用,可以幫助您輕鬆地進行內網穿透,對外網提供服務,支援 tcp, http, https 等協議型別,並且 web 服務支援根據域名進行路由轉發。

你需要掌握的知識:

  • 首先你需要知道一些網路知識,內網、外網、動態IP、域名等。
  • 你得有臺掛在公網上的一臺伺服器,現在伺服器都挺便宜的,阿里雲、騰訊雲等等。
  • 我說的這個frp是一個開源的專案,在GitHub上。可能會牽扯到別的東西。
  • 另外你需要會一些常用的linux系統命令。

這是frp的官方文件,上面有詳細的介紹。
frp分為server端與client端。顧名思義,server端放到伺服器上,client端放在你要穿透的機器上。

1先下載frp的軟體,為了方便,我們直接下載人家打包好的。

開啟這個網頁,選擇你需要的版本frp
frp版本
一般伺服器都是用的64位系統,所以直接選擇linux_amd64的就可以了,使用wget 命令下載。

wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
tar -zxvf frp_0.20.0_linux_amd64.tar.gz
cd frp_0.20.0_linux_amd64
外網主機作為服務端,可以刪掉不必要的客戶端檔案,使用rm指令刪除檔案。
rm -f frpc
rm -f frpc.ini

2下面是配置服務端

vim frps.ini

[common]
bind_port = 7000
#vhost_http_port = 8088
dashboard_port = 7500
#儀表板的使用者名稱和密碼都是可選的,如果未設定,則預設為admin。
dashboard_user = admin
dashboard_pwd = admin123
login_fail_exit = false

[common]部分是必須有的配置,其中bind_port是自己設定的frp服務端埠,vhost_http_port是自己設定的http訪問埠。(這個地方比較坑,所以還是不要使用http協議了,我統一使用了tcp協議)

儲存上面的配置後,使用以下指令啟動frp服務端。(文章下面會附上後臺執行frp)

./frps -c ./frps.ini

服務端到此就已經全部配置完畢。

3下面是配置客戶端

客戶端配置操作跟服務端配置差不多。

wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
tar -zxvf frp_0.20.0_linux_amd64.tar.gz
cd frp_0.20.0_linux_amd64
rm -f frps
rm -f frps.ini
vim frpc.ini

以下是客戶端配置:

[common]
server_addr = 你的伺服器IP地址
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[web01]
type = tcp
local_port = 8080
remote_port = 8080

[common]中的server_addr填frp服務端的ip(也就是外網主機的IP),server_port填frp服務端的bind_prot。

[ssh]中的local_port填客戶端的ssh埠,一般都是22。

[web01]是你要代理的web頁面,我這裡代理的是8080埠。

在這裡需要說明一點,local_port是客戶端的埠,remote_port是伺服器端的埠。

然後使用 ./frpc -c ./frpc.ini 來執行

4檢視成果

使用任意任意bash來連線你客戶端的ssh。

ssh -oPort=6000 使用者名稱@伺服器ip

如果要訪問網頁,瀏覽器中輸入 http://yourip:8080 ,即可檢視到你代理的網頁。

多說一句,當有域名的時候,你可以直接將伺服器ip替換成域名即可。

這是frp自帶的一個面板,可以檢視埠的連線情況。

5如何讓frp在後臺執行。

使用nohup可以讓程式在後臺執行。命令如下。

nohup ./frpc -c ./frpc.ini &

這也不是最終的解決方法,具體設定在: frp後臺啟動的幾個方法

6為什麼配置了,卻打不開網頁,連線不上呢

  • 首先確保有網。
  • 其次伺服器的安全組是不是沒有放開埠。