frp 原理與代碼分析(2):內網udp服務穿透之轉發DNS查詢請求

內網udp服務穿透原理如下圖:

frp 內網udp穿透原理

內網udp穿透的使用場景如下:

用戶想通過內網的機器查詢www.google.com 的DNS 信息,但是內網的ip和端口,在外網是訪問不了的。這時候使用frp配置udp 代理。配置完後,用戶可以通過,例如如下的命令查詢google 的DNS,這時候就是通過內網查詢DNS 信息。

dig @106.12.17.238 -p 6000 www.google.com

106.12.17.238:6000 就是frps 建立的udp 代理監聽的ip 和端口。106.12.17.238是公網ip。

代理的啓動流程如下:

1. frpc 通過tcp連接登錄frps,該連接稱爲控制連接,並同時建立另一個tcp連接,稱爲工作連接。

2. frpc通過控制連接發送建立udp代理的消息給frps,請求frps建立udp代理。同時自己建立本地udp代理。

3. frps收到請求,建立udp代理,監聽用戶udp消息(即用戶dig 命令的消息)

用戶執行“dig @106.12.17.238 -p 6000 www.google.com” 命令查詢DNS 信息,frps 與frpc 的消息交互流程如下:

1. frps 的udp 代理收到“dig”命令的dns 消息,它把dns 消息編碼成自定義消息UdpPacket,通過工作連接發送給frpc 的udp 代理。

2. frpc 的udp 代理收到UdpPacket ,它把該消息解碼成dns消息,發送給DNS server。

3. DNS server 迴響應消息給frpc 的udp 代理,該代理收到響應消息,把該消息編碼成UdpPacket,發送給frps 的udp 代理。

4. frps 的udp 代理收到UdpPacket消息,解碼成dns 消息,發送給用戶(dig 命令程序)。

上述的步驟,即udp代理轉發dns查詢請求的流程。

 

 

 

發佈了8 篇原創文章 · 獲贊 4 · 訪問量 4215
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章