Cách Cài Đặt DHCP Server trên Linux: Hướng Dẫn Thực Chiến

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

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ụ.

Share: