DHCP (Dynamic Host Configuration Protocol) là giao thức giúp tự động cấp phát địa chỉ IP và các thông số mạng cho thiết bị trong hệ thống. Việc cấu hình DHCP trên Linux không chỉ giúp quản lý mạng hiệu quả hơn mà còn giảm thiểu lỗi cấu hình thủ công. Trong bài viết này, mình sẽ hướng dẫn bạn cách cài đặt và cấu hình DHCP chi tiết trên Linux, từ cơ bản đến nâng cao.
Những điểm chính
- Tổng quan về DHCP: Hiểu rõ khái niệm DHCP là gì, vai trò của giao thức này trong việc tự động cấp phát địa chỉ IP và các thông số mạng trong hệ thống.
- Cấu hình DHCP Server sử dụng ISC DHCP Server: Biết cách triển khai DHCP Server trên Linux bằng phần mềm ISC, công cụ phổ biến và được hỗ trợ rộng rãi trong môi trường doanh nghiệp.
- Cấu hình DHCP Server sử dụng DNSmasq: Làm quen với cấu hình DHCP bằng DNSmasq – giải pháp đơn giản, phù hợp cho các hệ thống nhỏ hoặc nhu cầu triển khai linh hoạt.
- Cấu hình DHCP Server phía client: Nắm được cách thiết lập máy client để nhận IP từ DHCP Server, cả trên hệ điều hành Linux (CentOS) lẫn Windows.
- Biết thêm Vietnix – Nhà cung cấp dịch vụ lưu trữ tốc độ cao.
- Câu hỏi thường gặp: Giải đáp các thắc mắc thường gặp trong quá trình cấu hình DHCP, giúp bạn tự tin hơn khi triển khai thực tế.
Tổng quan về DHCP
DHCP (Dynamic Host Configuration Protocol) là một giao thức mạng giúp tự động cấp phát địa chỉ IP và các thông số cấu hình mạng cho các thiết bị (client) trong hệ thống. Thay vì phải thiết lập thủ công từng địa chỉ IP, DHCP server sẽ chủ động gán địa chỉ IP động nằm trong một dải IP xác định sẵn. Ngoài địa chỉ IP, máy chủ DHCP còn có thể cấp các thông tin khác như gateway, DNS, thời gian thuê IP (lease time),… cho client.

Quá trình hoạt động của DHCP diễn ra theo bốn bước chính:
- DHCPDISCOVER: Client gửi yêu cầu tìm DHCP server.
- DHCPOFFER: DHCP server phản hồi với đề nghị cấp phát IP.
- DHCPREQUEST: Client xác nhận chọn cấu hình từ server.
- DHCPACK: DHCP server gửi xác nhận cuối cùng, hoàn tất việc cấp IP.
Trong bài viết này, mình sẽ hướng dẫn bạn cách cài đặt và cấu hình DHCP server trên CentOS 8 – một trong những bản phân phối Linux phổ biến. Cụ thể, mình sẽ giới thiệu hai công cụ hỗ trợ cấu hình DHCP gồm ISC DHCP Server và DNSmasq – mỗi công cụ đều có ưu điểm riêng tùy theo quy mô và nhu cầu sử dụng.
Cấu hình DHCP Server sử dụng ISC DHCP Server
Để triển khai DHCP Server trên Linux bằng ISC DHCP Server, bạn có thể thực hiện theo các bước sau:
1. Cài đặt gói DHCP Server
Bạn sử dụng lệnh sau để cài đặt DHCP Server:
[root@blogd-net-lab01 ~]# dnf -y install dhcp-server
Sau khi cài đặt xong, gói dhcp-server
sẽ được thêm vào hệ thống.
2. Tạo và chỉnh sửa file cấu hình DHCP
File cấu hình chính của DHCP nằm tại /etc/dhcp/dhcpd.conf
. Khi mới cài đặt, file này hầu như chưa có nội dung, bạn nên sao chép file cấu hình mẫu từ thư mục tài liệu của gói cài đặt:
[root@blogd-net-lab01 ~]# cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
Sau đó, bạn mở file để chỉnh sửa:
[root@blogd-net-lab01 ~]# vi /etc/dhcp/dhcpd.conf
Bạn thêm các tham số chung cho tất cả các subnet:
option domain-name "labblogd.net";
option domain-name-servers ns1.labblogd.net, ns2.labblogd.net;
Khai báo cấu hình cho một mạng con cụ thể:
subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.0.0.100 10.0.0.200;
option domain-name-servers 10.0.0.1;
option domain-name "labblogd.net";
option routers 10.0.0.1;
option broadcast-address 10.255.255.255;
default-lease-time 600;
max-lease-time 7200;
}
3. Khởi động và kích hoạt dịch vụ DHCP
Sau khi cấu hình xong, bạn cần khởi động dịch vụ DHCP và cho phép nó tự động khởi động cùng hệ thống:
[root@blogd-net-lab01 ~]# systemctl start dhcpd
[root@blogd-net-lab01 ~]# systemctl enable dhcpd
4. Mở cổng tường lửa cho dịch vụ DHCP
DHCP sử dụng cổng 67/UDP để giao tiếp. Sử dụng lệnh sau để mở cổng tương ứng:
[root@blogd-net-lab01 ~]# firewall-cmd --add-service=dhcp --permanent
[root@blogd-net-lab01 ~]# firewall-cmd --reload
Nếu bạn muốn một client cụ thể luôn nhận IP cố định theo địa chỉ MAC, bạn có thể thêm đoạn cấu hình sau vào file /etc/dhcp/dhcpd.conf
:
host testclient {
hardware ethernet 00:0c:29:0b:61:6f;
fixed-address 10.0.0.111;
}
Cấu hình DHCP Server sử dụng DNSmasq
DNSmasq là một công cụ nhẹ, dễ cấu hình, được thiết kế cho các mạng nhỏ. Nó cung cấp nhiều chức năng như:
- Máy chủ DHCP và DHCPv6.
- Máy chủ DNS cục bộ với khả năng lưu cache và chuyển tiếp truy vấn DNS.
- Hệ thống quảng bá thông tin bộ định tuyến.
- Hỗ trợ các dịch vụ PXE boot, TFTP và BOOTP.
DNSmasq tương thích với các hệ điều hành phổ biến như Linux, *BSD, macOS và Android. Công cụ này lý tưởng cho việc cấu hình một DNS/DHCP server đơn giản mà hiệu quả. Bây giờ, bạn sẽ được hướng dẫn cách cài đặt và thiết lập DNS Server sử dụng DNSmasq trên hệ điều hành CentOS 8.
1. Cấu hình DHCP Server
Để cài đặt DNSmasq trên hệ thống, bạn sử dụng lệnh sau:
[root@blogd-net-lab01 ~]# yum install dnsmasq
Kết quả hiển thị sau khi cài đặt:
CentOS-8 - AppStream 6.6 kB/s | 4.3 kB 00:00
CentOS-8 - Base 3.9 kB/s | 3.8 kB 00:00
CentOS-8 - Extras 1.9 kB/s | 1.5 kB 00:00
Dependencies resolved.
===============================================================================================================================
Package Architecture Version Repository Size
===============================================================================================================================
Installing:
dnsmasq x86_64 2.79-6.el8 AppStream 317 k
Tiếp theo, bạn khởi động dịch vụ:
[root@blogd-net-lab01 ~]# systemctl start dnsmasq
Bạn cho phép DNSmasq tự động khởi động cùng hệ thống:
[root@blogd-net-lab01 ~]# systemctl enable dnsmasq
Bạn kiểm tra trạng thái hoạt động của dịch vụ:
[root@blogd-net-lab01 ~]# systemctl status dnsmasq
Kết quả mẫu:
● dnsmasq.service - DNS caching server.
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2020-03-24 10:42:56 +07; 1min 29s ago
Main PID: 24804 (dnsmasq)
Tasks: 1 (limit: 11183)
Memory: 2.0M
CGroup: /system.slice/dnsmasq.service
└─24804 /usr/sbin/dnsmasq -k
Mar 24 10:42:56 blogd-net-lab01 systemd[1]: Started DNS caching server..
Mar 24 10:42:56 blogd-net-lab01 dnsmasq[24804]: started, version 2.79 cachesize 150
Mar 24 10:42:56 blogd-net-lab01 dnsmasq[24804]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN2 DHCP DHCPv6 no-Lua TFT>
Mar 24 10:42:56 blogd-net-lab01 dnsmasq[24804]: reading /etc/resolv.conf
Mar 24 10:42:56 blogd-net-lab01 dnsmasq[24804]: using nameserver 192.168.21.2#53
Mar 24 10:42:56 blogd-net-lab01 dnsmasq[24804]: read /etc/hosts - 2 addresses
Bạn mở file cấu hình /etc/dnsmasq.conf
và thêm các dòng sau:
dhcp-range=10.0.0.50,10.0.0.200,12h
dhcp-option=option:router,10.0.0.1
dhcp-option=option:ntp-server,10.0.0.1
dhcp-option=option:dns-server,10.0.0.1
dhcp-option=option:netmask,255.0.0.0
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
dhcp-authoritative
Bạn khởi động lại dịch vụ để áp dụng cấu hình:
[root@blogd-net-lab01 ~]# systemctl restart dnsmasq
Bạn mở port trên Firewalld cho DHCP:
[root@blogd-net-lab01 ~]# firewall-cmd --add-service=dhcp --permanent
success
[root@blogd-net-lab01 ~]# firewall-cmd --reload
success
2. Sử dụng DNSmasq cấu hình DNS Server
- Bước 1: Thiết lập cấu hình cho DNSmasq:
Cấu hình DNSmasq được thực hiện thông qua tệp /etc/dnsmasq.conf
, ngoài ra cũng có thể thêm các tệp cấu hình người dùng trong thư mục /etc/dnsmasq.d
. Vì DNS đã được kích hoạt sẵn, trước khi tiến hành chỉnh sửa, bạn nên sao lưu lại tệp cấu hình gốc:
[root@blogd-net-lab01 ~]# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
Sau đó, bạn mở tệp cấu hình bằng công cụ soạn thảo văn bản:
[root@blogd-net-lab01 ~]# vi /etc/dnsmasq.conf
Cấu hình tùy chọn listen-address
để DNSmasq lắng nghe trên địa chỉ IP của máy chủ, bao gồm cả địa chỉ cục bộ:
listen-address=::1,127.0.0.1,10.0.0.1
Bạn cầm đảm bảo rằng máy chủ sử dụng địa chỉ IP tĩnh. Bạn có thể giới hạn interface mà DNSmasq hoạt động thông qua tùy chọn interface
. Nếu có nhiều giao diện, bạn có thể thêm nhiều dòng interface
:
interface=ens37
Để kích hoạt việc mở rộng tên host từ tệp /etc/hosts
, bạn bỏ dấu #
ở trước tùy chọn sau:
expand-hosts
Bạn thiết lập tên miền mặc định mà DNSmasq sẽ sử dụng:
domain=labblogd.net
Khai báo các máy chủ DNS chuyển tiếp mà DNSmasq sẽ sử dụng để truy vấn các domain không nằm trong mạng cục bộ:
# Google's nameservers
server=8.8.8.8
server=8.8.4.4
Bạn gán tên miền cục bộ với một địa chỉ IP nhất định bằng cách sử dụng tùy chọn address
:
address=/labblogd.net/127.0.0.1
address=/labblogd.net/10.0.0.1
Cuối cùng, bạn lưu lại tệp cấu hình và kiểm tra cú pháp của tệp bằng lệnh:
[root@blogd-net-lab01 ~]# dnsmasq --test
dnsmasq: syntax check OK.
- Bước 2: Cấu hình DNSmasq trong tệp /etc/resolv.conf:
Để toàn bộ truy vấn DNS chuyển qua dịch vụ DNSmasq, bạn hãy chỉnh sửa tệp /etc/resolv.conf
sao cho chỉ định rõ DNS là localhost:
[root@blogd-net-lab01 ~]# vi /etc/resolv.conf
Nội dung bạn cần thêm vào tệp:
nameserver 127.0.0.1
Vì /etc/resolv.conf
thường bị ghi đè bởi các trình quản lý mạng, nên cần bảo vệ tệp không bị chỉnh sửa bằng cách gán thuộc tính bất biến:
[root@blogd-net-lab01 ~]# chattr +i /etc/resolv.conf
[root@blogd-net-lab01 ~]# lsattr /etc/resolv.conf
----i-------------- /etc/resolv.conf
- Bước 3: Khai báo tên máy và tên miền trong tệp hosts:
DNSmasq sẽ sử dụng các bản ghi từ tệp /etc/hosts
, do đó hãy cập nhật tệp này với tên và IP tương ứng:
[root@blogd-net-lab01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 dnsmasq
10.0.0.1 dnsmasq
10.0.0.1 gateway
10.0.0.100 maas-controller
10.0.0.20 nagios
10.0.0.25 webserver1
Lưu ý
DNS cục bộ cũng có thể được cập nhật từ các máy khách DHCP hoặc các bản ghi được khai báo riêng.
Tiếp theo, bạn khởi động lại dịch vụ để áp dụng tất cả thay đổi:
[root@blogd-net-lab01 ~]# systemctl restart dnsmasq
Nếu firewall đang được bật, bạn hãy mở các dịch vụ DNS và DHCP để cho phép các truy vấn từ phía client:
[root@blogd-net-lab01 ~]# firewall-cmd --add-service=dns --permanent
success
[root@blogd-net-lab01 ~]# firewall-cmd --add-service=dhcp --permanent
success
[root@blogd-net-lab01 ~]# firewall-cmd --reload
success
Bước 4: Kiểm tra DNS cục bộ
Bạn cài đặt công cụ bind-utils
để thực hiện các truy vấn DNS qua dig
hoặc nslookup
:
[root@blogd-net-lab01 ~]# yum install bind-utils
Sau khi cài đặt, bạn kiểm tra tên miền nội bộ:
[root@blogd-net-lab01 ~]# dig labblogd.net
Kết quả trả về mẫu:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR
;; ANSWER SECTION:
labblogd.net. IN A 127.0.0.1
Hoặc sử dụng lệnh:
[root@blogd-net-lab01 ~]# nslookup labblogd.net
Kết quả:
Name: labblogd.net
Address: 127.0.0.1
Để kiểm tra truy vấn với tên đầy đủ của một máy chủ, bạn dùng lệnh:
[root@blogd-net-lab01 ~]# dig webserver1.labblogd.net
Hoặc:
[root@blogd-net-lab01 ~]# nslookup webserver1.labblogd.net
Kết quả mẫu:
Name: webserver1.labblogd.net
Address: 10.0.0.25
Bạn có thể truy vấn tra cứu IP ngược bằng lệnh:
[root@blogd-net-lab01 ~]# dig -x 10.0.0.25
Hoặc:
[root@blogd-net-lab01 ~]# nslookup 10.0.0.25
Kết quả như sau:
25.0.0.10.in-addr.arpa name = webserver1.labblogd.net.
Cấu hình DHCP Server phía client
1. Thiết lập với client là Centos
Để máy client có thể nhận địa chỉ IP động từ DHCP Server, bạn cần thực hiện một số cấu hình cơ bản như sau:
- Bước 1: Bạn sửa đổi tệp cấu hình giao diện Ethernet để thiết lập chế độ nhận IP qua DHCP.
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens37
UUID=2da380ad-6733-47d5-aead-e1a28d35faed
DEVICE=ens37
ONBOOT=yes
- Bước 2: Bạn cài đặt gói
dhcp-client
để máy client có thể gửi yêu cầu lấy IP.
[root@localhost ~]# dnf -y install dhcp-client
- Bước 3: Bạn gửi yêu cầu lấy IP từ máy chủ DHCP bằng lệnh
dhclient
.
[root@localhost ~]# dhclient ens37
- Bước 4: Bạn kiểm tra địa chỉ IP đã được cấp cho máy client.
[root@localhost ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:0e:b1:48 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/8 brd 10.255.255.255 scope global secondary dynamic ens37
valid_lft 377sec preferred_lft 377sec
inet6 fe80::20c:29ff:fe0e:b148/64 scope link
valid_lft forever preferred_lft forever
- Bước 5: Bạn kiểm tra kết nối giữa client và server.
[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=2.06 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.449 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=1.79 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=0.504 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=2.35 ms
64 bytes from 10.0.0.1: icmp_seq=6 ttl=64 time=0.404 ms
Khi bạn ping thành công, có nghĩa là client đã nhận IP và kết nối được với DHCP Server.
2. Thiết lập với client là Windows
Để máy tính Windows nhận IP động từ DHCP Server, bạn cần cấu hình card mạng của máy client ở chế độ tự động nhận địa chỉ IP. Cách thực hiện như sau:
- Truy cập vào Network and Sharing Center, chọn Change adapter settings.
- Nhấp chuột phải vào card mạng đang sử dụng, chọn Properties.
- Chọn Internet Protocol Version 4 (TCP/IPv4) → nhấn Properties.
- Chọn Obtain an IP address automatically và Obtain DNS server address automatically.
Sau khi thiết lập xong, bạn mở Command Prompt (cmd) và chạy lệnh sau để kiểm tra IP được cấp từ DHCP Server:
ipconfig /all
Nếu thấy địa chỉ IP, gateway, DNS,… được hiển thị đầy đủ, tức là client đã nhận IP thành công từ máy chủ DHCP. Tiếp theo, bạn kiểm tra kết nối bằng cách ping từ client đến server:
ping <địa_chỉ_IP_của_server>
Nếu nhận được phản hồi, điều đó cho thấy kết nối giữa client và server đã thiết lập thành công thông qua DHCP.
Vietnix – Nhà cung cấp dịch vụ lưu trữ tốc độ cao
Vietnix – Nhà cung cấp dịch vụ lưu trữ chất lượng cao, chuyên cung cấp dịch vụ thuê VPS với hạ tầng mạnh mẽ, 100% SSD cho tốc độ truy cập vượt trội và ổn định. Dịch vụ VPS Linux tại Vietnix hỗ trợ cấu hình linh hoạt, toàn quyền quản trị, đi kèm cơ chế bảo mật chặt chẽ và hệ thống backup tự động, mang đến giải pháp lưu trữ an toàn, hiệu quả và tối ưu chi phí cho người dùng. Liên hệ ngay để được tư vấn chi tiết!
Thông tin liên hệ:
- Hotline: 18001093
- Email: sales@vietnix.com.vn
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.
- Website: https://vietnix.vn/
Câu hỏi thường gặp
Khi nào nên chọn dnsmasq
thay vì isc-dhcp-server
trong môi trường Linux thực tế?
Bạn nên chọn dnsmasq thay vì isc-dhcp-server khi triển khai trong môi trường nhỏ, cần cấu hình đơn giản, gọn nhẹ và muốn kết hợp DHCP với DNS forwarding trong một công cụ. Nó lý tưởng cho mạng gia đình, lab test, hoặc các thiết bị nhúng. Ngược lại, nếu bạn cần tính năng DHCP nâng cao, hỗ trợ nhiều subnet hoặc PXE boot phức tạp, thì isc-dhcp-server sẽ phù hợp hơn.
Làm sao để giới hạn thời gian lease của một số địa chỉ IP nhất định trong file cấu hình DHCP?
Để giới hạn thời gian lease cho một số địa chỉ IP trong cấu hình DHCP trên Linux (với ISC DHCP Server), bạn chỉ cần khai báo thông số default-lease-time
và max-lease-time
trong từng khối cấu hình subnet hoặc host cụ thể. Với IP cấp phát động, cấu hình trong khối subnet sẽ áp dụng cho toàn bộ dải địa chỉ. Với IP cố định gán theo MAC, bạn có thể chỉ định thời gian lease riêng biệt cho từng thiết bị. Cách này giúp kiểm soát tốt hơn việc phân phối IP, nhất là trong môi trường cần quay vòng địa chỉ nhanh.
Lời kết
Qua bài viết này, bạn đã nắm được cách cấu hình DHCP trên Linux bằng cả hai công cụ phổ biến là ISC DHCP Server và DNSmasq, cũng như cách thiết lập phía client trên cả CentOS và Windows. Việc triển khai DHCP đúng cách không chỉ giúp tự động cấp phát địa chỉ IP hiệu quả, mà còn tối ưu hóa quản lý mạng trong nhiều môi trường khác nhau. Nếu bạn đang vận hành hệ thống máy chủ hoặc môi trường lab, hãy cân nhắc lựa chọn giải pháp phù hợp để đảm bảo hiệu suất và độ ổn định cho hệ thống mạng của mình.