Bắt Đầu Nhanh — Khởi Động DHCP Server trong 5 Phút
Sáu tháng trước, tôi thay thế một chiếc router cũ kỹ — vừa kiêm vai trò DHCP host vừa bắt đầu trở chứng — bằng một máy Ubuntu 22.04 chuyên dụng. Ba subnet và sáu tháng chạy production sau đó, hệ thống Linux chưa một lần gặp sự cố. Nó ổn định và linh hoạt hơn bất kỳ firmware consumer nào tôi từng xử lý.
Con đường nhanh nhất để có DHCP server hoạt động trên Linux là dnsmasq. Nó xử lý cả DHCP lẫn DNS trong một gói nhẹ — hoàn hảo nếu bạn chưa cần đến tính năng enterprise.
# Cài đặt dnsmasq
sudo apt update && sudo apt install -y dnsmasq
# Dừng systemd-resolved nếu đang chiếm cổng 53
sudo systemctl disable --now systemd-resolved
sudo rm /etc/resolv.conf
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Chỉnh sửa file cấu hình chính:
sudo nano /etc/dnsmasq.conf
Thêm các dòng sau (điều chỉnh interface và dải IP cho phù hợp với mạng của bạn):
interface=eth1
bind-interfaces
dhcp-range=192.168.10.100,192.168.10.200,24h
dhcp-option=option:router,192.168.10.1
dhcp-option=option:dns-server,8.8.8.8,1.1.1.1
Khởi động dịch vụ:
sudo systemctl restart dnsmasq
sudo systemctl enable dnsmasq
Đây là cấu hình tối thiểu để cấp phát IP trên mạng nội bộ. Nếu bạn cần kiểm soát nhiều hơn — static lease, nhiều subnet, PXE boot — hãy tiếp tục đọc.
Tìm Hiểu Sâu — ISC DHCP Server để Kiểm Soát Toàn Diện
Khi hệ thống của tôi mở rộng lên ba VLAN và môi trường PXE boot, dnsmasq bắt đầu bộc lộ giới hạn. Tôi chuyển sang isc-dhcp-server (tức dhcpd cổ điển), cho phép kiểm soát chi tiết từng khía cạnh của việc gán địa chỉ.
Cài Đặt
sudo apt install -y isc-dhcp-server
Khai Báo Interface Lắng Nghe
Chỉnh sửa /etc/default/isc-dhcp-server để chỉ định interface mà dhcpd sẽ lắng nghe:
INTERFACESv4="eth1"
Viết Cấu Hình Chính
File cấu hình chính nằm tại /etc/dhcp/dhcpd.conf. Dưới đây là ví dụ production-ready với static reservation và thời gian lease hợp lý:
# Cấu hình toàn cục
default-lease-time 86400; # 24 giờ
max-lease-time 604800; # 7 ngày
authoritative;
# Khai báo subnet
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8, 1.1.1.1;
option broadcast-address 192.168.10.255;
}
# Lease tĩnh cho một server
host fileserver {
hardware ethernet aa:bb:cc:dd:ee:ff;
fixed-address 192.168.10.50;
}
Khởi Động và Kiểm Tra
sudo systemctl restart isc-dhcp-server
sudo systemctl enable isc-dhcp-server
# Kiểm tra trạng thái
sudo systemctl status isc-dhcp-server
# Theo dõi lease theo thời gian thực
sudo tail -f /var/lib/dhcp/dhcpd.leases
Nếu dịch vụ không khởi động được, trình phân tích cú pháp thường hiển thị thông báo lỗi khá rõ ràng. Chạy sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf để kiểm tra cấu hình mà không cần restart dịch vụ.
Hiểu về File Lease
Cơ sở dữ liệu lease tại /var/lib/dhcp/dhcpd.leases ghi lại mọi lần gán địa chỉ. Các mục có dạng như sau:
lease 192.168.10.105 {
starts 5 2024/01/12 02:30:00;
ends 6 2024/01/13 02:30:00;
binding state active;
hardware ethernet 11:22:33:44:55:66;
client-hostname "laptop-dev";
}
File này chỉ ghi thêm — các mục đã hết hạn sẽ tích lũy theo thời gian. Điều đó là bình thường. dhcpd sẽ ghi lại định kỳ để tránh file phình to mãi.
Sử Dụng Nâng Cao
Nhiều Subnet và VLAN
Đến tháng thứ hai, tôi cần hỗ trợ nhiều subnet. Cách tiếp cận: một virtual interface cho mỗi VLAN trên Linux host, hoặc dùng trunk port trên managed switch. Đây là cách tạo VLAN interface:
# Tạo VLAN interface (yêu cầu gói vlan)
sudo ip link add link eth1 name eth1.20 type vlan id 20
sudo ip addr add 192.168.20.1/24 dev eth1.20
sudo ip link set eth1.20 up
Sau đó thêm một khối subnet nữa trong dhcpd.conf:
subnet 192.168.20.0 netmask 255.255.255.0 {
range 192.168.20.50 192.168.20.150;
option routers 192.168.20.1;
option domain-name-servers 8.8.8.8;
}
Cập nhật dòng interface trong /etc/default/isc-dhcp-server:
INTERFACESv4="eth1 eth1.20"
Hỗ Trợ PXE Boot
Triển khai máy qua network boot? Thêm các tùy chọn sau vào khối subnet của bạn:
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
option domain-name-servers 8.8.8.8;
# Tùy chọn PXE boot
filename "pxelinux.0";
next-server 192.168.10.10; # IP của TFTP server
}
Giám Sát Lease Đang Hoạt Động
Để xem nhanh, tôi tạo một alias nhỏ để phân tích file lease thành bảng dễ đọc:
alias dhcp-leases='grep -E "lease|hardware|client-hostname" /var/lib/dhcp/dhcpd.leases | paste - - -'
Để có thứ gì đó có cấu trúc hơn, dhcpd-pools cung cấp thống kê mức sử dụng pool:
sudo apt install dhcpd-pools
dhcpd-pools -c /etc/dhcp/dhcpd.conf -l /var/lib/dhcp/dhcpd.leases
Mẹo Thực Tế Từ Sáu Tháng Chạy Production
Luôn Chạy dhcpd -t Trước Khi Restart
Một lỗi cú pháp trong cấu hình sẽ âm thầm làm tắt DHCP service. Hãy biến điều này thành thói quen:
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf && sudo systemctl restart isc-dhcp-server
Thiết Lập Cặp Failover
Đừng bỏ qua bước này. Khi DHCP server bị sập, mọi thiết bị mới kết nối vào mạng đều không lấy được IP — chúng kết nối, chờ hết timeout 60 giây rồi bỏ cuộc. ISC DHCP có sẵn giao thức failover tích hợp. Hai server chia sẻ trạng thái lease, vì vậy client có thể gia hạn từ bất kỳ server nào:
# Trên server chính, thêm vào bên trong khối subnet:
failover peer "dhcp-failover" {
primary;
address 192.168.10.1;
port 647;
peer address 192.168.10.2;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
mclt 3600;
split 128;
}
Server phụ dùng cấu hình tương tự nhưng thay primary; bằng secondary;.
Quy Tắc Firewall
Đừng quên cho phép lưu lượng DHCP qua firewall. DHCP sử dụng cổng UDP 67 (server) và 68 (client):
sudo ufw allow 67/udp
sudo ufw allow 68/udp
Ghi Log Đầy Đủ
dhcpd ghi log vào syslog theo mặc định. Lọc chỉ hoạt động DHCP bằng:
sudo journalctl -u isc-dhcp-server -f
Muốn log file lưu trữ lâu dài? Chuyển hướng trong /etc/dhcp/dhcpd.conf:
log-facility local7;
Sau đó cấu hình rsyslog để ghi local7.* vào /var/log/dhcpd.log.
dnsmasq vs isc-dhcp-server — Khi Nào Dùng Cái Nào
- dnsmasq: Home lab, văn phòng nhỏ, kết hợp DNS+DHCP trên một máy, cấu hình tối giản.
- isc-dhcp-server: Nhiều subnet, failover, PXE boot, bộ tùy chọn phức tạp, kiểm soát lease chi tiết.
Cả hai đều hoạt động tốt trong môi trường production. Hãy chọn dựa trên mức độ phức tạp bạn thực sự cần quản lý — không phải danh tiếng của công cụ.

