Cuộc gọi lúc 2 giờ sáng: Tại sao DHCP cũ thất bại
Đó là lúc 2 giờ sáng thứ Ba. Điện thoại của tôi bắt đầu kêu inh ỏi. Trên bảng điều khiển giám sát, 650 máy chủ production tại trung tâm dữ liệu phụ đang nhấp nháy đỏ. Thủ phạm là gì? isc-dhcp-server cũ kỹ của chúng tôi cuối cùng đã chạm tới giới hạn. Sau sáu năm phục vụ theo kiểu “cứ thế mà chạy”, tệp lease (cấp phát) dung lượng 300MB đã bị hỏng. Toàn bộ mạng bị gián đoạn trong bốn phút kinh khủng khi dịch vụ chật vật phân tích cơ sở dữ liệu văn bản khổng lồ. Đó là một thảm họa.
Đây là thực tế khắc nghiệt khi quản lý hạ tầng lạc hậu. ISC DHCP đã phục vụ cộng đồng trong nhiều thập kỷ, nhưng nó là một con “quái vật” nguyên khối. Nó thiếu API gốc và yêu cầu khởi động lại toàn bộ dịch vụ cho mỗi thay đổi cấu hình dù là nhỏ nhất. Kể từ khi ISC chính thức ngừng hỗ trợ phần mềm này vào cuối năm 2022, việc tiếp tục sử dụng nó là một rủi ro bảo mật. Đó là lý do tại sao chúng tôi chuyển sang Kea DHCP. Kea có tính mô-đun, tốc độ nhanh và được thiết kế cho thế giới nơi hạ tầng là mã nguồn (Infrastructure as Code).
Chuyển sang Kea không chỉ là hiện đại hóa. Đó là xây dựng một hệ thống mạng có khả năng lập trình, mạnh mẽ và sẽ không làm bạn thất vọng vào giữa đêm.
Bắt đầu nhanh: Triển khai Kea trong 5 phút
Hãy ngăn chặn sự cố ngay lập tức. Nếu máy chủ hiện tại của bạn đang gặp lỗi, hãy làm theo các bước sau để chạy một bản Kea cơ bản trên Ubuntu hoặc Debian. Kea có cấu trúc mô-đun, tách biệt logic DHCP khỏi tác nhân quản lý (management agent).
1. Cài đặt các gói mô-đun
Khác với máy chủ “tất cả trong một” trước đây, Kea chia nhỏ các tính năng thành các gói cụ thể. Đối với thiết lập IPv4 tiêu chuẩn, bạn cần engine máy chủ và Control Agent.
sudo apt update
sudo apt install kea-dhcp4-server kea-ctrl-agent -y
2. Kiểm tra trạng thái cơ bản
Kiểm tra xem các dịch vụ có đang hoạt động không. Ban đầu chúng có thể báo lỗi. Điều này thường xảy ra vì chúng chưa được trỏ đến một giao diện mạng (network interface) vật lý nào.
systemctl status kea-dhcp4-server
systemctl status kea-ctrl-agent
3. Xác định phần cứng của bạn
Tìm tên chính xác của giao diện mạng nơi Kea sẽ lắng nghe các gói DISCOVER từ client.
ip link show
Tìm hiểu sâu: Cấu hình Engine hiện đại
JSON thay thế cho cú pháp ngoặc nhọn cũ kỹ, cồng kềnh của dhcpd.conf. Bạn có thể tìm thấy các tệp này trong /etc/kea/. Định dạng này là niềm mơ ước của các đội ngũ DevOps sử dụng Ansible hoặc Terraform để tạo cấu hình.
Bên trong cấu trúc kea-dhcp4.conf
Mở tệp /etc/kea/kea-dhcp4.conf. Tôi thường xóa các chú thích mặc định để giao diện gọn gàng hơn. Đây là mẫu cấu hình sẵn sàng cho môi trường production cho một subnet 192.168.10.0/24 tiêu chuẩn.
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "eth0" ]
},
"control-socket": {
"socket-type": "unix",
"socket-name": "/tmp/kea4-ctrl-socket"
},
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv",
"lfc-interval": 3600
},
"valid-lifetime": 4000,
"renew-timer": 1000,
"rebind-timer": 2000,
"subnet4": [
{
"subnet": "192.168.10.0/24",
"pools": [ { "pool": "192.168.10.50 - 192.168.10.150" } ],
"option-data": [
{
"name": "routers",
"data": "192.168.10.1"
},
{
"name": "domain-name-servers",
"data": "8.8.8.8, 1.1.1.1"
}
]
}
]
}
}
Các lưu ý quan trọng về hiệu năng
- Interfaces: Bạn phải chỉ định tên giao diện một cách rõ ràng. Sử dụng
"*"là một cách viết tắt lười biếng thường gây ra sự cố trên các máy chủ có nhiều cổng mạng. - Lease Database: Ở đây chúng tôi sử dụng
memfileđể đơn giản hóa. Nếu bạn đang quản lý hơn 75.000 lease đồng thời, hãy chuyển sang backendmysqlhoặcpostgresql. - LFC (Lease File Cleanup): Tham số
lfc-intervallà “người bạn thân nhất” của bạn. Nó định kỳ nén tệp lease lại, giúp ngăn chặn đúng lỗi hỏng tệp đã gây ra sự cố 2 giờ sáng của tôi.
Sử dụng nâng cao: Sức mạnh của Control Agent
Trước đây, việc thêm một bản ghi tĩnh (static reservation) duy nhất đồng nghĩa với việc phải khởi động lại toàn bộ dịch vụ DHCP. Điều đó làm mất các gói tin đang hoạt động và gây khó chịu cho người dùng. Kea loại bỏ thời gian chết này bằng cách sử dụng Control Agent.
Xây dựng cầu nối REST API
kea-ctrl-agent đóng vai trò như một cổng gateway. Nó lắng nghe các yêu cầu HTTP và chuyển các câu lệnh đến DHCP engine thông qua một Unix socket. Nó biến mạng của bạn thành một dịch vụ web.
Để bật API, hãy chỉnh sửa /etc/kea/kea-ctrl-agent.conf:
{
"Control-agent": {
"http-host": "127.0.0.1",
"http-port": 8000,
"control-sockets": {
"dhcp4": {
"socket-type": "unix",
"socket-name": "/tmp/kea4-ctrl-socket"
}
}
}
}
Giờ đây bạn có thể kiểm tra sức khỏe máy chủ hoặc tải lại cấu hình bằng curl. Không cần systemctl restart nữa.
curl -X POST -H "Content-Type: application/json" -d '{ "command": "list-commands", "service": [ "dhcp4" ] }' http://127.0.0.1:8000/
Mở rộng bằng Hook Libraries
Kea sử dụng kiến trúc plugin được gọi “Hooks”. Bạn cần tích hợp với một IPAM bên ngoài hoặc chạy một script khi có thiết bị mới kết nối? Hãy tải một thư viện chia sẻ (tệp .so). Nó nhanh hơn đáng kể so với các shell script ‘on commit’ cũ trong ISC DHCP.
Mẹo thực tế để chuyển đổi mượt mà
Chuyển từ isc-dhcp-server sang Kea không nên là một công việc thủ công nặng nề. Hãy sử dụng những mẹo thực tế này để giữ tinh thần thoải mái trong quá trình chuyển đổi.
1. Kiểm tra cú pháp trước khi hệ thống gặp lỗi
Kea rất khắt khe. Chỉ cần thiếu một dấu phẩy trong tệp JSON sẽ khiến dịch vụ dừng hoạt động hoàn toàn. Luôn chạy công cụ kiểm tra cấu hình tích hợp trước khi áp dụng bất kỳ thay đổi nào:
kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
2. Giữ các bản ghi tĩnh gọn gàng
Các bản ghi đặt trước (host reservations) nằm bên trong khối subnet. Nếu bạn có hàng trăm bản ghi, đừng làm lộn xộn tệp chính. Hãy sử dụng chỉ thị <?include "hosts.json" ?> để lấy chúng từ một tệp riêng biệt.
"reservations": [
{
"hw-address": "00:50:56:b4:12:af",
"ip-address": "192.168.10.20",
"hostname": "db-server-01"
}
]
3. Loại bỏ chế độ im lặng mặc định
Ghi nhật ký (logging) mặc định thường quá ít thông tin để xử lý các sự cố phức tạp. Hãy đặt mức độ severity thành INFO hoặc DEBUG. Tôi khuyên bạn nên đẩy các bản tin log này sang Grafana Loki để phát hiện các đợt ‘bão DHCP NAK’ trước khi chúng trở thành các yêu cầu hỗ trợ (tickets).
4. Tận dụng tính sẵn sàng cao (High Availability – HA)
Kea hỗ trợ các hook HA gốc cho chế độ ‘load-balancing’ hoặc ‘hot-standby’. Các máy chủ sẽ đồng bộ hóa các bản ghi lease trực tiếp. Bạn không cần thiết lập sao chép cơ sở dữ liệu phức tạp cho hầu hết các cấu hình tiêu chuẩn.
Chuyển sang Kea có một giai đoạn làm quen ban đầu, đặc biệt nếu bạn yêu thích các tệp văn bản thuần túy. Tuy nhiên, tính ổn định và khả năng tự động hóa là vô đối. Một khi nó đã chạy, nỗi lo sợ về việc hỏng tệp lease lúc 2 giờ sáng sẽ chỉ còn là quá khứ.

