1. 概述
本文将介绍 DNS 记录的常见类型,并重点讲解如何利用 SRV 记录将 DNS 请求重定向到不同的端口。
2. DNS 简介
在网络通信中,设备通过 IP 地址进行标识。然而,人类更习惯使用域名(如 google.com)而非 IP 地址(如 86.112.245.76)。因此,需要一个机制将域名映射为对应的 IP 地址,这就是 DNS(Domain Name System,域名系统)的作用。
DNS 记录不仅包含 IP 地址,还可能包括其他信息。常见的记录类型包括:
- A 记录:将域名映射到 IPv4 地址
- AAAA:映射到 IPv6 地址
- CNAME:别名记录,将一个域名指向另一个域名
- MX:邮件服务器记录
- TXT:文本信息,常用于 SPF、DKIM 等邮件验证
- SRV:服务记录,指定特定服务的地址和端口
本文重点讨论 SRV 记录,它是实现 DNS 到不同端口转发的关键。
3. SRV 记录详解
SRV(Service Record)是一种 DNS 记录类型,用于指定某项服务的主机和端口信息。它常用于如 SIP、XMPP、LDAP 等服务的定位。
3.1 SRV 记录字段说明
字段 | 说明 |
---|---|
Name | 域名,通常以点结尾 |
Service | 服务名称缩写(如 _sip ) |
Protocol | 协议类型(如 _tcp 或 _udp ) |
TTL | 缓存时间(单位为秒) |
Priority | 优先级,数值越小优先级越高 |
Weight | 权重,用于相同优先级下的流量分配 |
Port | 服务监听的端口号 |
Target | 提供服务的主机名 |
3.2 SRV 记录格式
_Service._Protocol.Name. TTL IN SRV Priority Weight Port Target.
✅ 示例:
_sip._tcp.example.com. 18000 IN SRV 10 40 5060 sipserver.example.com.
⚠️ 注意:SRV 记录必须与 A 记录配合使用,因为 Target 必须能解析为 IP 地址。
4. 使用 SRV 记录实现 DNS 到不同端口的重定向
4.1 需求场景
假设我们有以下需求:
子域名 | 对应端口 |
---|---|
sub1.example.com | 5555 |
sub2.example.com | 5556 |
sub3.example.com | 5557 |
所有子域名都指向同一个公网 IP,但需要将请求路由到不同的端口。
4.2 解决方案
我们可以通过创建 SRV 记录来实现:
_xyzservice._tcp.example.com. 18000 IN SRV 10 40 5555 sub1.example.com.
_xyzservice._tcp.example.com. 18000 IN SRV 10 30 5556 sub2.example.com.
_xyzservice._tcp.example.com. 18000 IN SRV 10 30 5557 sub3.example.com.
同时,为每个子域名配置 A 记录以解析 IP:
sub1.example.com. 18000 IN A 192.168.1.100
sub2.example.com. 18000 IN A 192.168.1.100
sub3.example.com. 18000 IN A 192.168.1.100
4.3 示例图示
通过上述配置,客户端在查询 _xyzservice._tcp.example.com
时,DNS 会返回相应的子域名和端口信息,从而实现请求转发。
5. 总结
本文介绍了 DNS 的基本原理及 SRV 记录的用途。重点讲解了如何利用 SRV 实现 DNS 到不同端口的重定向。✅ SRV 是实现服务发现和负载分发的有力工具,尤其适合多服务共用 IP 的场景。
📌 小贴士:
- ✅ SRV 记录必须与 A 记录配合使用
- ⚠️ 不同子域名需分别配置 A 记录指向相同或不同 IP
- ✅ SRV 支持权重和优先级控制流量分配
- ❌ 不是所有服务都支持 SRV,需服务端主动查询 DNS
如果你正在构建微服务架构或多租户系统,SRV 记录将是一个值得考虑的配置方式。