<![CDATA[Latest posts for the topic "Thay thế BIND với djbdns - phần 5 (phần cuối)"]]> /hvaonline/posts/list/24.html JForum - http://www.jforum.net Thay thế BIND với djbdns - phần 5 (phần cuối) Thay thế BIND với djbdns - phần 5 (phần cuối) 6.3 Thiết lập axfrdns (nếu cần cho phép zones transfer) Sở dĩ phần thiết lập axfrdns được đưa vào mục "bảo trì" vì xét cho cùng, chức năng này dùng để đồng bộ hoá dữ liệu giữa các DNS servers. Bởi thế chúng mang nặng tính bảo trì. Bạn cần ứng dụng phần này nếu như primary DNS của bạn là tinydns và một (hoặc nhiều) các "secondary" DNS của bạn dùng BIND. Giữa các tinydns server việc đồng bộ hoá thông tin rất đơn giản như đã đề cập ở trên. Riêng với mối quan hệ tinydns và BIND thì phải dùng đến giải pháp AXFR (zone transfer). 6.3.1 Thiết lập dịch vụ axfrdns - tạo tài khoản cho axfrdns: # useradd -g dnsgroup -d /dev/null -s /bin/true axfrdns - tạo dịch vụ axfrdns: # axfrdns-conf axfrdns dnslog /var/dns/axfrdns /var/dns/tinydns 203.100.10.10 trong đó: axfrdns-conf là tiện ích dùng để tạo dịch vụ axfrdns và các hồ sơ hỗ trợ axfrdns là tài khoản vừa được tạo ở trên. Bạn có thể tạo tài khoản với tên tuỳ chọn để tránh bối rối nếu cần dnslog là tài khoản đã được tạo ra trước đây dành riêng cho log /var/dns/axfrdns là thư mục chứa axfrdns /var/dns/tinydns là thư mục chứa tinydns. axfrdns cần biết vị trí của root tinydns để lấy "zones" 203.100.10.10 là địa chỉ mà axfrdns sẽ lắng nghe. Điều cần lưu ý là axfrdns có thể cùng dùng chung IP với tinydns (trong trường hợp này là 203.100.10.10). Lý do: tinydns chỉ dùng cổng 53 UDP và axfrdns chỉ dùng cổng 53 TCP cho nên không bị va chạm trong trường hợp này. Nếu bạn có "dư" IP và thích dùng axfrdns trên một IP nào khác thì bạn có trọn quyền quyết định (xem lại phần 2.2.2 và 2.2.3). Tương tự như các dịch vụ trong bộ djbdns, bạn cần phải "đăng ký" axfrdns với svscan để nó khởi tạo và dịch vụ này bằng cách tạo symbolic link đến /service: #ln -s /var/dns/axfrdns /service Sau đó, khởi động dịch vụ axfrdns: # svc /service/axfrdns Cho đến lúc này, dịch vụ axfrdns đã được khởi động trên server. Tuy nhiên, dịch vụ này chưa hề có tác dụng. Lý do: trong thư mục /service/axfrdns/ có hồ sơ tcp hoàn toàn bỏ trống theo mặc định. Tuỳ theo nhu cầu riêng của bạn để hình thành hồ sơ này trước khi nó thật sự có tác dụng. Vì hồ nó bị trống, ngay lúc này không có bất cứ server nào có thể lấy "zones" từ tinydns server của bạn được. Đây là một đặc tính bảo mật của axfrdns: những gì không (hoặc chưa cho phép) thì hoàn toàn cấm. Thử lệnh sau để xác định axfrdns đã khởi động và lắng nghe trên cổng 53 TCP: $ netstat -nat | grep "203.100.10.10:53" Bước kế tiếp là bước tối quan trọng để xác định "secondary" DNS server nào được quyền lấy "zone" (qua AXFR). Hãy thử thiết lập vài entries trong hồ sơ tcp. Giả sử bạn mô hình mạng của bạn có những yếu tố sau: - nội mạng có subnet là 172.16.1.0/24 - secondary DNS server dùng BIND có IP là 204.200.20.20 - có ba zones (domains) trên tinydns server bạn phải quản lý là 123.com, 456.org và 789.net # cho phép 204.200.20.20 lấy bất cứ zone nào 204.200.20.20:allow # cho phép 172.16.1.120 lấy 2 zones 123.com và 789.net 172.16.1.200:allow,AXFR="123.com/789.net" # không cho phép 172.16.1.130 động t�›i bất cứ zone nào 172.16.1.130:deny # cho phép một chuỗi IP trong dãy 172.16.1.50 đến 172.16.1.60 lấy được zone 789.net 172.16.1.50-60:allow,AXFR=789.net" # cho phép các host còn lại trong subnet 172.16.1.x được quyền lấy zone 456.org 172.16.1.:allow,AXFR="456.org" # cản trọn bộ mọi IP khác :deny Chi tiết trong đoạn ví dụ trên bao gồm hầu hết những trường hợp thường gặp. Nếu - :deny đi sau bất cứ IP (hoặc chuỗi IP nào) thì nó hoàn toàn bị cản. - :allow đi sau bất cứ IP (hoặc chuỗi IP nào) thì nó hoàn toàn được cho phép - nếu đằng sau :allow còn kèm theo giá trị AXFR thì giá trị này ấn định cụ thể những zone nào được quyền lấy. Giá trị này được tách rời bởi dấu phẩy (,) hay còn gọi là "comma separator". Sau khi hoàn tất hồ sơ tcp này, việc còn lại cần phải làm là "make" hồ sơ này từ dạng ASCII thành dạng .cdb: # cd /service/axfrdns # make Sau đó tái khởi động axfrdns để nó đọc lại hồ sơ tcp.cdb và ứng hiệu với những quy định bạn vừa áp đặt ở trên: # svc -t /service/axfrdns 6.3.2 Thử nghiệm và điều chỉnh axfrdns Cũng như các dịch vụ khác vừa được thiết lập, thử nghiệm và điều chỉnh cho thích hợp là bước cần thiết. Dựa trên ví dụ trong hồ sơ tcp ở trên, giả sử bạn đang ở trên server 204.200.20.20, bạn có thể dùng tiện dụng host để thử như sau: $ host -l 123.com 203.100.10.10 trong đó, - chọn lựa -l dùng để liệt kê zone cần biết - 123.com là mục tiêu zone cần liệt kê - 203.100.10.10 là IP của primary DNS server, trong trường hợp này nó chính là tinydns server của bạn Bạn sẽ thấy các thông tin tương tự như sau nếu axfrdns đã thiết lập thành công: Code:
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

123.com SOA ns1.123.com. hostmaster.123.com. 1098357511 16384 2048 1048
576 2560
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

123.com name server ns1.123.com.
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

123.com mail is handled by 0 mail.123.com.
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

www.123.com has address 203.100.10.12
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

mail.123.com has address 203.100.10.11
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

ns1.123.com has address 203.100.10.10
Using domain server:
Name: 203.100.10.10
Address: 203.100.10.10#53
Aliases:

123.com SOA ns1.123.com. hostmaster.123.com. 1098357511 16384 2048 1048
576 2560
Danh sách này sẽ dài lê thê nếu bạn có nhiều entries trong mỗi zone (domain). Vấn đề quan trọng ở đây là từ host 204.200.20.20 bạn có thể dùng tiện ích host với chọn lựa là -l; chứng tỏ axfrdns của bạn cho phép host 204.200.20.20 chuyển zone. Có thể dùng dig -22- như một tiện dụng khác để kiểm nghiệm zone transfer. Giả sử axfrdns lắng nghe trên 203.100.10.10 và bạn đang dùng một IP mà tcp ở trên cho phép "transfer zone" 123.com, bạn có thể dùng lệnh sau: [conmeo@home conmeo]$ dig @203.100.10.10 axfr 123.com Trong đó, - dig là tiện ích dig - @203.100.10.10 là IP của primary DNS server bạn muốn thử transfer zone 123.com có cho phép hay không - 123.com là "zone" (hoặc domain) bạn muốn thử transfer sẽ cho bạn kết quả tương tự như sau: Code:
; <<>> DiG 9.2.1 <<>> @203.100.10.10 axfr 123.com
;; global options:  printcmd
123.com.             259200    IN      SOA     ns1.123.com. hostmaster.123.com. 1098357511 16384 2048 1048576 2560
123.com.             86400   IN      NS      ns1.123.com.
123.com.             86400   IN      NS      ns2.123.com.
123.com.             86400   IN      MX      0 mail.123.com.
www.123.com.         86400   IN      A       203.100.10.12
mail.123.com.        86400   IN      A       203.100.10.11
ns1.123.com.         259200   IN      A       203.100.10.10
ns2.123.com.         259200   IN      A       204.200.20.29
123.com.             86400   IN      A       203.100.10.12
123.com.             259200    IN      SOA     ns1.123.com. hostmaster.123.com. 1098357511 16384 2048 1048576 2560
;; Query time: 463 msec
;; SERVER: 203.100.10.10#53(203.100.10.10)
;; WHEN: Thu Nov  14 15:34:18 2004
;; XFR size: 10 records
Bạn thử dùng một máy nào khác có IP không nằm trong quy định áp đặt trong hồ sơ tcp của axfrdns và thử lại xem? chắc chắn bạn sẽ được báo lỗi (ngoại trừ bạn quên mảnh :deny ở dòng cuối trong hồ sơ tcp). Nếu cần phải thêm bớt các entries trong hồ sơ tcp ở trên, bạn chỉ cần điều chỉnh theo ý muốn (tất nhiên phải đúng dạng quy định) và luôn luôn nhớ phải "make" sau mỗi lần điều chỉnh (chạy lệnh "make" ngay trong thư mục chứa hồ sơ tcp của axfrdns). Điều quan trọng cần lưu ý khi dùng dịch vụ axfrdns: nên cẩn thận khi xác lập quyền truy cập và chuyển zones cho các IP vì đây là cánh cửa mở ra những thông tin về mạng của bạn, kể cả những thông tin công cộng cần biết và công cộng không cần biết. Sau khi đã hoàn thành việc ấn định cho các IP cụ thể nào được quyền "transfer zones" trên primary DNS server của bạn (tinydns server), bạn cần phải chỉnh hồ sơ /etc/named.conf để nó biết được primary DNS server là host nào -23-. Secondary DNS server sẽ tự động cập nhật thông tin về zones (domains) từ primary DNS server dựa trên thông tin TTL -24- mà primary DNS server đã ấn định. Lời kết Tôi muốn mượn phần "lời kết" này để tổng kết cấu trúc và hoạt động của bộ djbdns. djbdns gồm ba dịch vụ chính: dnscache, tinydns và axfrdns (ngoài ra còn có walldns nhưng chúng ta không đề cập trong tài liệu này). Mỗi dịch vụ trên có chức năng và hoạt động khác nhau. - dnscache "lắng nghe" trên cả hai cổng 53 UDP và TCP, chức năng đặc trưng của nó là phục vụ recursive name resolving ==> mạng LAN của bạn cần giải quyết tên / IP của các hosts bên ngoài Internet. - tinydns "lắng nghe" chỉ trên cổng 53 UDP, chức năng đặc trưng của nó là phục vụ authoritative answering ==> các hosts bên ngoài Internet cần giải quyết tên các hosts thuộc các domain bạn làm chủ hay quản lý. - axfrdns "lắng nghe" chỉ trên cổng 53 TCP, chức năng đặc trưng của nó là phục vụ zones transfering ==> các secondary DNS servers như BIND chẳng hạn cần lấy zones từ tinydns, một primary DNS server. - Bạn có thể thiết kế một hoặc nhiều dnscache servers cho các LAN của bạn, các máy con trong LAN chỉ cần trỏ đến dnscache server để lấy thông tin (name / IP) của các hosts bên ngoài Internet. dnscache thay mặt các máy con để thực hiện việc này và lưu giữ (cache) các thông tin đã tìm được. Những thông tin được cache sẽ được dnscache xoá bỏ và cập khi chúng quá hạn. Bạn cũng có thể quy định cho dnscache đi thẳng đến tinydns của bạn để lấy thông tin về các hosts thuộc các domain bạn làm chủ hoặc quản lý, thay vì dnscache phải đi một vòng rất lớn để cuối cùng sẽ trở về chính tinydns server này. dnscache hoạt động hoàn toàn độc lập với tinydns. - Bạn có thể thiết kế rất nhiều mô hình khác nhau cho tinydns để đáp ứng nhu cầu cụ thể của mình. Trọn bộ các thông tin thuộc về zones (domains) của tinydns gói gọn trong hồ sơ data. Nếu cả primary DNS và secondary DNS (và các DNS server phụ khác thuộc giới hạn quản lý của bạn) đều dùng tinydns thì vấn đề cập nhật thông tin cho "zones" có thể tự động hoá hoàn toàn và cơ chế này rất an toàn so với cơ chế AXFR truyền thống. - Bạn có thể ấn định cho axfrdns của bạn cho phép những secondary DNS servers nào có thể transfer zones nếu chúng không dùng tinydns làm "authoritative" server. Nếu dùng phương pháp này, bạn cần phải cân nhắc và điều chỉnh hồ sơ tcp của axfrdns một cách cẩn thận để loại trừ những nguy cơ bảo mật có thể xảy ra. axfrdns cần phải biết tinydns ở đâu để lấy thông tin "zones". Nếu không có thông tin này, axfrdns vẫn có thể hoạt động nhưng không cung cấp bất cứ thông tin nào. Cho đến nay, có thể nói DNS là một dịch vụ cần thiết nhất cho môi trường liên mạng. Chức năng cốt lõi của DNS rất đơn giản nhưng thực tế ứng dụng rất đa dạng, cho nên vấn đề thiết kế DNS trở nên phức tạp. Nếu như bạn đã hình thành phương án và kế hoạch cho mỗi dịch vụ một cách rõ ràng, khúc chiết, việc thiết lập bộ djbdns để mang lại các dịch vụ nói trên thật ra không phức tạp. Hy vọng tài liệu này phần nào giúp ích bạn hình thành dịch vụ DNS bền bỉ và hiệu năng. hnd - vninformatics.com / diendantinhoc.net 11/2004 Chú thích: -22- dig một tiện dụng không thể thiếu cho những ai cần test và debug những vấn đề thuộc về DNS. dig được cài sẵn trong hầu hết các Linux distro gần đây. Nó là một tiện ích thuộc nhóm các tiện ích đi với BIND. nslookup cũng là một tiện dụng rất phổ biến nhưng đặc biệt trên *nix, dig được khuyến khích dùng để thay thế nslookup. -23- Có lẽ DNS server phổ biến nhất vẫn là BIND cho nên tôi đã đề cập đến /etc/named.conf. Có vài nhu liệu khác cung cấp dịch vụ DNS nói chung (ngoài BIND và djbdns) nhưng chúng rất ít thông dụng vì nhiều lý do khác nhau. Đối với BIND, giả định bạn muốn ấn định host đang được điều chỉnh /etc/named.conf làm secondary DNS server và tải dụng "zones" từ tinydns server trong ví dụ trên (có IP là 203.100.10.10), bạn có thể thêm giá trị tương tự như sau vào /etc/named.conf: zone "123.com" { type slave; masters 203.100.10.10; file "db.123.com"; }; -24- TTL là giá trị "Time To Live" hay là "thời gian sống". Đây là giá trị ấn định trong khoảng thời gian bao lâu thì thông tin về một host nào đó thuộc domain bạn làm chủ (hay quản lý) có giá trị. Sau thời gian TTL đó, DNS server nào cần biết thông tin các hosts thuộc domain bạn làm chủ (hay quản lý), nó phải liên hệ tinydns server của bạn để lấy thông tin mới nhất chớ không còn dùng thông tin đã được cached. Giá trị TTL là con số đi sau cùng trong mỗi dòng trong hồ sơ data của tinydns, có giá trị thời gian tính theo giây.]]>
/hvaonline/posts/list/175.html#581 /hvaonline/posts/list/175.html#581 GMT