Saturday, February 1, 2025

Hướng Dẫn Tạo Image Linux Tùy Chỉnh Cho Eve-NG, Unetlab và PNETLab

-

1. Giới thiệu

Việc tạo một image Linux tùy chỉnh để sử dụng trên các nền tảng giả lập mạng như Eve-NG, Unetlab, hay PNETLab giúp bạn xây dựng môi trường lab linh hoạt và tối ưu hóa tài nguyên. Trong bài viết này, mình sẽ hướng dẫn các bước tạo một image QCOW2 sử dụng QEMU, cài đặt các phần mềm cần thiết, và tích hợp image vào PNETLab.

Bài hướng dẫn này được thực hiện trên macOS, nhưng nếu bạn sử dụng Linux, các bước cũng gần như tương tự.

2. Cài Đặt QEMU và Công Cụ Hỗ Trợ.

✅ Trên macOS

Trên macOS, bạn có thể cài đặt QEMUsocket_vmnet (hỗ trợ networking mà không cần root) bằng Homebrew:

brew install socket_vmnet qemu

✅ Trên Linux

Nếu bạn đang sử dụng Linux, có thể cài đặt bằng lệnh:

sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils

2. Tạo Ổ Đĩa QCOW2

Chúng ta sẽ tạo một ổ đĩa ảo QCOW2 có dung lượng 30GB để cài hệ điều hành:

qemu-img create -f qcow2 hda.qcow2 30G

3. Cài Đặt Hệ Điều Hành

Tiếp theo, chúng ta sẽ boot vào file ISO của Debian để tiến hành cài đặt hệ điều hành.

✅ Trên Mac Intel (x86_64)

qemu-system-x86_64 -accel hvf -m 1024 -smp 2 -cpu host \
-cdrom debian-12.5.0-amd64-netinst.iso -boot d \
-hda hda.qcow2 -k en-us \
-vga virtio -display cocoa,show-cursor=on -monitor stdio \
-device e1000,netdev=user0 -netdev user,id=user0

✅ Trên Mac ARM

Nếu bạn đang dùng Mac M1/M2, bạn vẫn có thể chạy image x86 nhưng sẽ không có tăng tốc phần cứng:

qemu-system-x86_64 -m 1024 -smp 2 \
-cdrom debian-12.5.0-amd64-netinst.iso -boot d \
-hda hda.qcow2 -k en-us \
-vga virtio -display cocoa,show-cursor=on -monitor stdio \
-device e1000,netdev=user0 -netdev user,id=user0

Sau khi boot vào hệ điều hành, tiến hành cài đặt như thông thường.

4. Cấu Hình Cơ Bản Sau Cài Đặt.

Sau khi cài đặt xong, chúng ta cần cấu hình Telnet để cho phép kết nối điều khiển từ xa trong môi trường giả lập.

✅ Cài đặt xinetdtelnetd

apt update
apt install xinetd telnetd -y

✅ Cấu hình dịch vụ Telnet

Tạo file /etc/xinetd.d/telnet với nội dung:

sudo cat <<'EOF' > /etc/xinetd.d/telnet
service telnet
{
    disable = no
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure += USERID
}
EOF

✅ Khởi động lại dịch vụ

sudo service xinetd restart

✅ Kích hoạt serial console

systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

5. Cài Đặt Phần Mềm Cần Thiết.

Tùy vào mục đích sử dụng, bạn có thể cài các công cụ như hping3, nmap, GoBGP, FastNetMon, FRR:

apt install hping3 nmap -y

6. Tắt Máy Ảo

Sau khi cài đặt xong, thoát khỏi QEMU bằng lệnh:

(qemu) quit

7. Tối Ưu Hóa Image Trước Khi đóng gói.

Để giảm kích thước file QCOW2, bạn có thể chuyển đổi và nén nó:

Không nén (hiệu suất tốt hơn, dung lượng lớn hơn):

qemu-img convert -O qcow2 hda.qcow2 optimized.qcow2

Có nén (dung lượng nhỏ hơn, mất nhiều thời gian hơn):

qemu-img convert -O qcow2 -c hda.qcow2 optimized.qcow2

Sau đó, bạn có thể chuyển file optimized.qcow2 sang máy chủ PNETLab.

8. Tích Hợp Image Vào PNETLab

✅ Tạo template cho image

Chạy các lệnh sau trên máy chủ PNETLab:

cd /opt/unetlab/html/templates/intel/
cat <<EOF > fastnetmon.yml
---
type: qemu
description: FastNetMon trên Debian 12. root/retour123
name: fastnetmon
cpulimit: 2
icon: Server.png
cpu: 2
ram: 1024
ethernet: 1
console: telnet
shutdown: 1
qemu_arch: x86_64
qemu_version: 2.12.0
qemu_nic: virtio-net-pci
qemu_options: -machine type=pc,accel=kvm -serial mon:stdio -boot order=c
...
EOF

✅ Đặt file QCOW2 vào thư mục tương ứng

cd /opt/unetlab/addons/qemu/
mkdir fastnetmon-1.2
mv /path/to/optimized.qcow2 fastnetmon-1.2/hda.qcow2

Chạy lệnh sửa quyền để tránh lỗi:

/opt/unetlab/wrappers/unl_wrapper -a fixpermissions

9. Commit Image và Snapshot Trong PNETLab

Từ phiên bản 2.0.7, PNETLab hỗ trợ tính năng Commit trạng thái hiện tại của một Qemu hoặc Docker Node vào image gốc. Có 3 tùy chọn khi commit một node:

Tham khảo tài liệu 🔗 https://pnetlab.com/pages/documentation?slug=commit-image-docker-and-qemu

  • Commit vào Image gốc: Lưu tất cả thay đổi của node hiện tại vào image gốc.
  • Tạo Snapshot từ Image gốc: Lưu trạng thái hiện tại của node như một thiết bị mới. Lưu ý: Snapshot không thể hoạt động nếu thiếu Image gốc.
  • Tạo Image hoàn toàn mới: Lưu trạng thái hiện tại của node như một thiết bị độc lập, không phụ thuộc vào Image gốc. Tuy nhiên, dung lượng lưu trữ sẽ lớn hơn (chỉ áp dụng cho Qemu).

Ví dụ: Cấu hình một Qemu vIOS với hostname là State_01 và lưu cấu hình vào NVRAM:

📂 Xem thư mục của node:

ls /opt/unetlab/addons/qemu/

📌 Thực hiện Commit node:
Nhấp chuột phải vào node > Chọn “Commit”

Nếu bạn chọn Commit vào Image gốc, tất cả các thiết bị vIOS được tạo sau này sẽ có hostname là State_01.

Nếu bạn chọn Tạo Snapshot từ Image gốc, hệ thống sẽ tự động lưu trạng thái node thành một thiết bị mới. Bạn sẽ cần đặt tên cho Snapshot này.

🔢 Hệ thống sẽ tính toán dung lượng cần thiết cho Snapshot:
Ví dụ, một Snapshot chỉ chiếm 1.06 MB dung lượng. Điều này giúp bạn tạo nhiều bản sao từ một Image mà vẫn tiết kiệm ổ cứng.

Nhấp “Yes” để xác nhận, sau đó bạn sẽ thấy thiết bị mới xuất hiện với tên đã đặt.

📌 Lưu ý quan trọng:

  • Tính năng này rất hữu ích cho các thiết bị không hỗ trợ lưu cấu hình (ví dụ: Juniper). Bạn có thể tạo Snapshot thay vì commit trực tiếp.
  • Nếu xoá hoặc chỉnh sửa Image gốc, Snapshot có thể không hoạt động.
  • Với Windows Node, kích thước Snapshot sẽ lớn hơn.
  • Nếu chọn Tạo Image hoàn toàn mới, một Image độc lập sẽ được tạo, hoạt động riêng biệt ngay cả khi Image gốc bị xóa. Tuy nhiên, dung lượng lưu trữ sẽ lớn hơn nhiều so với Snapshot.

10 .Kết Luận

Vậy là bạn đã hoàn tất việc tạo một image Linux tùy chỉnh, tích hợp vào PNETLab, và tối ưu hóa để sử dụng trên Eve-NG hoặc Unetlab. Hy vọng bài viết này giúp bạn dễ dàng xây dựng môi trường lab của riêng mình!

Tham khảo 🔗 https://jmanteau.fr/posts/custom-linux-image-for-eve-ng-unetlab-or-pnetlab/

💡 Bạn có câu hỏi gì? Hãy để lại bình luận nhé! 🚀

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories