基于frp二次開發(fā)

?FRP 內(nèi)網(wǎng)穿透

重要聲明,本開源基于https://github.com/fatedier/frp,在原本基礎(chǔ)功能上添加認(rèn)證相關(guān)功能

?基于v0.30.0 進(jìn)行修改,git url https://github.com/fatedier/frp/tree/v0.30.0

改進(jìn)項(xiàng)目地址:https://github.com/samrtcloud/frp


windown 編譯

cd frp根路徑

gmake


擴(kuò)展功能說明

1. 客戶端token認(rèn)證

**功能場景說明**

客戶端預(yù)先配置一個token,在客戶端啟動連接到服務(wù)端時,服務(wù)端會驗(yàn)證客戶端的token是否合法,如果不合法則無法連接成功,跟官方的token、OIDC認(rèn)證一樣,只不過這里是基于簡單http認(rèn)證,方便自家系統(tǒng)進(jìn)行對接認(rèn)證。

**客戶端配置**

[common]

server_addr = 192.168.0.100

server_port = 8100

pritoken = 2b33386cb6d14ab7b5f6738f7fc1704c

```

**服務(wù)端配置**

```

[common]

bind_addr = 0.0.0.0

bind_port = 7000

token_auth_url = http://127.0.0.1:8080/tunnel/token/check?token=

# port_check_url 后續(xù)會用到

port_check_url = http://127.0.0.1:8080/tunnel/port/check

```

**驗(yàn)證流程**

1. 客戶端預(yù)先寫入[pritoken]值

2. 啟動客戶端,讓客戶端連接到服務(wù)端

3. 服務(wù)端收到客戶端的連接,此時服務(wù)端會調(diào)用[token_auth_url]的url進(jìn)行驗(yàn)證,是get請求,驗(yàn)證的完整url是http://127.0.0.1:8080/tunnel/token/check?token=2b33386cb6d14ab7b5f6738f7fc1704c

4. http://127.0.0.1:8080/tunnel/token/check?token=2b33386cb6d14ab7b5f6738f7fc1704c 的返回內(nèi)容是字符串 ok 表示通過,非 ok 字符串都認(rèn)證失敗,認(rèn)證失敗客戶端無法連接成功。

**認(rèn)證方式優(yōu)點(diǎn)**

token_auth_url 的url隨意修改,方便接入自家系統(tǒng).

2. 客戶端遠(yuǎn)程端口映射驗(yàn)證

**功能場景說明**

不希望客戶端隨意指定遠(yuǎn)程端口,比如客戶端配置了[remote_port = 9999],frps服務(wù)器會開啟9999端口監(jiān)聽。這個機(jī)制是比較危險的,如果有客戶端惡意指定遠(yuǎn)程端口,frps根本無法控制,而且frps做不到指定客戶端只能指定映射指定的遠(yuǎn)程端口。

比如:A客戶端只能配置[remote_port = 9999],配置[remote_port = 8888]無效。

這里frps就要就要驗(yàn)證A客戶端有沒有權(quán)限配置9999、8888等遠(yuǎn)程端口。

**客戶端配置**

```

# 此名字很重要,后續(xù)會傳到服務(wù)端,代表1256252144558809089代理映射了remote_port=9999的遠(yuǎn)程端口

[1256252144558809089]

type = tcp

local_ip = 192.168.0.100

local_port = 80

remote_port = 9999

```

**服務(wù)端配置**

```

[common]

bind_port = 8100

token_auth_url = http://127.0.0.1:8080/tunnel/token/check?token=

# 此url用來驗(yàn)證客戶端[1256252144558809089]的代理信息是否合法

port_check_url = http://127.0.0.1:8080/tunnel/port/check

```

**驗(yàn)證流程**

1. 客戶端預(yù)先寫入[1256252144558809089]代理名稱和[remote_port]遠(yuǎn)程端口信息

2. 啟動客戶端,讓客戶端連接到服務(wù)端

3. 服務(wù)端收到客戶端的連接,此時服務(wù)端會調(diào)用[port_check_url]的url進(jìn)行驗(yàn)證,是get請求,驗(yàn)證的完整url是http://127.0.0.1:8080/tunnel/port/check?proxyname=1256252144558809089&remoteport=9999

4. http://127.0.0.1:8080/tunnel/port/check?proxyname=1256252144558809089&remoteport=9999 的返回內(nèi)容是字符串 ok 表示通過,非 ok 字符串都認(rèn)證失敗,認(rèn)證失敗端口無法代理成功。

**認(rèn)證方式優(yōu)點(diǎn)**

1. port_check_url 的url隨意修改,方便接入自家系統(tǒng).

2. 客戶端的代理名稱可自行修改,比如會加一些認(rèn)證信息,再配合調(diào)用http協(xié)議進(jìn)行驗(yàn)證,很容易進(jìn)行控制指定的客戶端只能指定對應(yīng)的遠(yuǎn)程端口。

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

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