You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04 LTS DNS服务器DNSSEC签名失败问题求助

Ubuntu 22.04 LTS DNS服务器DNSSEC签名失败问题求助

环境信息

  • 系统:Ubuntu 22.04 LTS(单服务器部署DNS、SPF、邮件、防火墙等)
  • 服务器IP:192.168.122.189
  • 测试域名:jetj.ltd
  • 主机名:mail

配置文件内容

db.jetj.ltd

;
; BIND data file for jetj.ltd
;
$INCLUDE /etc/bind/keys/Kjetj.ltd.+008+12125.key

$TTL 86400
@       IN      SOA     mail.jetj.ltd. karti.jetj.ltd. (
2023082501 ; Serial
3600       ; Refresh
1800       ; Retry
604800     ; Expire
86400      ; Minimum TTL
)

; Name Server (NS) records
@       IN      NS      mail.jetj.ltd.
@       IN      A       192.168.122.189

; A record for the domain's nameserver
mail   IN      A       192.168.122.189

; Mail Exchanger (MX) record
@       IN      MX      10 mail.jetj.ltd.

named.conf.options

options {
directory "/var/cache/bind";
recursion yes;
listen-on { 192.168.122.189; };
allow-query { localhost; 192.168.122.0/24; }; // Allow queries from localhost and your local network
forwarders {
8.8.8.8;
8.8.4.4;
};

//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys.
//========================================================================
dnssec-validation auto;

listen-on-v6 { any; };
};

trust-anchors {
"." initial-key 256 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1ihz0=";
};

named.conf.local

zone "jetj.ltd" {
type master;
file "/etc/bind/db.jetj.ltd";
dnssec-policy default;
inline-signing yes;
};

zone "122.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
dnssec-policy default;
inline-signing yes;
};

问题描述

我已经完成以下操作:

  1. 执行named-checkconf未检测到任何错误
  2. 通过命令生成KSK密钥:
    sudo dnssec-keygen -a RSASHA256 -b 2048 -f KSK -L 9000000 jetj.ltd
    
  3. 将生成的密钥文件Kjetj.ltd.+008+12125.key通过$INCLUDE引入到db.jetj.ltd中

但执行dnssec-signzone命令时总是报错:

karti@mail:/etc/bind$ dnssec-signzone -S -K keys/ db.jetj.ltd
dnssec-signzone: fatal: No signing keys specified or found.

密钥文件内容如下:

; This is a key-signing key, keyid 12125, for jetj.ltd.
; Created: 20230905194204 (Tue Sep  5 19:42:04 2023)
; Publish: 20230905194204 (Tue Sep  5 19:42:04 2023)
; Activate: 20230905194204 (Tue Sep  5 19:42:04 2023)
jetj.ltd. 9000000 IN DNSKEY 257 3 8 AwEAAbSbc3FDpa6u5FWnxza3wBzY+j6/zj6fs/5UWzzC5EmVugKloM9H 2j+2y6K8ShWDj744COlOFA+JfbFHzhFWDeg/MpXyKX8ah5K2rB3apdQc 48BytgoXgflyBHO9/tHJOlkNDNiL7Nk3VBLABl2MZr2+XM5bQV9Bx8bA tBI+8+yPHMcq9hJ8ZZW8Fc2NENWw1cS+4hJpiNEM3vBVanRBKAfczZR5 Odx4qGoDBatDR00dfNzlrpr3cvy66giNEbDv2APPMO8YD6rTeT0GyMXM gQ1SULHxAo3G8GmzEiAd6rplKA4tZ+TXIPHZqx8/5Nu6moizXntxGOCU 4egalBQoQKs=

我已经卡这个问题一周了,非常感谢任何帮助和建议!


解决方案

嘿,我来帮你梳理下问题所在,你遇到的这个“No signing keys specified or found”错误其实挺常见的,主要是几个小细节没处理好,咱们一步步来解决:

问题核心原因

你现在只生成了KSK(密钥签名密钥),但DNSSEC签名需要两种密钥配合:KSK负责签名DNSKEY记录,而**ZSK(区域签名密钥)**才是用来签名区域内其他所有记录的。另外还要确认密钥的路径、权限有没有问题,这些都是容易踩的坑。

分步解决步骤

1. 先检查密钥的路径和权限

你执行签名命令的时候用了-K keys/,先确认你的密钥文件是不是真的在/etc/bind/keys/目录里?跑个命令看看:

ls -l /etc/bind/keys/

要确保Kjetj.ltd.+008+12125.key和对应的.private密钥文件都在这儿,而且权限得是bind用户能访问的:

sudo chown bind:bind /etc/bind/keys/Kjetj.ltd.+008+12125.*
sudo chmod 640 /etc/bind/keys/Kjetj.ltd.+008+12125.*

2. 生成缺失的ZSK密钥

现在你只有KSK,必须生成ZSK才能完成整个区域的签名,执行这条命令:

sudo dnssec-keygen -a RSASHA256 -b 2048 -L 9000000 jetj.ltd

这条命令会生成另一组密钥(文件名类似Kjetj.ltd.+008+xxxx.key和.private),把它们也移到/etc/bind/keys/目录,同样设置好权限。

3. 选择自动签名或手动签名

其实你在named.conf.local里已经开了dnssec-policy default和inline-signing yes,这时候BIND可以自动帮你完成签名,根本不用手动跑dnssec-signzone,试试这个更简单的方法:

sudo systemctl restart bind9

重启后,BIND会自动用你生成的KSK和ZSK对区域进行签名,之后可以用这条命令验证:

dig jetj.ltd DNSKEY @192.168.122.189

如果能看到DNSKEY记录,就说明签名成功了。

要是你非得手动签名的话,得在命令里明确指定KSK,让它自动找ZSK:

cd /etc/bind
dnssec-signzone -S -K keys/ -k Kjetj.ltd.+008+12125 db.jetj.ltd

签名完成后会生成db.jetj.ltd.signed文件,记得把named.conf.local里的zone配置里的file改成这个签名后的文件,再重启BIND。

4. 最后验证一下

不管用哪种方式,签名完成后可以用dig命令查一下区域的DS记录或者DNSKEY记录,确认签名生效了。


备注:内容来源于stack exchange,提问作者Kartibok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:33:07