Cài đặt và cấu hình DHCP Server trên CentOS 7

Cuongquach.com – Hướng dẫn cài đặt và cấu hình DHCP Server trên CentOS 7. Như các bạn biết thì trong một hệ thống mạng doanh nghiệp hay dịch vụ, các thiết bị client như laptop, server, điện thoại,… đều cần có địa chỉ IP để hoạt động kết nối Internet. Nhưng chẳng lẽ chúng ta lại phải đi cấu hình IP cho từng thiết bị sao ?! Ôi thôi thật kinh khủng.

Chính vì lẽ đó mà dịch vụ/giao thức DHCP được ra đời với nhiệm vụ cấp phát IP động cho các thiết bị, giảm tải khối lượng công việc cho quản trị viên,… Vậy DHCP là gì ? DHCP Server là chi ? Rồi làm sao để cài đặt một DHCP Server trên CentOS 7 đây ?! Qua bài viết này, chúng ta sẽ cùng tìm hiểu các nội dung cơ bản trên (không tìm hiểu nâng cao).

cấp phát ip động dhcp - DHCP Server trên CentOS

DHCP là gì – DHCP Server là gì ?

DHCP (viết tắt của Dynamic Host Configuration Protocol) là một giao thức mạng đã được định nghĩa tiêu chuẩn trong IETF-RFC 2131 . Mục đích chính của giao thức này chính là cung cấp các thông tin như địa chỉ IP, subnet mask, gateway, dns server,… cho các máy tính thiết bị đang kết nối qua thiết bị mạng (có dây và không dây – wifi). Máy chủ dịch vụ đảm nhiệm hoạt động kiểm tra thông tin IP,… và thực hiện trao đổi cấp phát IP động thông qua giao thức DHCP chính là máy chủ dịch vụ DHCP Server.

Một DHCP server bao gồm bốn mục chính sau:

  • Options: các thông tin như địa chỉ IP, địa chỉ Subnet Mask, địa chỉ Gateway, địa chỉ DNS,… sẽ được DHCP Server cung cấp đầy đủ thông tin.
  • Scope: một dãy hay một đoạn địa chỉ IP đã được quy hoạch và chỉ định rõ ràng cho DHCP Server được phép cấp phát IP động thông qua DHCP cho máy tính client.
  • Reservation: là những thông tin địa chỉ IP đã được “để dành”, tức cấu hình sẵn địa chỉ IP đó cho một số loại máy tính client.
  • Lease: Thời gian “cho thuê” hoặc tồn tại của địa chỉ IP động đối với mỗi máy client.

Giao thức DHCP hoạt động ra sao ?

Quá trình của DHCP sẽ diễn ra với bốn bước cơ bản (hình minh hoạ dưới) như sau:

quá trình dhcp - DHCP Server trên CentOS

  • Khi máy tính/server client được khởi động và xác định cần xin cấp IP động từ DHCP Server. Thì client sẽ gửi gói tin DHCPDISCOVER dưới dạng broadcast trên lớp mạng thiết bị mà client đang kết nối tới. Mục đích của DHCPDISCOVER là tìm được DHCP Server cấp IP.
  • Nếu có tồn tại DHCP Server, thì DHCP Server sẽ nhận được gói tin DHCPDISCOVER của client. Lúc này DHCP Server tiến hành rà soát Cơ Sở Dữ Liêu IP đã cấp cho các client khác, xem còn trống IP nào không. Nếu có sẽ tiến hành gởi thông tin địa chỉ IP đính kèm cùng các thông tin khác trong gói tin Unicast DHCPOFFER gửi trả về máy tính client.
  • Máy tính client khi nhận được gói tin DHCPOFFER phản hồi từ DHCP Server sẽ tiến hành đánh giá thông tin IP động được cấp phát. Sau đó sẽ gửi trả lời DHCP Server bằng gói tin DHCPREQUEST với nội dung gói tin là thông tin địa chỉ IP trong gói tin DHCPOFFER trước đó. DHCPREQUEST chính là yêu cầu DHCP Server hãy cấp IP mà bạn đã đề nghị cho tôi đi.
  • DHCP server đồng ý cấp IP cho client thông qua gói Unicast DHCPACK.

Mô hình lab dịch vụ DHCP Server trên CentOS 7

Đây là mô hình bài lab DHCP Server mà mình hỗ trợ bạn thực hiện với các thông tin như hình dưới.

– Vậy ta cần thực hiện cấu hình IP tĩnh cho DHCP Server CentOS 7 trước. Theo như hình cung cấp thì DHCP Server sẽ có giá trị IP là “192.168.100.250” và Subnet Mask là “255.255.255.0” cùng Gateway “192.168.100.1“.

Xem thêm:
Cấu hình IP tĩnh trên CentOS 7

1. Cài đặt chương trình dịch vụ DHCP Server trên CentOS 7

– Chúng ta sẽ cài đặt gói chương trình DHCP với lệnh “yum“.

# yum install -y dhcp

– Kiểm tra xem gói chương trình “dhcp” đã được cài đặt hay chưa ? Nếu ra các gói “dhcp-*” như dưới đây, tức là đã cài đặt rồi.

# rpm -qa | grep dhcp
dhcp-4.2.5-58.el7.centos.x86_64
dhcp-libs-4.2.5-58.el7.centos.x86_64
dhcp-common-4.2.5-58.el7.centos.x86_64

– Chúng ta sẽ cấu hình cho dịch vụ DHCP khởi động cùng hệ thống (startup service). Tên chương dịch vụ DHCP trên CentOS lúc này sẽ là “dhcpd(dhcp daemon – dịch vụ DHCP).

# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service

– Cấu trúc các file/thư mục của dịch vụ DHCP Server mà bạn cần biết:

  • /etc/dhcp/dhcpd.conf : file cấu hình dịch vụ DHCP.
  • /var/lib/dhcpd/dhcpd.leases : file chứa thông tin các IP động đang cấp qua DHCP.
  • /var/log/message : log mặc định chứa quá trình DHCP 4 bước.

2. Cấu hình dịch vụ DHCP

– Đầu tiên bạn có thể copy file cấu hình config mẫu sẵn có để sử dụng cho cấu hình dịch vụ DHCP.

# cp -f /usr/share/doc/dhcp-*/dhcpd.conf.example /etc/dhcp/dhcpd.conf

– Bạn lưu ý là file cấu hình DHCP Server trên CentOS nằm ở đường dẫn :

# vi /etc/dhcp/dhcpd.conf

– Giờ thì chúng ta cùng tiến hành cấu hình DHCP nào. File cấu hình dịch vụ DHCP sẽ gồm 2 phần cơ bản (không tìm hiểu nâng cao):

  • Cấu hình toàn cục (global) : quy định những thông tin giá trị mặc định cho các khai báo lớp mạng (subnet) cấp phát ip động DHCP.
  • Cấu hình lớp mạng cấp phát IP động DHCP : quy định những giá trị thông tin cho việc cấp phát IP động thông qua DHCP.

Nội dung cấu hình mẫu của DHCP Server (trước khi vào phân tích sâu hơn)

# cat /etc/dhcp/dhcpd.conf
option domain-name "cuongquach.com";
option domain-name-servers ns1.cuongquach.com, ns2.cuongquach.com;
default-lease-time 600;
max-lease-time 7200;
lease-file-name "/var/lib/dhcpd/dhcpd.leases";
authoritative;
log-facility local7;

subnet 192.168.100.0 netmask 255.255.255.0 {
        range 192.168.100.10 192.168.100.100;
        default-lease-time 3600;
        max-lease-time 7200;
        option subnet-mask 255.255.255.0;
        option routers 192.168.100.1;
        option broadcast-address 192.168.100.255;
        option domain-name-servers 8.8.8.8;
}

2.1 Cấu hình toàn cục (global) DHCP Server

option domain-name "cuongquach.com";
option domain-name-servers ns1.cuongquach.com, ns2.cuongquach.com;
default-lease-time 600;
max-lease-time 7200;
lease-file-name "/var/lib/dhcpd/dhcpd.leases";
authoritative;

Chú thích 1 :

  • option domain-name : khai báo tên miền lớp mạng chung.
  • option domain-name-server : khai báo Name Server của domain bạn đã cung cấp ở trên.
  • default-lease-time : thời gian mặc định một IP DHCP tồn tại được cấp phát cho người dùng.
  • max-lease-time : thời gian tối đa một IP DHCP tồn tại được cấp phát cho người dùng.
  • lease-file-name : chỉ định file chứa thông tin về địa chỉ IP đã được cấp phát qua DHCP.
  • authoritative : nếu máy chủ dịch vụ DHCP này là máy chủ DHCP Server chính thức cho các mạng nội bộ, config này sẽ set đây là master DHCP server giúp tránh các server giả mạo.

Một số config khác dành cho khai báo cấu hình toàn cục DHCP Server.

allow bootp;
ignore client-updates;
deny leasequery;

Chú thích 2:

  • allow [ bootp ] : cho phép phản hồi với các gói tin query BOOTP.
  • deny [ leasequery ] : không trả lời các gói tin DHCPLEASEQUERY, gói tin này nhằm gia hạn thời gian sử dụng IP DHCP cấp khi sắp hết hạn sử dụng.
  • ignore [ client-updates ] : từ chối các request cập nhật Dynamic DNS.

Các cấu hình khác : https://linux.die.net/man/5/dhcpd.conf

2.2 Cấu hình DHCP – Khai báo mạng cấp phát DHCP

– Cấu hình lớp mạng và dãi IP được sử dụng để cấp phát IP DHCP. Giả sử mình cho phép sử dụng mạng nội bộ là 192.168.100/24 và dải IP mình sử dụng để cấp phát là từ 192.168.100.10 đến 192.168.100.100 .

subnet 192.168.100.0 netmask 255.255.255.0 {
        range 192.168.100.10 192.168.100.100;
        default-lease-time 3600;
        max-lease-time 7200;
        option subnet-mask 255.255.255.0;
        option routers 192.168.100.1;
        option broadcast-address 192.168.100.255;
        option domain-name-servers 8.8.8.8;
}

Chú thích 3:

  • range <ip_1> <ip_2> : ip_1 là điểm bắt đầu và ip_2 là điểm kết thúc
  • option subnet-mask : thông tin subnet mask của mạng IP được cấp phát.
  • option routers : cung cấp thông tin địa chỉ IP của router gateway mà client sẽ sử dụng khi nhận IP DHCP.
  • option broadcast-address : cung cấp thông tin broadcast của lớp mạng mà client sẽ nhận IP sử dụng.
  • option domain-name-servers : cung cấp thông tin DNS Server cho client.
  • default-lease-time : thời gian mặc định một IP DHCP tồn tại được cấp phát cho người dùng. Giá trị này khi nằm trong cấu hình “subnet” sẽ được áp dụng riêng với giá trị cấu hình “global“.
  • max-lease-time : thời gian tối đa một IP DHCP tồn tại được cấp phát cho người dùng.  Giá trị này khi nằm trong cấu hình “subnet” sẽ được áp dụng riêng với giá trị cấu hình “global“.

– Bạn hoàn toàn có thể cấu hình nhiều “subnet” trong file cấu hình DHCP.

2.3 Cấp IP DHCP cho 1 host cụ thể

– Trường hợp này là bạn đang muốn dành riêng 1 địa chỉ IP trong range IP DHCP cho một máy tính cụ thể trong hệ thống mạng. Máy tính đó có thể là của sếp, của trưởng phòng,.. 

– Vậy để làm được điều đó, thì DHCP Server trên CentOS cần có được thông tin địa chỉ MAC Address của máy tính của sếp hoặc trưởng phòng. Để khi mà máy tính client đi xin DHCP IP thì DHCP Server sẽ dựa vào địa chỉ MAC trong file cấu hình mẫu như dưới và cấp địa chỉ IP nằm trong giá trị khai báo “fixed-address“.

– Phần khai báo cấu hình này nằm trong nội dung cấu hình “subnet” của DHCP Server nhé.

subnet 192.168.100.0 netmask 255.255.255.0 {
    ...
    host giam-doc {
        hardware  ethernet 00:f0:m4:6y:89:0g;
        fixed-address 192.168.100.10;
    }

    host truong-phong {
        hardware  ethernet 00:4g:8h:13:8h:3a;
        fixed-address 192.168.100.11;
    }
}

2.4 Cơ Sở Dữ Liệu IP đã cấp bởi DHCP Server

Trên máy chủ dịch vụ DHCP Server trên CentOS, thì file ‘/var/lib/dhcpd/dhcpd.leases‘ sẽ lưu trữ toàn bộ thông tin về IP đang được cấp phát cho máy tính client. Nếu không có file này thì DHCP Server sẽ không hoạt động. Vì vậy hãy kiểm tra xem có file này trên máy chủ DHCP chưa ?! Nếu chưa thì hãy tạo nó như sau :

# touch /var/lib/dhcp/dhcpd.leases
# chown dhcpd:dhcpd /var/lib/dhcp/dhcpd.leases
# chmod 644 /var/lib/dhcp/dhcpd.leases

3. Khởi động DHCP Server và set rule firewall

– Giờ chúng ta sẽ khởi động dịch vụ DHCP trên CentOS.

# systemctl start dhcpd

– Tiếp đến chúng ta cần lưu ý firewall rule mở cho port 67 của dịch vụ DHCP. Nếu bạn sử dụng các dịch vụ tường lửa khác thì cần linh động tìm cách mở rule firewall cho port 67 UDP nhé. Ở bài này mình sử dụng iptables firewall làm mẫu.

Xem thêm:
Danh sách lệnh IPTABLES quản lý firewall iptables trên Linux

# iptables -A INPUT -p udp -m state --state NEW --dport 67 -j ACCEPT

hoặc dịch vụ tường lửa “firewalld” .

# firewall-cmd --add-service=dhcp --permanent 
success
# firewall-cmd --reload 
success

– Kiểm tra xem có dịch vụ DHCPd đã được listen socket port 67 udp chưa nhé.

# netstat -lnup | grep 67
udp        0      0 0.0.0.0:67              0.0.0.0:*                           21572/dhcpd

– Kiểm tra xem có tiến trình dịch vụ DHCPd đang được chạy trên hệ thống hay không với lệnh “ps“.

# ps aux | grep dhcp | grep -v "grep"
dhcpd    21572  0.0  0.2 117876 18448 ?        Ss   17:16   0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid

4. Cấu hình DHCP phía Client

4.1 DHCP Client trên CentOS/RHEL/Fedora

– Bây giờ bạn chỉ cần cấu hình card mạng trên CentOS sử dụng chức năng DHCP để xin cấp địa chỉ IP sử dụng. Trước tiên bạn cần xác định chính xác card mạng interface nào đang nằm cùng lớp mạng thiết bị hoặc VLAN với server DHCP nhé. Giả sử mình xác định là card mạng “eth0“.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
NAME=eth0
BOOTPROTO=dhcp
ONBOOT=yes

Chú thích:
+ BOOTPROTO : đặt giá trị là “dhcp” thì khi khởi động card mạng sẽ quy ước cho card mạng sử dụng giao thức DHCP broadcast đi xin cấp địa chỉ DHCP mới.

– Giờ thì bạn khởi động lại dịch vụ mạng và chờ kết quả nào.

# systemctl restart network

– Kiểm tra địa chỉ IP đã được cấp chưa.

# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:08:21:ad brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.20/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever

4.2 DHCP Client trên Ubuntu/Debian

– Kế tiếp chúng ta sẽ cấu hình card mạng trên Ubuntu/Debian xin cấp địa chỉ IP từ DHCP Server nhé. Giống như trên, thì bạn cần xác định đúng card mạng mà bạn muốn chạy DHCP.

# vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

– Khởi động lại card mạng eth0 trên Ubuntu/Debian nào.

# ifdown eth0; ifup eth0

– Kiểm tra địa chỉ IP đã được cấp chưa.

# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:08:21:ad brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.20/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever

4.3 DHCP Client trên Windows

– Vào “Control Panel > Network and Ethernet > Network and Sharing Center > Change Adapter Settings“.

dhcp client trên windows - 1

– Chuột phải vào biểu tượng card mạng bạn muốn cấp DHCP IP, chọn “Properties“. Chọn “Internet Protocol Version 4 (TCP/IP) > Properties“.

dhcp client trên windows - 2

– Chọn “Obtain an IP Address automatically“. Lúc này máy tính Windows sẽ tự động DHCP Broadcast để xin cấp địa chỉ IP.

dhcp client trên windows - 2

hoặc gõ các lệnh sau trên Terminal Command Prompt – Windows.

> ipconfig /release
> ipconfig /renew
> ipconfig /all

5. Troubleshooting dịch vụ DHCP – Xử lý sự cố dịch vụ DHCP

– Để xem những địa chỉ IP đã được cấp phát bởi DHCP Server trên CentOS ta sẽ xem ở file ‘dhcpd.leases‘.

# cat /var/lib/dhcpd/dhcpd.leases
lease 10.12.166.101 {
  starts 6 2017/09/16 15:59:39;
  ends 6 2017/09/16 16:59:39;
  cltt 6 2017/09/16 15:59:39;
  binding state active;
  next binding state free;
  rewind binding state free;
  hardware ethernet ec:b1:d7:84:2f:40;
  client-hostname "Cuongqc-HP-Ubu16042";
}

– Xem log quá trình cấp phát của dịch vụ DHCP (DHCP Discovery, DHCP ACK,…) thì xem lại file log “messages“.

# cat /var/log/message | grep -i "dhcp"
Sep 16 22:33:59 test-csa-ks dhcpd: DHCPDISCOVER from ec:b1:d7:84:2f:40 (Cuongqc-HP-Ubu16042) via eth1
Sep 16 22:33:59 test-csa-ks dhcpd: DHCPOFFER on 10.12.166.101 to ec:b1:d7:84:2f:40 (Cuongqc-HP-Ubu16042) via eth1
Sep 16 22:33:59 test-csa-ks dhcpd: DHCPREQUEST for 10.12.166.101 (10.12.166.253) from ec:b1:d7:84:2f:40 (Cuongqc-HP-Ubu16042) via eth1
Sep 16 22:33:59 test-csa-ks dhcpd: DHCPACK on 10.12.166.101 to ec:b1:d7:84:2f:40 (Cuongqc-HP-Ubu16042) via eth1

– Kiểm tra xem DHCP Discovery từ máy tính client có chạy vào được DHCP Server CentOS hay không ?! Ta sử dụng chương trình bắt gói tin “tcpdump” và capture port udp 67 trên interface mà DHCP Server Listen nhé.

# tcpdump -i eth0 port 67
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
23:06:54.962268 IP 10.12.166.192.bootpc > 10.12.166.253.bootps: BOOTP/DHCP, Request from ec:b1:d7:84:2f:40 (oui Unknown), length 300
23:06:54.963124 IP 10.12.166.253.bootps > 10.12.166.101.bootpc: BOOTP/DHCP, Reply, length 300
23:06:55.059297 IP 10.12.166.192.bootpc > 10.12.166.253.bootps: BOOTP/DHCP, Request from ec:b1:d7:84:2f:40 (oui Unknown), length 300
23:06:55.060234 IP 10.12.166.253.bootps > 10.12.166.101.bootpc: BOOTP/DHCP, Reply, length 300
23:07:05.424200 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 9c:dc:71:66:32:60 (oui Unknown), length 300
23:07:06.425783 IP 10.12.166.253.bootps > 10.12.166.116.bootpc: BOOTP/DHCP, Reply, length 300
23:07:06.426286 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 9c:dc:71:66:32:60 (oui Unknown), length 300

Vậy là thông qua bài viết này, bạn hoàn toàn có thể làm chủ dịch vụ DHCP Server trên CentOS rồi. Còn chờ gì nữa mà không thực hành cài đặt và cấu hình DHCP Server trên CentOS 7 nào. Nếu có bất kì thắc mắc gì, đừng ngại comment ngay bên dưới cùng “Cuongquach.com” nhé.

Quách Chí Cường

Previous articleEbook Practical LPIC-1 Linux Certification Study Guide PDF
Next articleHướng dẫn gỡ cài đặt dịch vụ CSF trên CentOS
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !