ฉันต้องการตั้งค่าเครือข่ายขนาดเล็ก โดยที่เซิร์ฟเวอร์ DHCP ส่วนกลางจะเช่าที่อยู่ IPv4 ให้กับลูกค้า ไคลเอ็นต์ได้ตั้งชื่อโฮสต์แล้วและควรโฆษณาชื่อเหล่านั้นไปยังเซิร์ฟเวอร์ DNS กลาง ดังนั้นทั้งเซิร์ฟเวอร์และไคลเอนต์ทั้งหมดสามารถค้นหากันและกันด้วยชื่อโฮสต์นั้น เซิร์ฟเวอร์ DNS จะแก้ไขที่อยู่ LAN ของโดเมน "my.domain" และชี้ไปที่เซิร์ฟเวอร์ DNS ภายนอกสำหรับโดเมนอื่นๆ ทั้งหมด (อินเทอร์เน็ต)
ในการตั้งค่าปัจจุบันของฉัน ฉันมีสองกล่อง: 10.0.100.1 เป็นเซิร์ฟเวอร์ (Ubuntu 22.04) ซึ่งโฮสต์ DHCP และ DNS 10.0.100.2 ได้รับการกำหนดค่าเป็นไคลเอนต์ (Fedora 35) (DHCP ส่ง IP คงที่นี้ในระหว่างขั้นตอนการทดสอบของฉัน)
นี่คือลูกค้า (10.0.100.2) การกำหนดค่า:
$ cat /etc/ชื่อโฮสต์
ลูกค้าโฮสต์
$cat /etc/systemd/network/20-wired.network
[จับคู่]
ชื่อ=enp0s31f6
[เครือข่าย]
LinkLocalAddressing=ipv4
DHCP=ipv4
SendHostname=จริง
[DHCPv4]
UseDomains=จริง
$ แก้ปัญหา
ทั่วโลก
โปรโตคอล: LLMNR=แก้ไข -mDNS -DNSoverTLS DNSSEC=ไม่/ไม่รองรับ
โหมด resolv.conf: ต้นขั้ว
ลิงค์ 2 (enp0s31f6)
ขอบเขตปัจจุบัน: DNS LLMNR/IPv4
โปรโตคอล: +DefaultRoute +LLMNR -mDNS -DNSoverTLS DNSSEC=ไม่/ไม่รองรับ
เซิร์ฟเวอร์ DNS ปัจจุบัน: 10.0.100.1
เซิร์ฟเวอร์ DNS: 10.0.100.1
โดเมน DNS: my.domain
ไอพี 10.0.100.2 ได้รับมอบหมายอย่างถูกต้อง ลูกค้าสามารถ ping เซิร์ฟเวอร์ (10.0.100.1) ด้วย IP, ชื่อโฮสต์ หรือ FQDN ฉันยังเห็นใน tcpdump ว่าชื่อโฮสต์ถูกส่งไปยังเซิร์ฟเวอร์ DHCP (ตัวเลือก 81 Client FQDN) จนถึงตอนนี้ดีมาก
ควรเปลี่ยนการกำหนดค่าเซิร์ฟเวอร์ DHCP เมื่อการตั้งค่าเริ่มต้นทำงาน เพื่อแจกจ่าย IP จากช่วง ดังนั้นในอนาคต ฉันจะไม่มีที่อยู่ IP ที่กำหนดตายตัวสำหรับลูกค้า ฉันจะข้ามการแสดงไฟล์คีย์ rndc ที่นี่ พวกมันเหมือนกันและอยู่ในตำแหน่งที่กำหนดค่าไว้ เซิร์ฟเวอร์ได้รับการกำหนดค่าดังนี้:
$ cat /etc/ชื่อโฮสต์
โฮสต์เซิร์ฟเวอร์
$cat /etc/systemd/network/20-wired.network
[จับคู่]
ชื่อ=enp0s31f6
[เครือข่าย]
LinkLocalAddressing=ipv4
ที่อยู่=10.0.100.1/16
เกตเวย์=10.0.1.1
DNS=10.0.100.1
[DHCPv4]
UseDomains=my.domain
$ cat /etc/default/isc-dhcp-server
INTERFACESv4="enp0s31f6"
$cat /etc/dhcp/dhcpd.conf
รวม "/etc/dhcp/ddns-keys/my-domain.key";
เวลาเช่าเริ่มต้น 7200;
เวลาเช่าสูงสุด 28800;
ddns-update บน;
ddns-update-style มาตรฐาน;
ddns-ชื่อโดเมน "my.domain.";
อนุญาตให้ลูกค้าที่ไม่รู้จัก;
เผด็จการ;
โซน my.domain. {
หลัก 10.0.100.1;
คีย์ ddns-mydomain;
}
โซน 10.0.in-addr.arpa {
หลัก 10.0.100.1;
คีย์ ddns-mydomain;
}
# ให้บริการเฉพาะไคลเอนต์กล่องเดียวโดยเฉพาะในช่วงทดสอบ
ซับเน็ต 10.0.0.0 เน็ตมาสก์ 255.255.0.0 {}
โฮสต์ทดสอบโฮสต์ {
อีเธอร์เน็ตฮาร์ดแวร์ 00:00:00:00:00:00;
ที่อยู่คงที่ 10.0.100.2;
ตัวเลือกซับเน็ตมาสก์ 255.255.0.0;
เราเตอร์ตัวเลือก 10.0.1.1;
ตัวเลือกโดเมนเนมเซิร์ฟเวอร์ 10.0.100.1;
ตัวเลือกชื่อโดเมน "my.domain";
ชื่อไฟล์ "pxelinux.0";
}
$cat /etc/bind/named.conf
รวม "/etc/bind/keys/my.domain.key";
รวม "/etc/bind/named.conf.options";
รวมถึง "/etc/bind/named.conf.local";
รวม "/etc/bind/named.conf.default-zones";
$cat /etc/bind/named.conf.options
acl "ภายใน" {
127.0.0.1;
10.0.0.0/16;
};
ตัวเลือก {
ไดเร็กทอรี "/var/cache/bind";
การเรียกซ้ำ ใช่;
อนุญาตการเรียกซ้ำ { ภายใน; };
ฟังบน { 10.0.100.1; };
อนุญาตให้โอน { ไม่มี; };
อนุญาตแบบสอบถาม { ภายใน; };
อนุญาตแบบสอบถามแคช { ภายใน; };
ผู้ส่งต่อ {
1.1.1.1;
};
ฟังบน v6 { ใด ๆ ; };
};
$cat /etc/bind/named.conf.local
โซน "my.domain" {
พิมพ์ต้นแบบ;
ไฟล์ "/etc/bind/zones/db.my.domain";
นโยบายการอัปเดต { ให้ชื่อ ddns-mydomain my.domain ANY; };
อนุญาตให้โอน { ไม่มี; };
};
โซน "0.10.in-addr.arpa" {
พิมพ์ต้นแบบ;
ไฟล์ "/etc/bind/zones/db.0.10";
นโยบายการอัปเดต { ให้ชื่อ ddns-mydomain my.domain ANY; };
อนุญาตให้โอน { ไม่มี; };
};
$cat /etc/bind/zones/db.my.domain
$TTL 86400
@ ใน SOA serverhost.my.domain. admin.my.domain. (
3 ; อนุกรม
28800 ; รีเฟรช
3600 ; ลองอีกครั้ง
28800 ; หมดอายุ
43200 ) ; TTL แคชเชิงลบ
;
; เนมเซิร์ฟเวอร์ - บันทึก NS
ใน NS serverhost.my.domain
; บันทึก
serverhost.my.domain. ใน 10.0.100.1
$cat /etc/bind/zones/db.10.0
$TTL 86400
@ ใน SOA serverhost.my.domain. admin.my.domain. (
3 ; อนุกรม
28800 ; รีเฟรช
3600 ; ลองอีกครั้ง
28800 ; หมดอายุ
43200 ) ; TTL แคชเชิงลบ
;
; เนมเซิร์ฟเวอร์ - บันทึก NS
ใน NS serverhost.my.domain
; บันทึก PTR
100.1 ใน PTR serverhost.my.domain ; 10.0.100.1
ฉันคิดว่าควรเป็นการกำหนดค่าที่เกี่ยวข้องทั้งหมด โปรดแจ้งให้เราทราบหากคุณต้องการสิ่งอื่น
ประเด็นอยู่ที่ว่า 10.0.100.1 (โฮสต์เซิร์ฟเวอร์) ฉันสามารถ ping เท่านั้น ลูกค้าโฮสต์ ผ่าน IP ของมัน 10.0.100.2 แต่ไม่ใช่ชื่อโฮสต์หรือ FQDNขออภัย ฉันไม่มีความคิดที่ดีว่าจะเริ่มดีบักที่ใดเพื่อดูว่าชื่อโฮสต์ไคลเอ็นต์ถูกส่งไปยังเซิร์ฟเวอร์ DNS และลงทะเบียนหรือไม่
อาจเป็นบันทึกด้านข้างที่อาจไม่เกี่ยวข้อง: การเรียกใช้คำสั่ง dhcp-list-lease บน โฮสต์เซิร์ฟเวอร์ ส่งคืนรายการที่ว่างเปล่า บันทึกแสดง DHCPACK สำหรับ 10.0.100.2 แต่มันไม่เคยปรากฏในผลลัพธ์เฉพาะนี้ (ซึ่งน่าสนใจเพราะมีคอลัมน์ "ชื่อโฮสต์")
แก้ไข: ดูเหมือนว่าคีย์อาจมีความสำคัญ เดิมทีฉันสร้างรหัสด้วยตนเองด้วย rndc-confgen -a -b 512จากนั้นคัดลอกไฟล์นั้นไปที่ /etc/dhcp/rndc-keys/. ขณะนี้ฉันสร้างรหัสใหม่ด้วย ddns-confgen -a -b 512 และใส่กุญแจทั้งสองเข้าไป /etc/bind/keys/my.domain.key และใน /etc/dhcp/ddns-keys/my.domain.key (และอัปเดตคำสั่งรวมในไฟล์การกำหนดค่าที่เกี่ยวข้อง) ฉันยังมีรหัส rndc อยู่ข้างใต้ /etc/bind/rndc.key ซึ่งถูกหยิบขึ้นมาโดย bind9 ตามที่บันทึกแสดง
แก้ไข 2:
ทำงานด้วยตนเอง อัพเดท มีลักษณะดังต่อไปนี้:
$nsupdate -D -k /etc/bind/keys/my.domain.key
> อัปเดตเพิ่ม clienthost.my.domain 7200 A 10.0.100.2
> ส่ง
[...]
ตอบกลับจากคำถามอัปเดต:
;; ->>ส่วนหัว<<- opcode: UPDATE, สถานะ: REFUSED, id: 39064
;; ธง: qr; โซน: 1, PREREQ: 0, UPDATE: 0, เพิ่มเติม: 1
;; ส่วนโซน:
;my.domain. ใน SOA
;; TSIG PSEUDOSECTION:
ddns-โดเมนของฉัน 0 TSIG ใด ๆ hmac-sha256. 1652972427 300 32 4e/XXXXXXXXXXXXXXXXXXXXXXXX/bmg= 39064 NOERROR 0
และระหว่างการอัปเดตด้วยตนเอง บันทึกจะแสดงขึ้น
ลูกค้า @ 0x7f61d8004cb8 10.0.100.1#39791/key ddns-mydomain: การอัปเดตโซน 'my.domain/IN': การอัปเดตล้มเหลว: ปฏิเสธโดยการอัปเดตที่ปลอดภัย (REFUSED)