正文
问题引入
假设你现在有一个域名service.domain.com
中, 在端口1000
上跑了一个TCP服务, 现在用户使用客户端访问service.domain.com:1000
即可访问你提供的服务.
为了减少用户的输入, 同时规避一些错误, 你使用SRV解析来关联了上述的服务到domain.com(_service._tcp.domain.com)
, 通过SRV关联端口的功能, 你成功的令用户只需要在配置中填入domain.com
即可访问你的服务, 这个方案成功降低了用户输错端口号之类情况的概率.
为了加快用户访问服务的速度, 你使用若干不同服务商提供的若干个边缘计算或反向代理节点, 由于使用了不同的服务商提供的服务, 你得到的端口号五花八门, 得到的加速地区也不一定是单独的某个地区. 甚至有的服务商很大方的给你提供了全地区的BGP节点.
这时候你发现了第一个问题, 单个的SRV解析不能再满足你的需求了, 因为SRV记录一条只针对于一个加速节点, 在稍微了解后, 你了解到可以通过添加"多线解析"的方式来自动为不同区域的用户返回最近的节点, 对于同一个地区有多个节点的用户, 你还可以通过设置解析权重来达到负载均衡.
这时候你发现了一个严重的问题, 那就是通过SRV协议设置的服务不能被ping通, ping不认识SRV解析. 也就意味着如果某条线路出了问题你无法通过ping命令来定位具体出问题的线路.
解决思路与方案
在通过一番搜索后, 我了解到可以通过NSLOOKUP命令来获取当前计算机获取到的SRV解析信息.
nslookup
于是可以用下方命令来进行查询:
nslookup -type=SRV _service._tcp.domain.com
参考文章
SRV记录 - DNS学习笔记
nslookup(1) - Linux man page
验证是否已创建 SRV 域名系统 (DNS) 记录 - Windows Server | Microsoft Learn
nslookup详解(name server lookup)( 域名查询) - 范仁义 - 博客园
配置权重解析云解析服务 DNS用户指南智能线路解析华为云