Điểm:0

Tự động đăng ký tên máy chủ trên máy chủ DNS (thông qua DHCP)

lá cờ nl

Tôi muốn thiết lập một mạng nhỏ, trong đó máy chủ DHCP trung tâm cho khách hàng thuê địa chỉ IPv4. Máy khách đã đặt tên máy chủ của mình và nên quảng cáo tên máy chủ đó đến máy chủ DNS trung tâm, để cả máy chủ và tất cả máy khách có thể tìm thấy nhau bằng tên máy chủ đó. Máy chủ DNS sẽ phân giải các địa chỉ mạng LAN của miền "my.domain" và trỏ tới một máy chủ DNS bên ngoài cho tất cả các miền khác (internet).

Trong thiết lập hiện tại của tôi, tôi có hai hộp: 10.0.100.1 là máy chủ (Ubuntu 22.04), nơi lưu trữ DHCP và DNS. 10.0.100.2 được cấu hình như một máy khách (Fedora 35) (DHCP gửi IP cố định này trong giai đoạn thử nghiệm của tôi).

Đây là khách hàng (10.0.100.2) cấu hình:

$ mèo /etc/tên máy chủ
máy khách

$ cat /etc/systemd/network/20-wired.network
[Trận đấu]
Tên=enp0s31f6

[Mạng]
LinkLocalAddressing=ipv4
DHCP=ipv4
GửiHostname=true

[DHCPv4]
Tên miền sử dụng = true

$ giải quyết
Toàn cầu
    Giao thức: LLMNR=resolve -mDNS -DNSoverTLS DNSSEC=no/unsupported
chế độ giải quyết.conf: sơ khai

Liên kết 2 (enp0s31f6)
  Phạm vi hiện tại: DNS LLMNR/IPv4
    Giao thức: +DefaultRoute +LLMNR -mDNS -DNSoverTLS DNSSEC=no/unsupported
Máy chủ DNS hiện tại: 10.0.100.1
    Máy chủ DNS: 10.0.100.1
    Tên miền DNS: my.domain

địa chỉ IP 10.0.100.2 được gán chính xác. Máy khách có thể ping máy chủ (10.0.100.1) bằng IP, tên máy chủ hoặc FQDN của nó. Tôi cũng có thể thấy trong tcpdump rằng tên máy chủ được gửi đến máy chủ DHCP (tùy chọn 81 Client FQDN). Càng xa càng tốt.

Cấu hình máy chủ DHCP được cho là sẽ được thay đổi sau khi thiết lập ban đầu hoạt động, hướng tới việc phân phát IP từ một dải. Vì vậy, trong tương lai, tôi sẽ không có địa chỉ IP được gán cố định cho khách hàng. Tôi sẽ bỏ qua việc hiển thị các tệp khóa rndc ở đây. Chúng giống hệt nhau và được đặt ở các vị trí đã định cấu hình. Máy chủ được cấu hình như sau:

$ mèo /etc/tên máy chủ
Máy chủ lưu trữ

$ cat /etc/systemd/network/20-wired.network
[Trận đấu]
Tên=enp0s31f6

[Mạng]
LinkLocalAddressing=ipv4
Địa chỉ=10.0.100.1/16
Cổng=10.0.1.1
DNS=10.0.100.1

[DHCPv4]
UseDomains=my.domain

$ cat /etc/default/isc-dhcp-server
GIAO DIỆNv4="enp0s31f6"

$ con mèo /etc/dhcp/dhcpd.conf
bao gồm "/etc/dhcp/ddns-keys/my-domain.key";
thời gian thuê mặc định 7200;
thời gian thuê tối đa 28800;
cập nhật ddns trên;
tiêu chuẩn kiểu cập nhật ddns;
tên miền ddns "my.domain.";
cho phép khách hàng không xác định;
có thẩm quyền;
khoanh vùng my.domain. {
    chính 10.0.100.1;
    khóa ddns-mydomain;
}

vùng 10.0.in-addr.arpa. {
    chính 10.0.100.1;
    khóa ddns-mydomain;
}

# chỉ phục vụ riêng cho một hộp khách hàng trong giai đoạn thử nghiệm
mạng con 10.0.0.0 mặt nạ mạng 255.255.0.0 {}
máy chủ thử nghiệm {
  ethernet phần cứng 00:00:00:00:00:00;
  địa chỉ cố định 10.0.100.2;
  tùy chọn mặt nạ mạng con 255.255.0.0;
  bộ định tuyến tùy chọn 10.0.1.1;
  tùy chọn máy chủ tên miền 10.0.100.1;
  tùy chọn tên miền "my.domain";
  tên tệp "pxelinux.0";
}

$ mèo /etc/bind/named.conf
bao gồm "/etc/bind/keys/my.domain.key";
bao gồm "/etc/bind/named.conf.options";
bao gồm "/etc/bind/named.conf.local";
bao gồm "/etc/bind/named.conf.default-zones";

$ con mèo /etc/bind/named.conf.options
acl "nội bộ" {
    127.0.0.1;
    10.0.0.0/16;
};

tùy chọn {
    thư mục "/var/cache/bind";

    đệ quy có;
    cho phép đệ quy { nội bộ; };
    nghe trên { 10.0.100.1; };
    cho phép chuyển { none; };

    cho phép truy vấn { nội bộ; };
    allow-query-cache { nội bộ; };

    giao nhận {
        1.1.1.1;
    };

    nghe-on-v6 { bất kỳ; };
};

$ mèo /etc/bind/named.conf.local
vùng "my.domain" {
    gõ chủ;
    tập tin "/etc/bind/zones/db.my.domain";
    chính sách cập nhật { cấp tên ddns-mydomain my.domain BẤT KỲ; };
    cho phép chuyển { none; };
};

vùng "0.10.in-addr.arpa" {
    gõ chủ;
    tệp "/etc/bind/zones/db.0.10";
    chính sách cập nhật { cấp tên ddns-mydomain my.domain BẤT KỲ; };
    cho phép chuyển { none; };
};

$ con mèo /etc/bind/zones/db.my.domain
$ TTL 86400
@ TRONG SOA serverhost.my.domain. admin.my.domain. (
                  3 ; nối tiếp
              28800 ; Làm mới
               3600 ; Thử lại
              28800 ; Hết hiệu lực
              43200 ); Bộ đệm âm TTL
;

; máy chủ định danh - bản ghi NS
    TRONG NS serverhost.my.domain.

; một hồ sơ
máy chủ lưu trữ.my.domain. TRONG 10.0.100.1

$ con mèo /etc/bind/zones/db.10.0
$ TTL 86400
@ TRONG SOA serverhost.my.domain. admin.my.domain. (
                  3 ; nối tiếp
              28800 ; Làm mới
               3600 ; Thử lại
              28800 ; Hết hiệu lực
              43200 ); Bộ đệm âm TTL
;

; máy chủ định danh - bản ghi NS
    TRONG NS serverhost.my.domain.

; hồ sơ PTR
100.1 TRONG PTR serverhost.my.domain. ; 10.0.100.1

Tôi nghĩ đó phải là tất cả các cấu hình có liên quan. Xin vui lòng cho tôi biết nếu bạn cần một cái gì đó khác.

Vấn đề ở đây là, đang ở trên 10.0.100.1 (máy chủ lưu trữ) tôi chỉ có thể ping máy khách thông qua IP của nó 10.0.100.2 nhưng không phải bởi tên máy chủ cũng như FQDN của nó.Thật không may, tôi không biết bắt đầu gỡ lỗi từ đâu để xem liệu tên máy chủ của máy khách có được gửi đến máy chủ DNS và được đăng ký hay không.

Có thể là một lưu ý phụ có khả năng không liên quan: Chạy lệnh dhcp-list-cho thuê trên Máy chủ lưu trữ trả về một danh sách trống. Nhật ký hiển thị một DHCPACK cho 10.0.100.2 nhưng nó không bao giờ xuất hiện trong đầu ra cụ thể này (điều này sẽ rất thú vị vì có cột "tên máy chủ").

Chỉnh sửa: Rốt cuộc, có vẻ như chìa khóa có thể quan trọng. Ban đầu tôi tự tạo một khóa với rndc-confgen -a -b 512, sau đó sao chép tệp đó vào /etc/dhcp/rndc-keys/. Hiện tại, tôi đã tạo một khóa mới với ddns-confgen -a -b 512 và đặt chìa khóa cả trong /etc/bind/keys/my.domain.key và trong /etc/dhcp/ddns-keys/my.domain.key (và cập nhật các câu lệnh bao gồm trong các tệp cấu hình tương ứng). Tôi vẫn có khóa rndc bên dưới /etc/bind/rndc.key cũng được bind9 chọn khi nhật ký hiển thị.

Chỉnh sửa2: Chạy thủ công nsupdate trông giống như sau:

$ nsupdate -D -k /etc/bind/keys/my.domain.key
> cập nhật thêm clienthost.my.domain 7200 A 10.0.100.2
> gửi
[…]
Trả lời từ truy vấn cập nhật:
;; ->>HEADER<<- opcode: UPDATE, status: REFUSED, id: 39064
;; cờ: qr; VÙNG: 1, YÊU CẦU TRƯỚC: 0, CẬP NHẬT: 0, BỔ SUNG: 1
;; KHU VỰC:
;tên miền của tôi. TRONG SOA

;; TSIG PSEULiều lượng:
ddns-tên miền của tôi. 0 BẤT KỲ TSIG hmac-sha256. 1652972427 300 32 4e/XXXXXXXXXXXXXXXXXXXXXXXX/bmg= 39064 KHÔNG LỖI 0

Và trong quá trình cập nhật thủ công, nhật ký hiển thị

khách hàng @ 0x7f61d8004cb8 10.0.100.1#39791/key ddns-mydomain: vùng cập nhật 'my.domain/IN': cập nhật không thành công: bị cập nhật bảo mật từ chối (ĐÃ TỪ CHỐI)
Nikita Kipriyanov avatar
lá cờ za
Bạn có bất kỳ nhật ký cập nhật DNS nào không? Kích hoạt nó (xem [tại đây](https://serverfault.com/questions/1100116/how-to-log-verbose-details-about-dns-update-queries-in-bind/1100228#1100228)). Ngoài ra, hãy thử kiểm tra thêm bản cập nhật DNS bằng tay thông qua `nsupdate` bằng khóa của bạn. Nhân tiện, `rndc.key` là gì? Bạn nên tạo một khóa chuyên dụng để cập nhật động, không sử dụng khóa tự động được sử dụng cho tiện ích `rndc`.
a.ilchinger avatar
lá cờ nl
Cập nhật thủ công qua `nsupdate` trả về mã trạng thái REFUSED, nhưng đầu ra gỡ lỗi cho biết "xác minh tsig thành công".
Nikita Kipriyanov avatar
lá cờ za
Có gì trong các bản ghi tại cùng một thời điểm? Và, bây giờ khi bạn thấy một vấn đề, hãy bắt đầu với việc gỡ lỗi nó. Tôi sẽ nói lại, đừng dựa vào khóa đó, hãy tạo một khóa chuyên dụng. Khi `nsupdate` bắt đầu hoạt động như mong đợi với phím đó, hãy tiếp tục và thiết lập nó trong `dhcpd`.
lá cờ mx
tùy chọn cho phép cập nhật của bạn có vẻ không đúng. Nó hiện chỉ cho phép các phím rndc. Bạn có thể thêm danh sách đối sánh địa chỉ (chẳng hạn như "cho phép cập nhật { 10.0.0.0/16}") hoặc sử dụng chính sách cập nhật.
a.ilchinger avatar
lá cờ nl
Tôi đã chuyển từ tiểu ban `cho phép cập nhật` sang tiểu ban `chính sách cập nhật` và làm cho việc ghi nhật ký hoạt động. Tôi cũng đã sử dụng một khóa ddns mới, chuyên dụng. Bây giờ tôi hơi mất mát. Trang hướng dẫn nsupdate cho biết khóa được cung cấp cho các tùy chọn -k phải giống như `K{name}.+157.+{random}.private`, mà theo kinh nghiệm của tôi, trông giống như khóa dnssec, mà tôi thì không' không sử dụng gì cả.Khóa tôi đã tạo bằng `ddns-confgen` và sử dụng có định dạng khác. Không có dấu hiệu nào trong nhật ký cho thấy cần có định dạng khóa khác.
Nikita Kipriyanov avatar
lá cờ za
Nếu bạn muốn cho phép khóa cập nhật bất kỳ bản ghi nào trong vùng, hãy sử dụng `chính sách cập nhật { Grant mykey zonesub any; }` hoặc `cho phép cập nhật { key mykey; }`; chúng hoạt động giống hệt nhau. Các phiên bản mới của BIND cung cấp `tsig-keygen` chuyên dụng, hãy sử dụng nó nếu bạn có. Nếu không, hãy tạo khóa bằng `dnssec-keygen -a HMAC-SHA256 -b 256 -n HOST mykey`. Cả hai tệp sẽ chứa cùng một bí mật, chỉ cần định dạng đúng, chẳng hạn như `key "mykey" { algorithm hmac-sha256; bí mật ; };`. Khóa được định dạng theo cách này được đưa vào cả máy chủ DNS và DHCP: `include "/mykey.key"`.
Nikita Kipriyanov avatar
lá cờ za
... và cùng một tệp khóa có định dạng này được sử dụng với nsupdate: `nsupdate -k /mykey.key`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.