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 示例图示

srvrecord

通过上述配置,客户端在查询 _xyzservice._tcp.example.com 时,DNS 会返回相应的子域名和端口信息,从而实现请求转发。

5. 总结

本文介绍了 DNS 的基本原理及 SRV 记录的用途。重点讲解了如何利用 SRV 实现 DNS 到不同端口的重定向。✅ SRV 是实现服务发现和负载分发的有力工具,尤其适合多服务共用 IP 的场景。

📌 小贴士:

  • ✅ SRV 记录必须与 A 记录配合使用
  • ⚠️ 不同子域名需分别配置 A 记录指向相同或不同 IP
  • ✅ SRV 支持权重和优先级控制流量分配
  • ❌ 不是所有服务都支持 SRV,需服务端主动查询 DNS

如果你正在构建微服务架构或多租户系统,SRV 记录将是一个值得考虑的配置方式。


原始标题:How to Redirect DNS to Different Ports