AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1010273
Accepted
treegor
treegor
Asked: 2020-04-01 06:59:00 +0800 CST2020-04-01 06:59:00 +0800 CST 2020-04-01 06:59:00 +0800 CST

Bind 9 和 Samba 4 中的 in-addr.arpa 区域委托作为具有 DDNS 的 AD DC

  • 772

环境和目标

在我的测试 KVM 实验室中,我有一个虚拟网络172.16.50/24,在这个网络中,我有 2 个运行 Bind 9 和 ISC DHCP 服务器的 Centos 7 VM:

  • Мастер DNS :controller.wsvirt.home (172.16.50.2)
  • 从属 DNS:controller2.wsvirt.home (172.16.50.3)

网络中的所有客户端都是 Linux VM,它们都从 DHCP 服务器获取网络配置。此服务器动态更新 DNS 区域。

Bind 9 是wsvirt.homezone 的权威服务器。

在实验室环境中,我测试了一个必须在我们的商务办公网络中实现的场景。在业务环境中,我应该创建一个 AD 域来为 Windows 客户端提供服务,为此我们决定使用 Samba 4 作为 DC。我已经为 Centos 7 构建了一个 Samba 服务器,并从源代码中获得了 Heimdal Kerberos 支持。

对于 AD,我分配了子网172.16.50.192/26和分配的ad.wsvirt.home域。

AD DC 是一个运行 Samba 4、Bind 9 和 ISC DHCP 服务器的 Centos 7 VM。Samba 使用 BIND_DLZ 作为 DNS 后端。AD 控制器具有addc1.ad.wsvirt.home域名和IP 172.16.50.193.

所有 Windows AD 客户端从动态更新绑定 DLZ 区域的 AD DC 上运行的 DHCP 服务器获取 IP。

在真实的工作物理环境中,来自两个网络的所有客户端 PC 都应该连接到一个广播域。

为了满足要求,我根据 [RFC 2317][1]将服务器上的 Bind 中的正向ad.wsvirt.home和反向DNS 区域授权给 AD 控制器。172.16.50.192/26controller.wsvirt.homeaddc1.ad.wsvirt.home


# 问题 #

除了一件事,一切都完美无缺。当我在 AD DC 上测试委托反向区域的反向查找时,结果看起来不错,因此 Windows AD 客户端可以解析两个域中的所有反向域名。:

$ dig -x 172.16.50.193 @addc1.ad.wsvirt.home

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193 @addc1.ad.wsvirt.home
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43507
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;193.50.16.172.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
193.50.16.172.in-addr.arpa. 86400 IN    CNAME   193.50.16.172.ddns.
193.50.16.172.ddns.     900     IN      PTR     addc1.ad.wsvirt.home.

;; Query time: 7 msec
;; SERVER: 172.16.50.193#53(172.16.50.193)
;; WHEN: Mon Mar 30 21:05:12 IDT 2020
;; MSG SIZE  rcvd: 121

但是当我将我的请求路由到 DNS 服务器 ```controller.wsvirt.home``` 时,它不会从 ``ad.wsvirt.home``` 域解析任何反向名称,因此 Linux 客户端无法查找任何反向名称:
$ dig -x 172.16.50.193 @controller.wsvirt.home

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193 @controller.wsvirt.home
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 48825
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;193.50.16.172.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
193.50.16.172.in-addr.arpa. 86400 IN    CNAME   193.50.16.172.ddns.

;; AUTHORITY SECTION:
.                       8133    IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2020033001 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 172.16.50.2#53(172.16.50.2)
;; WHEN: Mon Mar 30 21:49:41 IDT 2020
;; MSG SIZE  rcvd: 162

**我需要**来自 ```wsvirt.home``` 域的 Linux 客户端能够解析 ```ad.wsvirt.home``` 域中的反向域名。有可能吗?
#配置#

更准确地说,我将两台服务器的配置文件放在这里

服务器控制器.wsvirt.home

/etc/named.conf

acl local { 172.16.50.0/24; 127.0.0.1; };

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/rndc.key";

server 172.16.50.3 {
        keys { "rndc-key"; };
};

...

options {
        listen-on port 53 { local; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { local; };
        allow-transfer { none; };
        notify no; 
        forwarders { 8.8.8.8; 8.8.4.4; };
        forward only;
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};


zone "." IN {
        type hint; 
        file "named.ca";
};

zone "wsvirt.home" IN {
        type master;
        file "wsvirt.home.db";
        allow-update { key "rndc-key"; };
        allow-transfer { key "rndc-key"; };
        notify yes;
        forwarders {};
};

zone "50.16.172.in-addr.arpa" IN {
        type master;
        file "50.16.172.db";
        allow-update { key "rndc-key"; };
        allow-transfer { key "rndc-key"; };
        notify yes;
};

### /var/named/50.16.172.db ### ``` $ORIGIN 。$TTL 86400 ; 1 天 50.16.172.in-addr.arpa 在 SOA 控制器.wsvirt.home。root.wsvirt.home。(153;串行 3600;刷新(1 小时)1800;重试(30 分钟)604800;过期(1 周)86400;最少(1 天))NS controller.wsvirt.home。NS 控制器 2.wsvirt.home。$ORIGIN 50.16.172.in-addr.arpa。2 PTR 控制器.wsvirt.home。$TTL 86400 ; 1 天 3 PTR controller2.wsvirt.home。... ; 50.16.172.ddns。在 NS addc1.ad.wsvirt.home。$GENERATE 193-254 $ CNAME $.50.16.172.ddns。```
### /etc/dhcp/dhcpd.conf ### ``` include "/etc/rndc.key";

默认租赁时间 600;最大租赁时间 7200;权威性; ddns-update-style 过渡;

class "windows" {
match if substring (option vendor-class-identifier, 0, 8) = "MSFT 5.0"; }

子网 172.16.50.0 网络掩码 255.255.255.0 { log (info, concat("Vendor Class ID (60): ", option vendor-class-identifier)); log (info, concat("DHCP Client ID (61): ", option dhcp-client-identifier)); log (info, concat("User Class ID (77): ", option user-class)); 选项域名服务器 172.16.50.2、172.16.50.3;选项 ntp-servers 172.16.50.2;选项路由器 172.16.50.1;选项广播地址 172.16.50.255;默认租赁时间 600;最大租赁时间 7200;选项 ip-forwarding off; 忽略客户端更新;选项域名“wsvirt.home”;选项域搜索“wsvirt.home”;选项 netbios 范围“”;选项 netbios-node-type 8; 选项 netbios-name-servers 172.16.50.2;选项 netbios-dd-server 172.16.50.2;ddns 更新;ddns-域名 "wsvirt.home."; ddns-rev-域名"

    pool {  
            range 172.16.50.21 172.16.50.190;
            deny members of "windows";
    }

    zone wsvirt.home {
            primary 172.16.50.2;
            key "rndc-key";
    }

    zone 50.16.172.in-addr.arpa {
            primary 172.16.50.2;
            key "rndc-key";
    }

}



<br />
## AD DC addc1.ad.wsvirt.home ##

### /etc/named.conf ###

选项 { 监听端口 53 { 任何;}; 监听 v6 端口 53 { ::1; }; 目录“/var/named”;转储文件“/var/named/data/cache_dump.db”;统计文件“/var/named/data/named_stats.txt”;memstatistics-file "/var/named/data/named_mem_stats.txt"; 递归文件“/var/named/data/named.recursing”;secroots-file "/var/named/data/named.secroots"; 允许查询{任何;}; 转发器 { 172.16.50.2; 172.16.50.3;}; 仅转发;递归是的;dnssec-启用否;dnssec-验证号;bindkeys-file "/etc/named.root.key"; 托管键目录“/var/named/dynamic”;pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab"; 最小响应是的;};

...

区“。” IN {类型提示;文件“named.ca”;};

包括“/etc/rndc.key”;包括“/etc/named.rfc1912.zones”;包括“/etc/named.root.key”;包括“/var/lib/samba/bind-dns/named.conf”;


<br />
### /etc/dhcp/dhcpd.conf ###

包括“/etc/rndc.key”;

默认租赁时间 600;最大租赁时间 7200;分秒 5;权威性; ddns-update-style 无;

class "others" { match if substring (option vendor-class-identifier, 0, 8) != "MSFT 5.0"; }

子网 172.16.50.192 网络掩码 255.255.255.192 { log (info, concat("Vendor Class ID (60): ", option vendor-class-identifier)); log (info, concat("DHCP Client ID (61): ", option dhcp-client-identifier)); log (info, concat("User Class ID (77): ", option user-class)); 选项路由器 172.16.50.1;选项广播地址 172.16.50.255;默认租赁时间 600;最大租赁时间 7200;选项 ip-forwarding off; 忽略客户端更新;选项 ntp-servers 172.16.50.193;选项域名服务器 172.16.50.193;选项域名“ad.wsvirt.home”;选项域搜索“ad.wsvirt.home”;选项 netbios-name-servers 172.16.50.193;选项 netbios-dd-server 172.16.50.193;选项 netbios 范围“”;选项 netbios-node-type 8; ddns-rev-域名“ddns”;

pool {
    range 172.16.50.210 172.16.50.254;
    deny members of "others";
}

}

提交时 { set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address)); 设置 ClientIP = binary-to-ascii(10, 8, ".", 租用地址); set ClientDHCID = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0 ", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8 , "", substring(hardware,3,1))),2), ":", 后缀 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1 ))),2), ":", 后缀 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",后缀 (concat ("0", binary-to-ascii (16, 8, "", 子字符串(硬件,6,1))),2));设置客户端名称 = 选择第一个值(选项主机名、配置选项主机名、客户端名称、无名);log(concat("Commit: IP: ", ClientIP, " DHCID: ", ClientDHCID, " Name: ", ClientName)); 执行("/usr/local/sbin/dhcp-dyndns.sh", "add", ClientIP, ClientDHCID, ClientName); }

发布时 {
设置 ClientIP = binary-to-ascii(10, 8, ".", 租用地址); set ClientDHCID = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0 ", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8 , "", substring(hardware,3,1))),2), ":", 后缀 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1 ))),2), ":", 后缀 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",后缀(concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2) );log(concat("发布:IP:", ClientIP)); 执行(“/usr/local/sbin/dhcp-dyndns.sh”,“删除”,ClientIP,ClientDHCID);}

到期时 {
设置 ClientIP = binary-to-ascii(10, 8, ".", 租用地址); log(concat("过期:IP:", ClientIP)); 执行(“/usr/local/sbin/dhcp-dyndns.sh”,“删除”,客户端IP,“”,“0”);}


<br />
### A DLZ revers zone 50.16.172.ddns on the AD DC ###

$ samba-tool dns query localhost 50.16.172.ddns @ALL [[email protected]] 的密码:Name=, Records=2, Children=0 SOA: serial=3, refresh=900, retry=600,过期=86400,minttl=3600,ns=addc1.ad.wsvirt.home.,电子邮件=hostmaster.ad.wsvirt.home。(标志=600000f0,序列=3,ttl=3600)NS:addc1.ad.wsvirt.home。(flags=600000f0, serial=1, ttl=3600) Name=193, Records=1, Children=0 PTR: addc1.ad.wsvirt.home (flags=f0, serial=3, ttl=900) Name=230, Records=1, Children=0 PTR: winxp-1.ad.wsvirt.home (flags=f0, serial=3, ttl=3600)



  [1]: https://www.rfc-editor.org/rfc/rfc2317
active-directory reverse-dns ddns dhcp-server samba4
  • 4 4 个回答
  • 1186 Views

4 个回答

  • Voted
  1. Esa Jokinen
    2020-04-01T10:50:23+08:002020-04-01T10:50:23+08:00

    没有得到PTR相同的答案是正常的,因为这controller.wsvirt.home.不是两个区域的权威名称服务器。声明这flags: aa是一个权威的答案,但对于193.50.16.172.ddns. IN PTR. 因此,无法在此权威答案上发送。

    这不是一个真正的问题,因为这只会导致另一个查询193.50.16.172.ddns. IN PTR,然后可以递归地回答。客户应该意识到在有CNAME答案的情况下会自动执行此操作。

    关于这一点,还有另一个问题,只有addc1.ad.wsvirt.home.zone 50.16.172.ddns.;你会得到一个NXDOMAIN答案:

    dig 193.50.16.172.ddns. PTR @controller.wsvirt.home
    

    被controller.wsvirt.home.配置为递归 ( recursion yes;),但它不知道这些地址可以在addc1.ad.wsvirt.home.. 因此,它试图将它们作为其他一切来解决:从forwarders { 8.8.8.8; 8.8.4.4; };... 并且失败。

    您可以在以下位置添加addc1.ad.wsvirt.home.作为转发50.16.172.ddns.器controller.wsvirt.home.:

    zone "50.16.172.ddns." { 
        type forward; 
        forwarders { 172.16.50.193; }; 
    };
    

    最后,该区域$ORIGIN 50.16.172.in-addr.arpa.只能委派对其自己的子域的控制——而不是完全不相关的50.16.172.ddns..

    如果您仍然想PTR在相同的响应中发送,则需要50.16.172.ddns.通过添加slave区域(而不是forward区域)来使该域具有权威性,例如

    zone "50.16.172.ddns." { 
        type slave;
        file "50.16.172.ddns.db";
        masters { 172.16.50.193; }; 
    };
    

    主服务器 ( addc1.ad.wsvirt.home.) 需要意识到这一点并允许从controller.wsvirt.home.(并且controller2.wsvirt.home,如果它应该采取类似的行为)进行区域传输:

    options {
        . . .
        allow-transfer { 172.16.50.2; 172.16.50.3; };
    }
    
    • 1
  2. Rowland Penny
    2020-04-02T02:14:02+08:002020-04-02T02:14:02+08:00

    如果您要使用 MY 脚本,请正确使用它;-)

    在 DC 上运行 Bind9 和 isc-dhcp,别无他法。看这里:

    https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server

    https://wiki.samba.org/index.php/Configure_DHCP_to_update_DNS_records_with_BIND9

    您的主要问题之一是您试图将反向区域存储在“平面文件”中,而 bind9_dlz 不适用于平面文件。

    • 0
  3. treegor
    2020-04-02T07:27:15+08:002020-04-02T07:27:15+08:00

    根据 Esa Jokinen 的建议,我做了以下事情:

    在我为. _/etc/named.conf50.16.172.ddns

    zone "50.16.172.ddns." { 
        type slave;
        file "slaves/50.16.172.ddns.db";
        masters { 172.16.50.193; }; 
    };
    

    在区域文件中/var/named/50.16.172.db,我注释掉了委派50.16.172.ddns区域的行:

    ;50.16.172.ddns.                IN      NS      addc1.ad.wsvirt.home.
    ;$GENERATE 193-254 $    IN      CNAME   $.50.16.172.ddns.
    

    在addc1.ad.wsvirt.home 上。在/etc/named.conf:

    options {
        . . .
        allow-transfer { 172.16.50.2; 172.16.50.3; };
    }
    


    结果,我拥有该区域的权限,50.16.172.ddns但名称完全没有得到解决:

    dig -x 172.16.50.193 @addc1.ad.wsvirt.home
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193 @addc1.ad.wsvirt.home
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 30147
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;193.50.16.172.in-addr.arpa.    IN      PTR
    
    ;; AUTHORITY SECTION:
    50.16.172.in-addr.arpa. 10800   IN      SOA     controller.wsvirt.home. root.wsvirt.home. 154 3600 1800 604800 86400
    
    ;; Query time: 5 msec
    ;; SERVER: 172.16.50.193#53(172.16.50.193)
    ;; WHEN: Wed Apr 01 17:20:44 IDT 2020
    ;; MSG SIZE  rcvd: 118
    


    $ dig -x 172.16.50.193 
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 62725
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;193.50.16.172.in-addr.arpa.    IN      PTR
    
    ;; AUTHORITY SECTION:
    50.16.172.in-addr.arpa. 86400   IN      SOA     controller.wsvirt.home. root.wsvirt.home. 154 3600 1800 604800 86400
    
    ;; Query time: 0 msec
    ;; SERVER: 172.16.50.2#53(172.16.50.2)
    ;; WHEN: Wed Apr 01 17:20:56 IDT 2020
    ;; MSG SIZE  rcvd: 118
    
    • 0
  4. Best Answer
    treegor
    2020-04-03T06:12:51+08:002020-04-03T06:12:51+08:00

    最后我发现了问题的根源。关键是当 Bind 9 作为转发器工作时,它会剥离 DNSSEC 签名。我知道,所以在named.conf服务器上addc1.ad.wsvirt.home我设置了以下选项作为解决方法:

    dnssec-enable no; 
    dnssec-validation no;
    


    但是我忘了在 上做同样的事情controller.wsvirt.home,现在我已经修复了我的疏忽,一切都很好。显然 zone 部分50.16.172.ddns必须在addc1.ad.wsvirt.home服务器的 Bind 配置文件中:

    zone "50.16.172.ddns." { 
        type forward; 
        forwarders { 172.16.50.193; }; 
    };
    
    • 0

相关问题

  • 如果以域用户身份远程登录,PC 速度极慢

  • 如何在 Windows 2003 的 ou 级别应用策略

  • 允许用户更改其 Active Directory 密码的 Web 界面

  • MOSS 2007 无法使用 ActiveDirectoryMembershipProvider 配置表单身份验证

  • 通过 VPN 更改 Active Directory 密码

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve