ฉันต้องการตั้งค่าเครือข่ายขนาดเล็ก โดยที่เซิร์ฟเวอร์ 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)