Sunday, February 19, 2012

Cấu hình Linux DNS Server (P3)

Phần này tôi sẽ hướng dẫn cách delegate cho một subdomain.


Giả sử tôi có một subdomain là br1.mydomain.local. Đây là một chi nhánh của tổ chức mydomain.local.
Tôi muốn cho họ tự chịu trách nhiệm về việc quản lý các vấn đề liên quan đến DNS trong chi nhánh của họ. Khi đó, tôi sẽ ủy quyền cho họ để họ có thẩm quyền với cái br1.mydomain.local.

Ý tưởng chung sẽ là:
-Dựng một dns server trong br1.mydomain.local (ns.br1.mydomain.local)
-Trong SOA record của dns của mydomain.local (dns.mydomain.local), ta sẽ tiến hành ủy quyền về br1.mydomain.local.
-Sau khi đã ủy quyền cho br1.mydomain.local thì bất cứ vấn đề về dns của subdomain này sẽ do người admin của br1.mydomain.local chịu trách nhiệm xử lý.

Giả sử ns.br1.mydomain.local có địa chỉ ip là 10.0.0.10/24


File cấu hình của dns.mydomain.local

------------------------------------------------------------------------------
[root@dns chroot]# more etc/named.conf
options {
    directory "/var/named"; // set the container folder
    allow-transfer {"none";};
    dump-file "/var/log/named_dump.db";
};

###### zones definitions #######
zone "." in {
        type hint;
        file "named.root";
};

zone "mydomain.local" in {
        type master;
        file "mydomain.local.zone";
};

zone "localhost" in {
    type master;
    file "localhost.zone";
};

zone "0.0.10.in-addr.arpa" in {
        type master;
        file "mydomain.local.rev.zone";
};

zone "0.0.127.in-addr.arpa" in {
    type master;
    file "localhost.rev.zone";
};



File zone của mydomain.local
-------------------------------------------------------------------------
[root@dns chroot]# more var/named/mydomain.local.zone
$TTL 2d  ; set TTL value for zone
$ORIGIN  mydomain.local. ; domain name
; SOA record
@    IN    SOA    dns.mydomain.local.    admin.mydomain.local. (
    2011261200; serial number
;    2003080800 ; se = serial number
    2h;
    10m;
    7d;
    1h;
)
    IN    NS        dns.mydomain.local.
    IN    MX    10    mail.mydomain.local.
;defining ip address maps to each host name
dns    IN    A    10.0.0.2
mail    IN    A    10.0.0.3
www    IN    A    10.0.0.4
ftp    IN    CNAME    www.mydomain.local.
;subdomain definitions
$ORIGIN        br1.mydomain.local.
    IN    NS        ns.br1.mydomain.local.
ns    IN    A    10.0.0.10


Hãy chú ý phần tôi bôi đỏ. Đó chính là mấu chốt của việc uỷ quyền. Kể từ lúc này, biến ORIGIN sẽ là br1.mydomain.local. Ở đây, tôi cũng khai báo nameserver cho br1.mydomain.local là ns.br1.mydomain.local với ip là 10.0.0.10

Đối với ns.br1.mydomain.local
FIle cấu hình chính:

[root@ns chroot]# more etc/named.conf
options {
    directory "/var/named"; // set the container folder
    allow-transfer {10.0.0.2;};
    dump-file "/var/log/named_dump.db";
};

###### zones definitions #######
zone "." in {
        type hint;
        file "named.root";
};

zone "br1.mydomain.local" in {
        type master;
        file "br1.mydomain.local.zone";
};

zone "localhost" in {
    type master;
    file "localhost.zone";
};

zone "0.0.10.in-addr.arpa" in {
        type master;
        file "br1.mydomain.local.rev.zone";
};

zone "0.0.127.in-addr.arpa" in {
    type master;
    file "localhost.rev.zone";
};

--------------------------------------------------------------------
Zone file của br1.mydomain.local


[root@ns chroot]# more var/named/br1.mydomain.local.zone
$TTL 2d  ; set TTL value for zone
$ORIGIN br1.mydomain.local. ; domain name
; SOA record
@    IN    SOA    ns.br1.mydomain.local.    admin.mydomain.local. (
    2011261200; serial number
;    2003080800 ; se = serial number
    2h;
    10m;
    7d;
    1h;
)
    IN    NS        ns.br1.mydomain.local.
;    IN    MX    10    mail.mydomain.local.
;defining ip address maps to each host name
ns    IN    A    10.0.0.10
mail    IN    A    10.0.0.3

Ở đây, tôi sử dụng mail server của mydomain.local để minh họa. Lúc này mail.mydomain.local cũng sẽ có một name mới là mail.br1.mydomain.local và vẫn có địa chỉ cũ 10.0.0.3

Test lại:

----------------
[root@mail ~]# hostname
mail.br1.mydomain.local
[root@mail ~]# more /etc/resolv.conf
nameserver 10.0.0.10
domain br1.mydomain.local
[root@mail ~]# nslookup
> ns
Server:        10.0.0.10
Address:    10.0.0.10#53

Name:    ns.br1.mydomain.local
Address: 10.0.0.10
> mail
Server:        10.0.0.10
Address:    10.0.0.10#53

Name:    mail.br1.mydomain.local
Address: 10.0.0.3
> 10.0.0.10
Server:        10.0.0.10
Address:    10.0.0.10#53

10.0.0.10.in-addr.arpa    name = ns.br1.mydomain.local.
>

Sunday, February 12, 2012

Cấu hình Linux DNS Server (P2)

Phần 1 đã hướng dẫn cách cấu hình một master nameserver tức là server chịu trách nhiệm chính cho việc phân giải tên cho toàn miền.

Trong DNS có thêm một khái niệm nữa là một nameserver đóng vai trò của một server dự phòng gọi là slave nameserver (hay secondary server). Khi nameserver chính xảy ra vấn đề và không thể đảm nhận trách nhiệm phân giải cho toàn miền thì slave nameserver sẽ chịu trách nhiệm phân giải tên cho miền.

Slave nameserver làm nhiệm vụ dự phòng nên dữ liệu mà nó chứa cũng giống như dữ liệu của master nameserver chứa.

Giả sử slave nameserver có địa chỉ IP là 10.0.0.10/24. Các bước cấu hình như sau:


1.File cấu hình chính

Nội dung của file cấu hình chính named.conf của slave nameserver sẽ như sau:

[root@dns chroot]# more etc/named.conf
options {
    directory "/var/named"; // set the container folder
    allow-transfer {"none";};
    dump-file "/var/log/named_dump.db";
    allow-notify {10.0.0.2;}; <-- cho phép nhận các thông tin update từ master nameserver
};

###### zones definitions #######
zone "." in {
        type hint;
        file "slaves/named.root"; 
};

zone "mydomain.local" in {
        type slave;  <-- định kiểu cho server là slave
        file "slaves/mydomain.local.zone";
    masters {10.0.0.2;}; <-- định địa chỉ của master server
};

zone "localhost" in {
    type master;
    file "slaves/localhost.zone";
};

zone "0.0.10.in-addr.arpa" in {
        type slave;
        file "slaves/mydomain.local.rev.zone";
    masters {10.0.0.2;};
};

zone "0.0.127.in-addr.arpa" in {
    type master;
    file "slaves/localhost.rev.zone";
};

Như vậy, đối với named.conf của slave nameserver cần phải chỉ ra kiểu của server và đâu là master server.


2.Vấn đề về zone files:


Zone files trong slave nameserver có nội dung tương tự như của master nameserver. Do đó, ta có thể lấy lại nội dung các files của master nameserver.

[root@dns chroot]# ls var/named/*.zone
var/named/localhost.rev.zone  var/named/mydomain.local.rev.zone
var/named/localhost.zone      var/named/mydomain.local.zone


3.Kiểm tra


Đối với client, cần phải chỉnh sửa thông số của secondary nameserver trỏ về địa chỉ IP 10.0.0.10. Sau đó kiểm tra việc phân giải của slave nameserver khi master server đã bị disabled.

[root@mail ~]# more /etc/resolv.conf
nameserver 10.0.0.2
nameserver 10.0.0.10
domain mydomain.local
[root@mail ~]# nslookup
> ftp
Server:        10.0.0.10
Address:    10.0.0.10#53

ftp.mydomain.local    canonical name = www.mydomain.local.
Name:    www.mydomain.local
Address: 10.0.0.4
> mail
Server:        10.0.0.10
Address:    10.0.0.10#53

Name:    mail.mydomain.local
Address: 10.0.0.3
> 10.0.0.4
Server:        10.0.0.10
Address:    10.0.0.10#53

4.0.0.10.in-addr.arpa    name = www.mydomain.local.
>


Như vậy, slave nameserver 10.0.0.10 đã đóng vai trò của một nameserver phân giải cho miền.

Thursday, February 9, 2012

Cấu hình Linux DNS Server (P1)

BIND là một phần mềm đang được sử dụng rộng rãi trong việc triển khai DNS service cho hệ thống mạng. Ngoài BIND ra còn một số phần mềm mã nguồn mở khác cũng cho phép ta thiết lập, cấu hình một DNS server như PowerDNS, djbdns,...

Post này sẽ hướng dẫn cấu hình một master DNS server trên BIND 9 trong một trường hợp cụ thể. Yêu cầu để có thể làm đc là đã hiểu được khác niệm cơ bản về DNS.

Giả sử tôi có mô hình mạng gồm các server và host như sau:

Domain: mydomain.local
Hosts                     |   DNSname                     |     IP address
-----------------------------------------------------------------------------------------------------
DNS server                 dns.mydomain.local        10.0.0.2/24
Mail server                 mail.mydomain.local        10.0.0.3/24
Web/ftp server           www.mydomain.local        10.0.0.4/24
----------------------------------------------------------------------------------------------------
1.Cài đặt BIND

Có thể cài đặt thông qua yum (đang setup trên CentOS) hoặc từ build từ source

2.Xác định số zone files

Ta sẽ phải thiết lập các zone files để phục vụ cho việc phân giải tên (thuận / nghịch)

Ta sẽ cần tối thiểu các zone files sau:

-2 zone file cho việc phân giải thuận từ IP sang tên host. Một file dùng cho mydomain.local. Một file dùng cho localhost.

-2 zone file cho việc phân giải nghịch từ tên sang IP. Một file dùng cho subnet 10.0.0.0/24. Một file dùng cho localhost.

-Một zone file phân giải các root servers. Download tại http://www.internic.net/zones/named.root

Ta sẽ đặt tên các file đó như sau:

-Phân giải thuận: mydomain.local.zone (dùng cho mydomain.local) và localhost.zone (dùng cho localhost)

-Phần giải nghịch: localhost.rev.zone (dùng cho localhost) và mydomain.local.rev.zone (dùng cho 10.0.0.0/24 subnet)

Nội dung các file như sau:



[root@dns named]# ls *.zone
localhost.rev.zone  mydomain.local.rev.zone
localhost.zone      mydomain.local.zone
[root@dns named]# more mydomain.local.zone
$TTL 2d  ; set TTL value for zone
$ORIGIN  mydomain.local. ; domain name
; SOA record
@    IN    SOA    dns.mydomain.local.    admin.mydomain.local. (
    2011261200; serial number
    2h;
    10m;
    7d;
    1h;
)
    IN    NS        dns.mydomain.local.
    IN    MX    10    mail.mydomain.local.
;defining ip address maps to each host name
dns    IN    A    10.0.0.2
mail    IN    A    10.0.0.3
www    IN    A    10.0.0.4
ftp    IN    CNAME    www.mydomain.local.
--------------------------------------------
[root@dns named]# more mydomain.local.rev.zone
;Zone file for mydomain.local
;Name: mydomain.local.rev.zone
$TTL 2d
$ORIGIN 0.0.10.in-addr.arpa.
@    IN    SOA    dns.mydomain.local.    admin.mydomain.local    (
    2011261200; serial number
    2h
    10m
    7d
    1h
)
    IN    NS    dns.mydomain.local.
2    IN    PTR    dns.mydomain.local.
3    IN    PTR    mail.mydomain.local.
4    IN    PTR    www.mydomain.local.
------------------------------------------------------
[root@dns named]# more localhost.zone
;Zone file for localhost
;Name: localhost.zone
$TTL 2d
$ORIGIN localhost.
@    IN    SOA    localhost    root.localhost    (
    2011261200; serial number
    2h
    10m
    7d
    1h
)
@  1D  IN  NS @
   1D  IN  A  127.0.0.1
--------------------------------------------------
[root@dns named]# more localhost.rev.zone
;Reverse map for localhost
;Filename: localhost.rev.zone
$TTL 2d
@    IN    SOA    localhost    root.localhost    (
    2011261200; serial number
    2h
    10m
    7d
    1h
)
@  3W  IN  NS      localhost.
1  3W  IN  PTR     localhost.





3.Thiết lập file cấu hình named.conf

[root@dns etc]# more named.conf
options {
    directory "/var/named"; // set the container folder
    allow-transfer {"none";};
    dump-file "/var/log/named_dump.db";
};

###### zones definitions #######
zone "." in {
        type hint;
        file "named.root";
};

zone "mydomain.local" in {
        type master;
        file "mydomain.local.zone";
};

zone "localhost" in {
    type master;
    file "localhost.zone";
};

zone "0.0.10.in-addr.arpa" in {
        type master;
        file "mydomain.local.rev.zone";
};

zone "0.0.127.in-addr.arpa" in {
    type master;
    file "localhost.rev.zone";
};


Như vậy đã có đầy đủ các thành phần để xây dựng một Master DNS server đơn giản với BIND.

Cần điều chỉnh DNS của host về địa chỉ IP của DNS server là 10.0.0.2.

Test thử:

[root@mail ~]# more /etc/resolv.conf
nameserver 10.0.0.2
domain mydomain.local
[root@mail ~]# nslookup
> www.mydomain.local
Server:        10.0.0.2
Address:    10.0.0.2#53

Name:    www.mydomain.local
Address: 10.0.0.4
> ftp
Server:        10.0.0.2
Address:    10.0.0.2#53

ftp.mydomain.local    canonical name = www.mydomain.local.
Name:    www.mydomain.local
Address: 10.0.0.4
> 10.0.0.3
Server:        10.0.0.2
Address:    10.0.0.2#53

3.0.0.10.in-addr.arpa    name = mail.mydomain.local.
>



Lưu ý: nếu cài gói bind-chroot thì thư mục root của BIND sẽ nằm ở /varnamed/chroot

[root@dns chroot]# pwd
/var/named/chroot
[root@dns chroot]# ls
dev  etc  proc  var