Hướng dẫn dựng PXE Boot Server trên Fedora với dnsmasq và iPXE từ A-Z

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Vấn đề: Cơn ác mộng cắm USB cài máy hàng loạt

Hãy tưởng tượng công ty vừa nhập về 15 dàn PC mới cho team dev. Hoặc phòng lab của bạn cần re-image lại 30 máy sau mỗi đợt pentest. Cách truyền thống của dân SysAdmin là gì? Chuẩn bị 2-3 chiếc USB Ventoy, chạy tới từng bàn, cắm USB, chọn phân vùng rồi ngồi chờ giải nén file.

Làm cách này rất tốn sức. Cài xong 15 máy bằng 2 chiếc USB thường ngốn đứt cả buổi sáng, khoảng 3 đến 4 tiếng liên tục. Chưa kể rủi ro USB chập chờn, hỏng chip nhớ hoặc cắm nhầm bản ISO cũ giữa các phòng ban. Nếu sếp yêu cầu bàn giao 50 máy trước giờ trưa, phương pháp thủ công chắc chắn vỡ trận. Giải pháp sạch sẽ hơn: tận dụng luôn hạ tầng mạng gigabit sẵn có để boot và kéo bộ cài tự động.

Khái niệm cốt lõi: PXE Boot, dnsmasq và iPXE hoạt động thế nào?

Cơ chế này tương đối dễ hiểu. Khi máy trạm bật nguồn, card mạng (NIC) sẽ phát tín hiệu broadcast vào mạng LAN hỏi: “Ở đây có ai cấp IP và giao thức khởi động cho tôi không?”.

  • PXE (Preboot Execution Environment): Tiêu chuẩn nạp bootloader nhúng sẵn trong chip ROM của card mạng và UEFI/BIOS. PXE nhận IP từ DHCP server, sau đó kéo file bootloader ban đầu về RAM để khởi động.
  • dnsmasq: Công cụ all-in-one kinh điển trên Linux. Thay vì phải dựng ISC-DHCP Server kết hợp tftpd-hpa cồng kềnh, dnsmasq gom trọn DNS, DHCP Proxy và TFTP vào một tiến trình chiếm chưa đầy 15MB RAM.
  • iPXE: Bản firmware mã nguồn mở thay thế PXE truyền thống. PXE chuẩn chỉ tải file qua TFTP vốn dùng UDP với block size nhỏ (thường chỉ đạt 1-2 MB/s). Trong khi đó, iPXE hỗ trợ kéo kernel và rootfs qua HTTP/HTTPS. Tốc độ lúc này chạm ngưỡng tối đa của cổng mạng 1Gbps (~110 MB/s), kèm theo menu đồ họa và script linh hoạt.

Thực hành: Dựng PXE Boot Server trên Fedora

Fedora là nền tảng máy chủ lab rất tiện nhờ kernel mới và package luôn được cập nhật sát upstream. Bạn hoàn toàn có thể tận dụng một máy workstation Fedora đang chạy để làm server boot cho toàn bộ văn phòng.

Bước 1: Cài đặt dnsmasq và Nginx

Đầu tiên, bạn cài dnsmasq cùng Nginx để phân phối file ISO qua giao thức HTTP tốc độ cao:

sudo dnf install -y dnsmasq nginx syslinux-tftpboot ipxe-bootimgs

Bước 2: Chuẩn bị firmware mồi cho TFTP

dnsmasq sẽ chỉ định thư mục TFTP root để gửi file nhị phân mồi đến client. Hãy tạo thư mục và copy file boot iPXE tương ứng cho cả hai chuẩn phần cứng:

sudo mkdir -p /var/lib/tftpboot
sudo cp /usr/share/ipxe/undionly.kpxe /var/lib/tftpboot/      # Cho máy đời cũ chạy Legacy BIOS
sudo cp /usr/share/ipxe/ipxe-x86_64.efi /var/lib/tftpboot/   # Cho máy đời mới chạy UEFI 64-bit

Bước 3: Cấu hình dnsmasq ở chế độ ProxyDHCP

Mạng văn phòng thường đã có router MikroTik hoặc DrayTek cấp DHCP. Nếu bật thêm một DHCP server nữa, xung đột IP (IP conflict) sẽ xảy ra ngay lập tức. Tính năng ProxyDHCP của dnsmasq giải quyết triệt để vấn đề này. Router chính vẫn giữ quyền cấp IP; dnsmasq chỉ chèn thêm tùy chọn boot (PXE options) khi nhận diện gói tin DHCP Discover từ client.

Tạo file cấu hình tại /etc/dnsmasq.d/pxeboot.conf:

sudo nano /etc/dnsmasq.d/pxeboot.conf

Giả sử card mạng của máy Fedora là enp3s0 và địa chỉ IP tĩnh là 192.168.1.100, bạn điền cấu hình chuẩn như sau:

# Lắng nghe trên interface mạng nội bộ
interface=enp3s0
bind-interfaces

# Chạy chế độ Proxy DHCP trên subnet nội bộ (không cấp phát IP range)
dhcp-range=192.168.1.0,proxy,255.255.255.0

# Kích hoạt TFTP Server tích hợp
enable-tftp
tftp-root=/var/lib/tftpboot

# Nhận diện kiến trúc client: BIOS (0) hay UEFI (7, 9)
dhcp-match=set:bios,option:client-arch,0
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-match=set:efi-x86_64,option:client-arch,9

# Phục vụ file nạp iPXE tương ứng qua TFTP
dhcp-boot=tag:bios,undionly.kpxe
dhcp-boot=tag:efi-x86_64,ipxe-x86_64.efi

# Sau khi iPXE nạp xong, bàn giao quyền điều khiển sang menu HTTP
dhcp-userclass=set:ipxe,iPXE
dhcp-boot=tag:ipxe,http://192.168.1.100/boot.ipxe

Bước 4: Tạo Boot Menu điều khiển bằng iPXE Script

Khi iPXE nạp xong vào RAM, nó sẽ tải file boot.ipxe từ Nginx để hiển thị menu trực quan. Bạn tạo file này trong thư mục web root:

sudo nano /usr/share/nginx/html/boot.ipxe

Nội dung menu mẫu như sau:

#!ipxe

set menu-timeout 15000
set menu-default fedora-live

:start
menu Network Boot System (PXE Lab Fedora)
item --gap --             ---------------- OS INSTALLERS ----------------
item fedora-live          Cai dat Fedora Workstation 39 (Live)
item local                Khoi dong tu o cung noi bo
item shell                Mo iPXE Command Shell
choose --timeout ${menu-timeout} --default ${menu-default} target && goto ${target}

:local
echo Booting from local drive...
exit

:shell
shell

:fedora-live
echo Dang tai Linux Kernel va Initrd qua HTTP (1Gbps)...
kernel http://192.168.1.100/os/fedora/vmlinuz ip=dhcp root=live:http://192.168.1.100/os/fedora/squashfs.img ro rd.live.image quiet
initrd http://192.168.1.100/os/fedora/initrd.img
boot

Kế tiếp, mount file ISO Fedora, chép vmlinuz, initrd.img và squashfs.img vào /usr/share/nginx/html/os/fedora/. Việc nạp qua HTTP sẽ hoàn tất chỉ trong khoảng 15-20 giây trên switch 1Gbps thông thường.

Bước 5: Cấu hình Firewall và khởi chạy dịch vụ

Fedora mặc định bật firewalld rất chặt chẽ. Bạn cần mở port cho DHCP (67/udp), TFTP (69/udp) và HTTP (80/tcp):

sudo firewall-cmd --permanent --add-service={dhcp,dns,tftp,http}
sudo firewall-cmd --reload

sudo systemctl enable --now dnsmasq
sudo systemctl enable --now nginx

Kiểm tra lại trạng thái dịch vụ:

systemctl status dnsmasq nginx --no-pager

Giờ là lúc thử nghiệm. Hãy cắm cáp LAN vào máy trạm, bật nguồn và nhấn phím gọi Boot Menu (F12 trên Dell/Lenovo hoặc F11 trên MSI/HP). Chọn Network Boot / UEFI PXE, máy sẽ load menu trong chớp mắt.

Tổng kết

Chỉ với dnsmasq và iPXE trên nền Fedora, bạn đã có một boot server gọn nhẹ nhưng tốc độ vượt trội. Mô hình ProxyDHCP vừa đảm bảo an toàn cho hệ thống mạng hiện có, vừa giúp bạn mở rộng thêm image cài đặt Windows PE hay Ubuntu Server bất cứ khi nào cần.

Share: