Score:0

ลงทะเบียนชื่อโฮสต์แบบไดนามิกบนเซิร์ฟเวอร์ DNS (ผ่าน DHCP)

ธง nl

ฉันต้องการตั้งค่าเครือข่ายขนาดเล็ก โดยที่เซิร์ฟเวอร์ 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)
Nikita Kipriyanov avatar
za flag
คุณมีบันทึกการอัปเดต DNS หรือไม่ เปิดใช้งาน (ดู[ที่นี่](https://serverfault.com/questions/1100116/how-to-log-verbose-details-about-dns-update-queries-in-bind/1100228#1100228)) ลองทดสอบการเพิ่มการอัปเดต DNS ด้วยตนเองผ่าน `nsupdate` ด้วยรหัสของคุณ อย่างไรก็ตาม `rndc.key` คืออะไร คุณควรสร้างรหัสเฉพาะสำหรับการอัปเดตแบบไดนามิก อย่าใช้รหัสอัตโนมัติที่ใช้สำหรับยูทิลิตี้ `rndc`
a.ilchinger avatar
nl flag
การอัปเดตด้วยตนเองผ่าน `nupdate` ส่งคืนรหัสสถานะ REFUSED แต่ผลลัพธ์การแก้ไขข้อบกพร่องระบุว่า "การยืนยัน tsig สำเร็จ"
Nikita Kipriyanov avatar
za flag
มีอะไรอยู่ในบันทึกในช่วงเวลาเดียวกัน และตอนนี้เมื่อคุณพบปัญหา ให้เริ่มต้นด้วยการดีบัก ฉันจะพูดอีกครั้ง อย่าพึ่งคีย์นั้น สร้างคีย์เฉพาะ เมื่อ `nsupdate` เริ่มทำงานตามที่คาดหวังด้วยคีย์นั้น ให้ย้ายเพิ่มเติมและตั้งค่าใน `dhcpd`
mx flag
ตัวเลือกอนุญาตการอัปเดตของคุณดูไม่ถูกต้อง ขณะนี้อนุญาตเฉพาะคีย์ rndc เท่านั้น คุณสามารถเพิ่มรายการจับคู่ที่อยู่ (เช่น "อนุญาตการอัปเดต { 10.0.0.0/16}") หรือใช้นโยบายการอัปเดต
a.ilchinger avatar
nl flag
ฉันเปลี่ยนจากคำสั่งย่อย 'allow-update' เป็นคำสั่งย่อย 'update-policy' และทำให้การบันทึกใช้งานได้ ฉันยังใช้คีย์ ddns ใหม่โดยเฉพาะ ตอนนี้ฉันค่อนข้างสูญเสีย manpage สำหรับ nsupdate บอกว่าคีย์ที่กำหนดให้กับ -k ตัวเลือกต้องมีลักษณะเหมือน `K{name}.+157.+{random}.private` ซึ่งจากประสบการณ์ของผม ดูเหมือนคีย์ dnssec ซึ่งผมไม่ทำ" ไม่ได้ใช้เลยรหัสที่ฉันสร้างด้วย `ddns-confgen` และการใช้งานมีรูปแบบอื่น ไม่มีข้อบ่งชี้ในบันทึกว่าจะต้องมีรูปแบบคีย์อื่น
Nikita Kipriyanov avatar
za flag
หากคุณต้องการอนุญาตให้คีย์อัปเดตระเบียนใดๆ ในโซน ให้ใช้ `update-policy { ให้สิทธิ์ mykey zonesub ใดๆ; }` หรือ `อนุญาตการอัปเดต { คีย์ mykey; }`; ทำงานเหมือนกันทุกประการ BIND เวอร์ชันใหม่จัดส่ง `tsig-keygen' โดยเฉพาะ ให้ใช้หากคุณมี มิฉะนั้น ให้สร้างคีย์ด้วย `dnssec-keygen -a HMAC-SHA256 -b 256 -n HOST mykey` ทั้งสองไฟล์จะมีความลับเหมือนกัน เพียงจัดรูปแบบให้ถูกต้อง เช่น `key "mykey" { อัลกอริทึม hmac-sha256; ความลับ ; };`. คีย์ที่จัดรูปแบบด้วยวิธีนี้จะรวมอยู่ในเซิร์ฟเวอร์ DNS และ DHCP: `include "/mykey.key"`.
Nikita Kipriyanov avatar
za flag
... และไฟล์คีย์เดียวกันกับรูปแบบนี้ใช้กับ nsupdate: `nsupdate -k /mykey.key`.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา