How to Import PNETLab OVA into Proxmox VE 8 Successfully: Complete Step-by-Step Guide (Fix Hard Disk Not Found & Virtualization Issues)

If you have downloaded the official PNETLab OVA appliance and tried importing it into Proxmox VE 8, chances are you’ve encountered frustrating errors like “Hard Disk Not Found”, storage errors, or virtualization problems that prevent the virtual machine from booting.

I recently migrated PNETLab 4.2.10 to Proxmox VE and faced exactly these issues. After several troubleshooting steps, I finally got the VM running perfectly. This guide documents every problem, every command, and every solution so you don’t have to spend hours searching through forums.

The methods in this article are based on a real installation performed on Proxmox VE 8 and include actual terminal outputs together with the final working configuration. Current Proxmox migration guidance also recommends using the host CPU type for imported virtual machines to ensure maximum compatibility with hardware virtualization features.


Read more: How to Import PNETLab OVA into Proxmox VE 8 Successfully: Complete Step-by-Step Guide (Fix Hard Disk Not Found & Virtualization Issues)
Read more: How to Import PNETLab OVA into Proxmox VE 8 Successfully: Complete Step-by-Step Guide (Fix Hard Disk Not Found & Virtualization Issues)

Why Import PNETLab into Proxmox?

PNETLab has become one of the most popular network emulation platforms for CCNA, CCNP, CCIE, VMware, Linux, Fortinet, Palo Alto, Cisco, Juniper, MikroTik, and cloud networking labs. While VMware ESXi remains a common deployment option, many administrators are now migrating to Proxmox VE because it is open source, lightweight, enterprise-ready, and does not require expensive licensing.

The challenge is that the official PNETLab download is distributed as an OVA appliance intended primarily for VMware environments. Importing this appliance into Proxmox is not always straightforward. During my migration, the process initially failed due to a storage selection mistake, followed by what appeared to be a missing virtual disk problem, and finally the imported virtual machine would not boot correctly because of CPU virtualization compatibility. These are common migration issues when moving VMware-based virtual appliances to KVM/Proxmox, and current Proxmox migration guidance recommends adjusting CPU type and verifying storage mappings after import.

Fortunately, once these issues are understood, the solution is surprisingly simple.


System Requirements

Hardware Requirements

ComponentRecommended
CPUIntel VT-x or AMD-V with virtualization enabled
RAM16 GB minimum (32 GB recommended)
StorageSSD with 100 GB or more
NetworkGigabit Ethernet
Proxmox VersionProxmox VE 8.x

Software Requirements

  • Proxmox VE 8
  • PNETLab 4.2.10 OVA
  • SSH access to Proxmox
  • Root privileges

Step 1 – Upload the PNETLab OVA

First, upload the downloaded OVA file to your Proxmox server.

Example:

scp PNET_4.2.10.ova root@proxmox:/root/

After uploading, verify the files.

ls -lh

Example output:

PNET_4.2.10-disk1.vmdk
PNET_4.2.10.mf
PNET_4.2.10.ova
PNET_4.2.10.ovf
pnetlab.qcow2

If your OVA has not yet been extracted, you can extract it with:

tar -xvf PNET_4.2.10.ova

Step 2 – Import the OVF into Proxmox

Initially, I attempted the following command:

qm importovf 103 ./PNET_4.2.10.ovf sata_ssd

Unfortunately, Proxmox returned:

storage 'sata_ssd' does not exist

The error was straightforward—the storage name did not exist on my server.

Checking available storage solved the mystery:

pvesm status

Output:

Name         Type
local
local-lvm

The correct storage was local-lvm.

I reran the command:

qm importovf 103 ./PNET_4.2.10.ovf local-lvm

This time the import started successfully.

Example:

Logical volume "vm-103-disk-0" created.

transferred 1 GiB
transferred 2 GiB
transferred 3 GiB
...

The VM disk was successfully imported into Proxmox.


Step 3 – Verify VM Configuration

After importing, check the VM configuration.

qm config 103

Output:

boot: order=scsi0
cores: 4
memory: 8192
name: PNET4.2.4
net0: e1000
scsi0: local-lvm:vm-103-disk-0

The important thing to verify is:

scsi0: local-lvm:vm-103-disk-0

This confirms the imported disk is attached correctly.


Step 4 – Fix the Virtualization Problem

Although the import completed successfully, the VM still would not boot correctly.

The cause was the CPU model.

By default, Proxmox may assign a generic CPU model that does not expose all virtualization extensions required by PNETLab. Since PNETLab itself runs nested virtual machines such as Cisco routers, FortiGate firewalls, Palo Alto, VMware images, Linux servers, and many other appliances, hardware virtualization support is extremely important. Current Proxmox migration documentation also recommends selecting CPU Type = host for imported virtual machines that rely on virtualization features.

The fix was simple:

qm set 103 --cpu host

After applying the change:

qm config 103

Output:

cpu: host

That single modification solved the virtualization issue.


Step 5 – Start the Virtual Machine

After changing the CPU type:

qm start 103

The PNETLab server booted successfully.

I was then able to access the web interface normally.


Understanding the Serial Interface Error

At one point I executed:

qm terminal 103

The result was:

unable to find a serial interface

This message is not an import failure.

It simply means the virtual machine does not have a serial console configured. Since PNETLab uses a graphical console during boot, this message can safely be ignored. If desired, you can later add a serial device through the Proxmox GUI or CLI, but it is not required for normal PNETLab operation.


Common Errors and Their Solutions

ErrorCauseSolution
Hard Disk Not FoundOVF cannot locate VMDKEnsure VMDK is in the same directory as the OVF
Storage does not existWrong storage IDCheck pvesm status
VM won’t bootCPU incompatibilityqm set <vmid> --cpu host
No serial interfaceNo serial port configuredSafe to ignore
Import failsCorrupt OVARe-download the appliance

Commands Used During Installation

ls -lh

pvesm status

qm importovf 103 ./PNET_4.2.10.ovf local-lvm

qm config 103

qm set 103 --cpu host

qm start 103

These were the only commands ultimately required to complete the migration successfully.


Best Practices After Installation

Once PNETLab is running, spend a few minutes optimizing the virtual machine before building labs. Allocate enough RAM and CPU cores for your expected workload, store the virtual disks on SSD or NVMe storage whenever possible, and take a clean snapshot before importing additional network appliance images. If your host supports it, ensure virtualization extensions are enabled in the BIOS/UEFI so nested virtualization performs as expected.

It is also a good idea to install the QEMU Guest Agent inside supported guest operating systems when applicable, as Proxmox recommends this for improved VM management, graceful shutdowns, and better reporting of guest information. While the PNETLab appliance itself focuses on network emulation, following these Proxmox best practices makes the overall environment easier to maintain and troubleshoot.


Conclusion

Migrating the PNETLab OVA to Proxmox VE 8 turned out to be much easier once the root causes were identified. The first issue was an incorrect storage name, which prevented the import command from locating a valid destination. After selecting local-lvm, the OVF imported successfully and attached the virtual disk correctly. The remaining obstacle was CPU virtualization compatibility, which was resolved by setting the virtual machine CPU type to host.

If you encounter similar errors such as “storage does not exist,” “hard disk not found,” or virtualization-related boot failures, follow the commands and verification steps shown in this guide. They reflect a real-world migration that resulted in a fully functional PNETLab instance running on Proxmox VE.


Frequently Asked Questions

1. Can I import a PNETLab OVA directly into Proxmox?

Yes. Use the qm importovf command and specify a valid Proxmox storage such as local-lvm.

2. Why does Proxmox say “storage does not exist”?

The storage name you supplied does not match any configured storage. Run pvesm status to list valid storage IDs.

3. Why does PNETLab fail to boot after import?

One common reason is the CPU model. Setting the VM CPU to host exposes the host’s virtualization features and often resolves boot or nested virtualization issues.

4. Is the “unable to find a serial interface” error serious?

No. It only indicates that no serial console is configured. It does not prevent PNETLab from running.

5. Is Proxmox better than VMware for PNETLab?

For many home labs and enterprise environments, Proxmox offers an excellent combination of performance, flexibility, and cost-effectiveness. It supports KVM virtualization, snapshots, clustering, backups, and advanced storage features without requiring expensive licensing, making it an attractive platform for running PNETLab.

Posted in Uncategorized | Leave a comment

Integrating VICIdial with CRM: Solving Custom Field and Data Sync Issues

VICIdial is one of the most powerful and widely used open-source dialer platforms for call centers. It supports inbound, outbound, and blended campaigns and is trusted by organizations worldwide. However, when VICIdial is used without proper CRM integration, critical customer data often becomes fragmented across systems, leading to inefficiencies, reporting gaps, and operational challenges.

Continue reading
Posted in Vicidial | Tagged , , , , , , | Leave a comment

How to Remove +91 / 91 from Incoming Caller ID in VICIdial (Fix Lead Matching Issue)

Problem Overview

 == Using SIP RTP CoS mark 5
       > 0x7f81dc00eab0 -- Strict RTP learning after remote address set to: 172.16.10.222:19274
    -- Executing [5101@trunkinbound:1] NoOp("SIP/JIO-00000003", "Inbound call from +918318841546") in new stack
    -- Executing [5101@trunkinbound:2] ExecIf("SIP/JIO-00000003", "1?Set(CALLERID(num)=8318841546)") in new stack
    -- Executing [5101@trunkinbound:3] ExecIf("SIP/JIO-00000003", "0?Set(CALLERID(num)=18841546)") in new stack
    -- Executing [5101@trunkinbound:4] NoOp("SIP/JIO-00000003", "CallerID after strip: 8318841546") in new stack
    -- Executing [5101@trunkinbound:5] AGI("SIP/JIO-00000003", "agi-DID_route.agi") in new stack
    -- Launched AGI Script /usr/share/asterisk/agi-bin/agi-DID_route.agi
    -- AGI Script Executing Application: (Monitor) Options: (wav,/var/spool/asterisk/monitor/MIX/20260110121607_5101_8318841546)
    -- <SIP/JIO-00000003>AGI Script agi-DID_route.agi completed, returning 0
    -- Executing [99909*2***DID@default:1] Answer("SIP/JIO-00000003", "") in new stack
       > 0x7f81dc00eab0 -- Strict RTP qualifying stream type: audio
       > 0x7f81dc00eab0 -- Strict RTP switching source address to 172.16.60.1:19274
    -- Executing [99909*2***DID@default:2] AGI("SIP/JIO-00000003", "agi-VDAD_ALL_inbound.agi") in new stack

In many VICIdial installations in India, inbound calls arrive with the caller ID in E.164 format, such as:

Continue reading
Posted in Vicidial | Tagged , , , , , | Leave a comment

How to Retrieve VICIdial Admin Password from MySQL Database

Losing or forgetting the VICIdial admin password is a common issue, especially when systems are handed over between teams or managed by multiple administrators. Fortunately, VICIdial stores user credentials in its MySQL database, and an administrator with server access can retrieve or reset the password directly from the database.

This article explains how to retrieve the VICIdial admin user password using MySQL, along with important security notes and best practices.


Continue reading
Posted in Vicidial | Tagged , , , , , , , , | Leave a comment

How to Manage KVM Virtual Machines on Ubuntu Server Using virsh

Kernel-based Virtual Machine (KVM) is the most widely used virtualization technology on Linux servers. On Ubuntu Server, KVM is managed using libvirt, and the primary command-line tool provided by libvirt is virsh.

This guide explains how to manage KVM virtual machines on Ubuntu Server using virsh. It covers real-world examples such as starting and stopping virtual machines, enabling auto-start after reboot, accessing the VM console, monitoring resources, managing disks and networks, and troubleshooting common issues. This article is suitable for production environments.

Continue reading
Posted in KVM | Tagged , , , , , , , , , , , , , , , | Leave a comment

Palo Alto UNAT Configuration – Step-by-Step Lab Guide (LAN → DMZ via WAN)

Introduction

In real-world enterprise networks, it is common to access DMZ servers using a public IP address, even from internal LAN users. This design improves consistency, simplifies DNS, and mirrors real internet access behavior.

In this blog, I will demonstrate User NAT / Destination NAT (UNAT) configuration on a Palo Alto Networks firewall using a practical lab setup with LAN, WAN, and DMZ zones.

This guide explains how traffic from a LAN PC reaches a DMZ mail server using its public IP, with UNAT applied on the firewall.

Read more: Palo Alto UNAT Configuration – Step-by-Step Lab Guide (LAN → DMZ via WAN) Continue reading
Posted in Paloalto Firewall | Tagged , , , , , , , , , , , , , , , , , , , | Leave a comment

Point-to-Point Wireless Devices Comparison: Practical Hardware Selection Guide

Point-to-point (PtP) wireless connectivity is a proven and widely used networking solution to connect two locations without laying fiber. It is commonly deployed for office-to-office connectivity, factories, warehouses, CCTV backhaul, ISPs, schools, and branch offices.

Choosing the correct point-to-point wireless hardware is critical for achieving stable performance, reliable bandwidth, and long-term scalability. This guide is based on real field experience shared by vendor engineers and system integrators.

Continue reading
Posted in Mikrotik, Network | Tagged , , , , , , , , , , , , , , , , , , , | Leave a comment

Excitel Broadband Router Default Login

Excitel Broadband Default Router Login

If you have an Excitel-provided router and need to access its admin page, many devices are shipped with default credentials you can use to sign in. Default username: excitelDefault password: exc@123

Step-by-step: How to log in

Continue reading
Posted in Network | Leave a comment

FortiGate Tip: How to Change WAN Web Access Port After Configuring IPsec VPN

When you configure an IPsec Site-to-Site VPN on a FortiGate firewall (especially models like 40F, 60F, 80F), you may suddenly lose access to the web GUI on the WAN interface (port 443).
FortiGate also shows a warning during IPsec setup that HTTPS access on the WAN may be affected.

This happens because the VPN configuration can modify interface roles, local-in policies, and route priorities — which sometimes blocks the default management port (443).


Continue reading
Posted in Network | Tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , | Leave a comment

How to Configure Site-to-Site IPsec VPN Between Two FortiGate 40F Firewalls (FortiOS v6 and v7)

Connecting branch offices or partners through a secure VPN tunnel is one of the most common FortiGate tasks.
This guide shows how to configure a manual IPsec site-to-site VPN between two FortiGate 40F units running different firmware versions:

SiteModelFirmware
Site BFortiGate-40Fv7.6.3, build 3510 (GA.F)
Site CFortiGate-40Fv6.4.7, build 8726 (GA)
Continue reading
Posted in Network | Tagged , , , , , , , , , , , , , , , , | Leave a comment