DNS 配置

OpenResty Edge 可以当做 DNS 的权威解析服务器。

如下示意图:

在不考虑 DNS 缓存的情况下,客户端解析 example.com 需要经过这两个环节:

  1. 查询根域名服务器,获取 example.com 的权威服务器地址。
  2. 查询 example.com 的权威服务器,获取 example.com 的地址。

如果希望使用 OpenResty Edge 网关来实现权威服务器,需要将权威服务器地址指向网关节点

启用 DNS

  1. 配置防火墙以允许 53 端口。具体配置方法请参考您的云服务提供商文档。

  2. 确保 OpenResty Edge 节点上的 UDP 53 端口和 TCP 53 端口没有被其他程序占用。

    sudo netstat -tupln | grep ":53"
    

    在某些情况下,53 端口可能被 systemd-resolved 使用。如果是这样,请停止此服务并修改配置。

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    sudo tee /etc/resolv.conf > /dev/null <<EOF
    nameserver 223.5.5.5
    nameserver 8.8.8.8
    EOF
    

    根据需要修改 nameserver 地址。

  3. 全局配置 > DNS 页面启用权威 DNS 服务器。

    要启用 DNS over TCP,请将选项切换为 启用

  4. 启用 权威 DNS 服务器 后发布更改。

  5. 验证 OpenResty Edge 节点的监听状态。

    $ sudo netstat -tupln | grep ":53"
    udp        0      0 0.0.0.0:53              0.0.0.0:*                           69705/nginx: master
    udp        0      0 0.0.0.0:53              0.0.0.0:*                           69705/nginx: master
    

在 OpenResty Edge 节点机器上运行 netstat -tupln | grep ":53" 以验证该端口正在被 OpenResty Edge 节点监听。

创建 DNS 应用

选择 DNS 选项卡,点击创建新的 DNS 应用。

按照提示填写解析的域名和域名服务器,如 example.com 和 ns1.example.com/ns2.example.com。

如下图所示,新建一个 DNS 应用并设置域名解析服务器

如下图所示,给域名解析服务器添加 A 记录。这里的 IP 地址是 OpenResty Edge Node 的 IP 地址。 你也可以直接从 OR GateWay 选择一个网关名称,这个名称会被解析成对应的 IP 地址。 注意,这里设置的 IP 地址将用于后续在域名提供商中修改域名的 DNS 权威服务器。

这里你可以添加更多的其它的 DNS 记录,比如 www 的域名记录, @ 记录解析到主域名。

解析到网关节点

在域名提供商的管理控制台里,将域名服务器(如 n1s.example.com)的解析指到网关节点上。

添加 DNS 记录

在 DNS 应用列表中选择创建好的 DNS 应用,点击添加 DNS 记录。

支持添加的 DNS 记录类型有:A、AAAA、CNAME、MX、TXT、NS,同时可以根据用户网络类型解析到不同的网关节点,

目前可选择的网络类型有国家,地区以及运营商。

自动选择合适的 DNS 记录

在创建 DNS 记录的时候可以选择该条记录对应的网段,Edge 会通过请求的 IP 地址返回对应的 DNS 记录

或者通过 cidr 的方式

计算推荐配置

如果不想手动配置每条 DNS 记录,可以使用 计算推荐配置

填入配置,会根据配置生成合适的 DNS 记录

DNS 记录优先级

OpenResty Edge 可以针对不同的网络来源,配置不同的 DNS 解析记录。比如配置如下两条 DNS 记录:

  1. 来自北京的 DNS 请求,解析到 1.1.1.1 这个 IP
  2. 来自中国的 DNS 请求,解析到 2.2.2.2 这个 IP

针对这种存在包含关系的 DNS 记录,OpenResty Edge 会按照精确度优先的原则来解析。 比如:

  1. 如果客户端来自北京,则会应用规则 1,解析到 1.1.1.1
  2. 如果客户端来自非北京的中国其他地区,则会应用规则 2,解析到 2.2.2.2

DNS 记录支持主备设置

类型 + 记录 + 网络类型 完全相同的 DNS 记录可以设置互为主备

默认只使用主 DNS 记录,以下情况会使用备 DNS 记录:

  1. 没有主 DNS 记录
  2. 开启了健康检查后,主 DNS 记录不健康

DNS 绑定到 k8s 集群

DNS 绑定到 k8s 集群后会自动管理 DNS 记录

新建 DNS 应用时打开 map to kubernetes 开关,选择 k8s 集群,点击创建按钮。

NSID

NSID(Name Server Identifier)是 DNS 协议的一个扩展机制(定义于 RFC 5001),允许 DNS 服务器在响应中携带一个标识符,用于标识处理该请求的具体服务器节点。在多节点部署场景下,NSID 对于调试和排查问题非常有用,可以帮助快速定位是哪个 Edge Node 处理了特定的 DNS 请求。

此扩展于 26.3.1 版本中首次引入。

配置 NSID

  1. 修改 Edge Node 的配置文件 /usr/local/oredge-node/conf/config.ini,添加如下配置:

    [dns]
    nsid = "YOUR_NSID"
    

    YOUR_NSID 替换为该节点的标识符,例如节点的主机名或自定义的唯一标识字符串。

  2. 重启服务使配置生效:

    systemctl restart upgrade-oredge-node
    

验证 NSID

配置完成后,可以使用 dig 命令携带 NSID 选项来验证配置是否生效:

dig @127.0.0.1 your.domain.name +nsid

如果配置正确,响应中的 OPT PSEUDOSECTION 部分将包含所设置的 NSID 值。

故障排查

  1. 首先,在 OpenResty Edge 节点上执行 dig @127.0.0.1 your.domain.name,确保 OpenResty Edge 节点的 DNS 服务按预期运行。
  2. 其次,在另一台机器上执行 dig @xx.xx.xx.xx your.domain.name,其中 xx.xx.xx.xx 是上一步中 OpenResty Edge 节点的公网 IP 地址,以确保通过公网访问 OpenResty Edge 节点的 DNS 服务正常工作。
  3. 最后,执行 dig your.domain.name 以确保通过公共 DNS 服务器的递归解析正常工作。