
How to Set Up a Cisco 9800-CL Wireless Controller on Proxmox Without Losing Your Mind
2 days ago
3 min read
3
239
0
If you’ve ever tried getting a Cisco Catalyst 9800-CL running on Proxmox, you already know what happens: nothing works, every blog you find is half-wrong, Cisco’s documentation contradicts itself, and you start questioning every career decision you’ve made since high school.
So here’s the real guide, the one I wish existed before I wasted an afternoon fighting UEFI, corrupt ISOs, and “why the hell is this bootloader frozen?” moments. This is the setup that actually works.
Step 1: Get the Right Image
There’s only one correct image for virtualizing a 9800:
C9800-CL-universalk9.xx.xx.xx.(iso|ova|qcow2)If your file looks like this:
MFG_CTVM_8_10_xxx.isoThat’s not a 9800.
That’s the old AireOS vWLC. Wrong generation, wrong product, won’t behave like a 9800 no matter how hard you yell at it.
For Proxmox, the QCOW2 is the easiest, but if you want to install from scratch, the ISO works fine once you stop forcing it to UEFI-boot. For this, I used the ISO because that's what Proxmox likes the most.
Step 2: Create the VM (The Only Working Settings)
Proxmox’s defaults will absolutely tank this install. Here’s the config that doesn’t.
VM Settings That Work
BIOS: SeaBIOS
(Yes, really. The ISO is NOT UEFI-bootable, and Cisco doesn’t warn you.)
Machine: q35
CPU: host, 4 cores
RAM: 16GB (minimum)
Hard Disk: 64GB, SCSI, virtio-scsi-pci
NICs:
net0: vmxnet3
net1: vmxnet3
CD-ROM: attach the ISO as IDE or SATA
(Do NOT attach it as SCSI.)
Example Proxmox CLI Setup
qm create 103 \
--name C9800-CL \
--memory 16384 \
--cores 4 \
--cpu host \
--machine q35 \
--bios seabios \
--scsihw virtio-scsi-pciAdd your 64GB disk:
qm set 103 --scsi0 local-lvm:vm-103-disk-1Add NICs:
qm set 103 --net0 vmxnet3,bridge=vmbr0
qm set 103 --net1 vmxnet3,bridge=vmbr0Attach the ISO:
qm set 103 --ide2 local:iso/C9800-CL-universalk9.iso,media=cdromSet boot order:
qm set 103 --boot order=ide2Step 3: Fix the “It Looks Frozen” Problem
The ISO boots, then suddenly stops updating the screen. It looks dead.
It’s not.
The installer switches over to serial console mid-boot.
That’s why your Proxmox display freezes at:
IOSXEBOOT-4-BOOT_CDROM: Using Serial consoleYou simply aren’t looking at the right console anymore.
Fix:
qm set 103 --serial0 socketThen in the Proxmox UI:
Console → Serial0
And boom the installer continues.
Step 4: Run the Setup Wizard
Eventually you hit the initial setup prompts.
Use:
Management interface: GigabitEthernet1
IP address: any unused IP on your LAN
Subnet: whatever matches your network
Default route:
Destination prefix: 0.0.0.0/0
Next hop: <your-gateway>Example:
0.0.0.0/0
192.168.1.1You’ll be asked to create a username and password.
There’s no default. You set it now.
Step 5: Save and Reboot
Once the wizard finishes, the controller boots into IOS-XE normally.
You should be able to hit the GUI at:
https://<your-management-ip>Use the credentials you created.
If it fails, check your NIC bridging in Proxmox or firewall rules.

Common Failure Points (And Why They Happen)
1. “Access Denied” or “failed to load Boot0002”
Your ISO is UEFI-incompatible and you’re using OVMF.
Switch to SeaBIOS.
2. The installer freezes
It didn’t freeze — it switched to serial.
3. Disk too small
Anything under 32GB fails silently.
4. Wrong NIC type
Use vmxnet3 or you’ll have chaos later.
5. Wrong ISO
If it doesn’t start with C9800-CL, it’s not the right product.
Final Thoughts
Setting up a 9800-CL on Proxmox shouldn’t be this painful, but here we are.
Once it’s up, though, it runs great. Fast, clean, stable, and perfect for lab work.
If you want to take it further, you can:
Convert it to QCOW2 later
Add more NICs
Cluster multiple controllers
Connect APs and build a real home lab
Automate the whole config with Python/Ansible
But first: just get the damn thing to boot.
If this saved you a headache, good, that was the point.






