frp 原理与代码分析(2):内网udp服务穿透之转发DNS查询请求

时间:2024-03-31 09:09:49

内网udp服务穿透原理如下图:

frp 原理与代码分析(2):内网udp服务穿透之转发DNS查询请求
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查询请求的流程。