我需要通过代理服务器在第 4 层路由 TCP 和 UDP 数据包(即,对于 TCP 数据包,没有 TLS 终止)。所有数据包的目标地址都不固定。换句话说,路由需要是动态的,并且每个数据包的目的地可以根据数据包中的目标主机名/IP 来确定。因此,TCP 数据包可以轻松地基于 SNI 进行路由。但是,UDP 数据包不能,因为 SNI 通常用于 TCP,而 UDP 中似乎不存在其等效项。
我正在查看 Envoy 代理的 DestinationIPInput 过滤器来解决这个问题,但它基于 HAProxy 代理协议,该协议似乎不支持 UDP。
是否有一个标准的代理协议,代理服务器可以使用该协议确定从客户端发送到它的UDP数据包的目标服务器地址(和端口)(客户端也可以按照相同的协议发送数据包)?如果相同的协议也能支持 TCP/HTTP 代理那就太好了。
每个数据包的目的地可以根据数据包中的目标主机名/IP 确定。因此,TCP 数据包可以轻松地基于 SNI 进行路由。
TCP 数据包中没有 SNI。
TLS中有SNI,但并非所有TCP都是TLS。 并且,它仅存在于 TCP 握手完成后数据包的应用程序有效负载中,即仅在 TCP 握手后的第一个数据包中才能获取此信息。