Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
如何识别和解决 Route 53 中的 DNSSEC 配置问题?
由于 DNSSEC 配置错误,支持 DNSSEC 的解析器(例如 8.8.8.8 或 1.1.1.1)的 DNS 解析会在 Amazon Route 53 中返回 SERVFAIL 响应。
解决方法
步骤 1: 确认 DNSSEC 配置导致了 DNS 解析失败
1. 运行 dig 命令,强制通过 Google DNS 解析器 (8.8.8.8) 进行查询。Google DNS 解析器支持 DNSSEC,如果 DNSSEC 配置错误,则会返回 SERVFAIL 响应。在以下示例命令中,将 dnssec.example.live 替换为您的域。
$ dig dnssec.example.live @8.8.8.8
前面命令的输出中有 SERVFAIL 响应:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> dnssec.example.live @8.8.8.8 ;; global options: +cmd ;; Got answer: ;; -->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 30778 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;dnssec.example.live. IN A ;; Query time: 24 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Thu Apr 21 18:13:57 UTC 2022 ;; MSG SIZE rcvd: 52
2. 再次运行 dig 命令并设置 cd 标志。cd 标志表示解析查询时无需检查 DNSSEC。在以下示例命令中,将 dnssec.example.live 替换为您的域。
$ dig dnssec.example.live @8.8.8.8 +cd
以下输出示例确定 DNSSEC 配置错误导致了 SERVFAIL 响应:
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> dnssec.example.live @8.8.8.8 +cd ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30235 ;; flags: qr rd ra cd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;dnssec.example.live. IN A ;; ANSWER SECTION: dnssec.example.live. 300 IN A 10.10.10.10 ;; Query time: 28 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Thu Apr 21 18:15:51 UTC 2022 ;; MSG SIZE rcvd: 68
步骤 2: 识别在父区域上创建的 DS 记录
**注意:**注册商添加了 TLD 的 DS 记录。因此,域“example.com”的父区域是“.com”区域。在此示例中,“dnssec.example.live”的父区域是“example.live”。
1. 运行 dig +trace 命令查看父区域的完整委派和名称服务器:
dig +trace dnssec.example.live >>truncated for convenience example.live. 3600 IN NS ns-xxx.awsdns-xx.net. example.live. 3600 IN NS ns-xxxx.awsdns-xx.org. example.live. 3600 IN NS ns-xxxx.awsdns-xx.co.uk. example.live. 3600 IN NS ns-xxx.awsdns-xx.com. example.live. 3600 IN DS 28927 13 2 133329D78FFCD003D39BAB9386FC18A49807584CD42042B3F53E1293 8F63C5A7 example.live. 3600 IN RRSIG DS 8 2 3600 20220508154435 20220417144435 32325 live. HzdzyWb8+8G1vbzMWR/7usqN5GihWpuToRKnWv3NSXPnzzYaAFrkuYlU pX8izzvnXk/uyiCOcMShQPKfybgviNkm+yfyTwm3rOso8amJDz0Jz8ml lz7jhgH0k04gLbbT7i8Ez8k8qPLB9MVb1jtVz7rjl6k4Y4m38aHUMy0D lxk= ;; Received 404 bytes from 65.22.22.1#53(v0n2.nic.live) in 1 ms dnssec.example.live. 10 IN NS ns-xxxx.awsdns-xx.org. dnssec.example.live. 10 IN NS ns-xxx.awsdns-xx.com. dnssec.example.live. 10 IN NS ns-xxxx.awsdns-xx.co.uk. dnssec.example.live. 10 IN NS ns-xxx.awsdns-xx.net. dnssec.example.live. 300 IN DS 41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581 dnssec.example.live. 300 IN RRSIG DS 13 3 300 20220421192820 20220421172320 53547 example.live. xdwGnGasWO2sbZQoAfYdZK2bAMcpYOjMR+mg2ilt00XDIwrPc/Qac1k2 Lc2NpAcFpgb3KbhzFxpd3Z7qXjPsvw== ;; Received 352 bytes from 205.251.197.102#53(ns-xxxx.awsdns-xx.org) in 6 ms dnssec.example.live. 300 IN A 1.1.1.1 dnssec.example.live. 300 IN RRSIG A 13 3 300 20220421192821 20220421172321 51615 dnssec.example.live. sMzXesnw+7pSHK2Mlkossyjml8sK7RhgKyu50J/P3/TEeChPzia8EfDb nbv3fFDxXQcbqPH+M+6KlQ7JrAmBig== ;; Received 187 bytes from 205.251.192.150#53(ns-xxx.awsdns-xx.com) in 14 ms
2. 要检查父区域的 DS 记录,请通过父区域的名称服务器运行以下查询(在本示例中是 example.live):
`$ dig DS dnssec.example.live @ns-xxx.awsdns-xx.net. +short ` 41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581
在父区域配置 DS 记录。然后,将 DS 记录与子区域公共 KSK 的哈希值进行核对,以确认 DS 记录准确无误。
步骤 3: 确认托管区的 DNSSEC 签名已启用
运行以下命令以确认托管区的 DNSSEC 签名已启用:
$ dig DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org +noall +answer +multiline
以下输出确认 DNSSEC 签名已启用,并列出了该区域中存在的公钥。
`; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org +noall +answer +multiline` `;; global options: +cmd` `dnssec.example.live. 3600 IN DNSKEY 256 3 13 (` ` 4xMqBH+v21Ria6T00Oq08fY8S3FxA9XFp34uDQm0dBpk` ` l6MwBNLZxpwpzS35yunxEYKwHkoPnMtu1bckRFauJg==` ` ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 51615` `dnssec.example.live. 3600 IN DNSKEY 257 3 13 (` ` pvoQ+Q2TvJKRuxdv8yuJhLkJhdrYUf/ZA2REWUTAXsfS` ` laK0MFDzCurSXXjlQxQoVGauDe5CwGufXl40fVzt/w==` ` ) ; KSK; alg = ECDSAP256SHA256 ; key id = 41670`
如果此命令没有得到响应,则表明该托管区未启用 DNSSEC 签名。如果 DNSSEC 未启用,则从注册商中删除 DS 记录。
步骤 4: 确定在父区域上创建的正确 DS 记录是什么
1. 运行以下命令来安装 bind 和 bind-ultis:
$ sudo yum install bind bind-utils -y
2. 运行以下命令以获取在父区域上创建的正确 DS 记录:
$ dig DNSKEY dnssec.example.live @ns-xxxx.awsdns-xx.org. | dnssec-dsfromkey -2 -f - dnssec.example.live dnssec.example.live. IN DS 41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580
步骤 5: 将第 4 步中获得的 DS 记录与第 2 步中获得的 DS 记录进行匹配
确保在父区域上创建的 DS 记录与您在第 4 步中获得的 DS 记录相匹配。
来自步骤 2:
41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2F A1893581 << Incorrect string
来自步骤 4:
41670 13 2 DE085966266F92FA81BBE2829AD9CD8C2C7FC8109D748F49B5A99D2FA1893580
在前面的示例中,在父区域配置的 DS 记录(来自第 2 步)的哈希值不正确。这种不匹配会导致 DNS 解析问题。
要解决此问题,请在注册商端(父区域)创建正确的 DS 记录值。对于在 Route 53 中注册的域,使用 get-dnssec 命令获取正确的信息,以便为您的域添加公钥。
**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
$ aws --region us-east-1 route53 get-dnssec --hosted-zone-id $hostedzone_id

相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前