內網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查詢請求的流程。