รัน Cisco ASAv บน Virtualbox

วันดีคืนดีผมอยากจะลองรัน Cisco ASA บนคอมขึ้นมา ก็เลยลองหาข้อมูลดู พบว่าวิธีที่จะทำได้คือใช้ ASAv ซึ่งเป็น VM ซึ่งออกแบบให้ทำงานบน VMWare หรือ QEMU แน่นอนว่าผมไม่มี VMWare ผมก็ต้องใช้รุ่น QEMU

ค้นในกูเกิล เค้าบอกว่าให้ไปหาไฟล์ asav932-200.qcow2 มาลองดู ก็ไปค้นมา จนเจอ ก็ลองรันดู

qemu-system-x86_64 -m 2048M -boot c -hda ./asav932-200.qcow2 -enable-kvm

ปัญหาคือ ต่อให้เปิด KVM แล้ว มันก็ยังช้าอยู่ ผมก็เลยลองเอาไปรันบน Virtualbox ดู ตอนแรกก็ทำไม่ได้ แครชทันที ลองดูในคอนโซล

info: running in virtualbox virtual environment.

อืม… มันรู้ด้วยว่าเราใช้ Virtualbox แฮะ หรือว่ามันจะล็อคไว้? อย่างนี้ต้องลอง spoof ว่าเป็น QEMU ดู

#!/bin/sh
MACHINE_NAME="ASAv"

VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" SeaBIOS
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVersion" "Ubuntu-1.8.2-1ubuntu1"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSReleaseDate" "04/01/2014"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "QEMU"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemProduct" "Standard PC (i4400FX + PIIX, 1996)"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVersion" "pc-i440fx-vivid"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVendor" "QEMU"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiChassisType" 0
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiChassisVersion" "pc-i440fx-vivid"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiProcVersion" "pc-i440fx-vivid"
VBoxManage setextradata "$MACHINE_NAME" "VBoxInternal/Devices/pcbios/0/Config/DmiProcManufacturer" "QEMU"

ลองรันดูอีกที ได้เว่ยเฮ้ย! สรุปคือโค้ดของเค้าจะตรวจสอบว่าตัวเองกำลังรันอยู่บนอะไร และถ้ามันไม่รู้จักมันก็จะไม่ยอมให้รัน

สรุปว่า จะรัน ASAv บน Virtualbox ได้ มีขั้นตอนดังนี้

  1. สร้าง VM ขึ้นมาใน Virtualbox ตั้ง OS เป็น Linux 2.6 / 3.x / 4.x ตั้งแรมเป็น 2048 MB ขึ้นไป (น้อยกว่านี้ บน QEMU ก็รันไม่ได้ครับ) ไม่ต้องสร้างฮาร์ดดิสก์ (เราจะจัดการอีกที)
  2. แก้การตั้งค่านิดหน่อย
    • System -> Motherboard -> Boot order เอาอย่างอื่นนอกจาก Hard Disk ออก
    • Audio -> Enable Audio ติ๊กออกเลย ไม่ได้ใช้
    • Network -> Adapter 1-4 ติ๊ก Enable ให้หมดเลย (ผมไม่แน่ใจว่าเพิ่มทีหลังได้มั้ย เลยก็เพิ่มเสียตอนนี้เลย)
    • Serial Ports -> Port 1 ติ๊ก Enable ไว้ก็ดีนะ
  3. แปลงไฟล์กันนิดหน่อย เปิด Terminal ขึ้นมา รันคำสั่ง
    qemu-img -O vdi /path/to/asav932-200.qcow2 ~/VirtualBox\ VMs/(VM Name)/asav932-200.vdi

    (ถ้ามันบอกว่า “command not found” ให้ลงแพกเกจ qemu-utils นะครับ)

  4. จากนั้น เอาสคริปต์ข้างบนไปใส่ในเท็กซ์ไฟล์ (สมมุติว่าชื่อ spoof.sh) แก้ชื่อ VM ให้เหมือนกับที่ตั้งไปเมื่อครู่ แล้วรัน
    sh ./spoof.sh

    สคริปต์จะตั้งค่าชื่อของระบบให้เหมือนกับ QEMU ซะ ASAv จะได้เชื่อว่าเรารันอยู่บน QEMU

  5. แก้การตั้งค่าของ VM อีกรอบ ไปที่ Storage -> Controller: SATA เพิ่มฮาร์ดดิสก์ที่เพิ่งแปลงไปเมื่อ 2 ข้อที่แล้ว
  6. คราวนี้ ลองรันดูได้เลย ถ้าในคอนโซลมีคำว่า
    info: running in kvm virtual environment.

    แปลว่าระบบหลงกลเราแล้วครับ เราสามารถใช้ ASAv ได้เลย

อย่างไรก็ตาม หากไม่มีไลเซนส์ของ ASAv ระบบจะจำกัดทราฟฟิกให้ไม่เกิน 100 Kbps เท่านั้นนะครับ ซึ่งก็น่าจะพอสำหรับการทดสอบทั่วไป ซึ่งถ้าจะจำลองอะไรที่ซับซ้อนหน่อย ผมแนะนำให้ใช้โปรแกรม GNS3 ซึ่งสามารถจำลองเราเตอร์ของ Cisco หรือจำลองฮับ จำลองสวิตช์ ได้หลายอย่าง ซึ่งเราสามารถเชื่อมต่อ VM ใน Virtualbox ได้เลย