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

如何为dnspython生成DNS更新用TSIG密钥环?(企业用krb5)

解决dnspython的TSIG密钥生成与Kerberos 5适配问题

我明白你的困惑——官方文档只给了更新操作的示例,却没说密钥环怎么来,而且你们企业用Kerberos 5(krb5)认证,这和普通的TSIG密钥生成还不一样,我分两种情况给你讲清楚:

一、常规TSIG密钥的生成方法(非krb5场景)

如果你的DNS服务器用的是普通的HMAC-based TSIG认证,密钥可以通过BIND自带的dnssec-keygen工具生成,步骤如下:

  • 执行生成命令(以HMAC-SHA256算法、256位密钥为例):
    dnssec-keygen -a HMAC-SHA256 -b 256 -n HOST host-example.
    
    参数说明:
    • -a 指定哈希算法(常用HMAC-SHA256、HMAC-SHA512)
    • -b 指定密钥长度(对应算法的推荐长度,比如SHA256用256位)
    • -n HOST 表示生成的是主机类型的密钥
  • 命令执行后会生成两个文件(比如Khost-example.+163+XXXXXX.key和Khost-example.+163+XXXXXX.private),打开.private文件,里面的Key:字段后面的字符串就是你需要传入dns.tsigkeyring.from_text()的密钥内容。

比如生成的.private文件内容类似:

Private-key-format: v1.3
Algorithm: 163 (HMAC_SHA256)
Key: XXXXXXXXXXXXXXXXXXXXXX==
Bits: AAA=
Created: XXXXXXXXXX
Publish: XXXXXXXXXX
Activate: XXXXXXXXXX

你只需要把Key:后面的字符串拿出来,放到代码的keyring字典里即可。

二、适配Kerberos 5(krb5)体系的GSS-TSIG用法

因为你们企业用krb5认证,DNS服务器大概率配置的是GSS-TSIG(基于Kerberos的TSIG扩展),这时候你不需要手动生成TSIG密钥,而是用Kerberos票据来完成认证,步骤如下:

  1. 先获取Kerberos票据:
    在命令行执行kinit命令,用你的企业Kerberos主体登录:
    kinit your-username@YOUR_COMPANY_REALM.COM
    
    输入密码后,票据会缓存到本地。
  2. 修改dnspython代码:
    不需要创建keyring,而是在初始化dns.update.Update时指定gss=True,示例代码如下:
    import dns.update
    import dns.query
    import sys
    
    # 初始化更新对象,启用GSS-TSIG认证
    update = dns.update.Update('dyn.test.example', gss=True)
    # 添加/替换A记录
    update.replace('host', 300, 'a', sys.argv[1])
    # 发送更新请求到DNS服务器(替换成你的企业DNS服务器地址)
    response = dns.query.tcp(update, 'your-dns-server.company.com')
    # 打印响应结果
    print(f"更新响应: {response}")
    

注意事项

  • 确保你的Kerberos主体拥有修改目标DNS区域(dyn.test.example)的权限,需要联系企业DNS管理员配置。
  • 如果是在脚本中自动获取票据,可以用subprocess调用kinit,或者使用python-gssapi库在代码内处理Kerberos认证。

内容的提问来源于stack exchange,提问作者Majus Misiak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:33:28