内网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查询请求的流程。