內(nèi)網(wǎng)穿透frp之進階配置——stcp與p2p模式配置

Frp的TCP模式問題,這里主要存在2個問題。

第一個是安全問題:

試想一下,frp的tcp模式相當于你的設(shè)備直接向公網(wǎng)暴露了一個tcp端口。任何設(shè)備都可以嘗試連接這個端口。這里就會有很大的安全風險。

第二個問題是網(wǎng)絡(luò)問題:

我的所有請求都需要進行frp的服務器進行中轉(zhuǎn),這里勢必會造成比較大的網(wǎng)絡(luò)延時。以及耗掉服務器流量,這對我們的服務響應速度和經(jīng)濟價值會造成較大影響。

解決安全問題(stcp)模式

對于安全問題,frp的思路是,既然這些服務有可能被壞人攻擊,那我們只要限制特定設(shè)備能夠使用這個端口就好了。

那么問題來了,我怎么知道哪些設(shè)備是允許使用的呢?

服務端配置?那就又陷入了內(nèi)網(wǎng)穿透的問題。

最簡單的方法是使用密鑰驗證。這就是frp的Secret TCP(stcp)模式的思路。

如下圖所示,frp客戶端1需要暴露一個tcp端口。于是他在向服務端注冊時,額外傳了一個密鑰。

所有其他設(shè)備期望訪問這個端口,必須要先驗證這個密鑰。

這樣一來,我們就需要在發(fā)起請求的設(shè)備上也配置一個frp客戶端,通過這個客戶端帶著密鑰發(fā)起請求。


如何配置

服務端:配置仍然同默認配置一致,直接運行即可

客戶端1配置:需要將type改為stcp,并且增加一個sk字段。這里不需要遠端端口,因為不公開

# frpc.ini 配置:

[common]

# 你的frp服務器的公網(wǎng)ip

server_addr = x.x.x.x

# 你的frp服務器的默認端口

server_port = 7000

[rdp]

type = stcp

# 只有 sk 一致的用戶才能訪問到此服務

sk = abcdefg

local_ip = 127.0.0.1

# 遠程桌面的本地端口號

local_port = 3389

客戶端2配置:

# frpc.ini

[common]

# 你的frp服務器的公網(wǎng)ip

server_addr = x.x.x.x

# 你的frp服務器的默認端口

server_port = 7000

[rdp_visitor]

type = stcp

# stcp 的訪問者

role = visitor

# 要訪問的 stcp 代理的名字

server_name = rdp

# 只有 sk 一致的用戶才能訪問到此服務

sk = abcdefg

# 綁定本地端口用于訪問 遠程桌面 服務

bind_addr = 127.0.0.1

bind_port = 6000

此時,你在客戶端2,使用127.0.0.1:6000即可訪問客戶端1的遠程服務。


解決網(wǎng)絡(luò)問題(xtcp)模式

思考一下,我們的frp服務器主要目的是為了解決兩臺設(shè)備相互識別的情況。在正式運行時,其實并不需要服務端做什么事情。

frp客戶端就好比兩個相親的對象,frp服務端是媒婆。媒婆介紹完之后,就應該有相親對象自己聊天了。

這個就是點對點模式(p2p)。在frp中,這個可以通過設(shè)置xtcp實現(xiàn)。

如何配置

服務端:配置需要增加一個udp端口 7001,增加完之后就是如下

# frps.ini

[common]

bind_port = 7000

bind_udp_port = 7001

客戶端1:配置需要將type改為xtcp即可

# frpc.ini

[common]

# 你的frp服務器的公網(wǎng)ip

server_addr = x.x.x.x

# 你的frp服務器的默認端口

server_port = 7000

[rdp]

type = xtcp

# 只有 sk 一致的用戶才能訪問到此服務

sk = abcdefg

local_ip = 127.0.0.1

# 遠程桌面的本地端口號

local_port = 3389

客戶端2:配置需要將type改為xtcp即可

# frpc.ini

[common]

# 你的frp服務器的公網(wǎng)ip

server_addr = x.x.x.x

# 你的frp服務器的默認端口

server_port = 7000

[rdp_visitor]

type = xtcp

# stcp 的訪問者

role = visitor

# 要訪問的 stcp 代理的名字

server_name = rdp

# 只有 sk 一致的用戶才能訪問到此服務

sk = abcdefg

# 綁定本地端口用于訪問 遠程桌面 服務

bind_addr = 127.0.0.1

bind_port = 6000


此時,你在客戶端2,使用同樣的方式,以127.0.0.1:6000即可訪問客戶端1的遠程服務。

不過需要注意的是,目前frp的p2p服務還不完善,很多nat設(shè)備還是不能夠穿透的。

此時大家還是需要切換回stcp來使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容