Mr.PlanB Logo

    Newsletter

    Subscribe our newsletter

    Get new infrastructure guides, comparison reports, and migration notes in your inbox.

    Infrastructure notes, guides, and new tools. Unsubscribe anytime.

    Back to Blog
    Proxmox
    VMware
    Migration
    Networking
    Enterprise

    Migrating 200+ VMs to Proxmox Is Really a Networking Problem

    December 27, 2025
    8 min read

    On paper, moving hundreds of virtual machines from VMware to Proxmox sounds like a compute story about storage throughput, CPU compatibility, disk formats, import tools, checklists and progress bars.

    Is Proxmox the Answer? How We Migrated 300+ VMs from VMware

    In practice, none of that is what keeps people up at night. The cold sweat comes from networking. There's the clean, diagrammed version that lives in a Visio file from 2019, and then there's the real network, which is messy and full of hardcoded IPs, forgotten firewall rules, MAC-based licenses, silent database dependencies, and traffic flows nobody remembers setting up.

    When you're moving 200-plus VMs off VMware ESXi, the hypervisor switch is rarely what breaks things. Everything wrapped around it is.

    The import works, but the apps don't

    Almost everyone who's done this at scale says some version of the same thing: the Proxmox import wizard does its job. Disks come over, machines boot, CPUs spin and memory looks fine. Then something subtle fails.

    An application starts but can't talk to its database. A reporting job runs but never finishes. A legacy service doesn't error out at all, it just stops doing useful work without telling anyone. Monitoring lights up hours later, or worse, a user notices days after the migration window has closed.

    That's the danger zone. Silent breakage is harder to deal with than loud failure, because loud failure at least gives you a place to start. And nearly every one of those failures traces back to networking.

    Hardcoded reality always wins

    In theory, everything should be abstracted, with DNS instead of IPs, service discovery instead of static configs, and firewall rules that are documented and intentional.

    In reality, plenty of environments grew organically over a decade or more. Someone hardcoded an IP because it was "temporary." Someone linked an app directly to a database because it was faster. Someone set up a hairpin firewall rule to solve one weird problem and then forgot about it.

    Those choices don't show up when you export a VM. They only show up when traffic stops flowing the way it used to. That's why so many experienced admins, asked how to migrate at scale, talk about traffic monitoring, VLANs, ARP tables, and MAC addresses instead of CPU flags or disk formats.

    If you don't see the traffic, you don't know the app

    One of the most common pieces of advice from people who've already done large migrations is blunt: the network does not lie. Before you move anything, you want to see who's actually talking to whom, which is often different from who you think should be talking.

    That usually means some combination of:

    • Firewall logs of allowed traffic
    • NetFlow or IPFIX exports into a traffic analysis tool
    • Port mirroring on switches or virtual bridges
    • Targeted packet captures for especially suspicious systems

    It's not glamorous work, and at scale it's not optional either. You're looking for patterns that never made it into documentation: an app server chatting with a file server over an old subnet, a batch job that only runs once a week, a legacy database that everything still depends on even though nobody admits it. This is where the migration turns from a virtualization job into archaeology.

    Monitoring matters during the move, too

    A lot of teams already rely heavily on monitoring tools like Zabbix or similar systems. What changes during a migration is how much trust you put in them. At scale, monitoring becomes your safety net, and the question shifts from "did this VM boot?" to "did all its dependencies come back green?"

    Several admins describe the same workflow: migrate one VM or a small group, wait for monitoring to settle, then move on. If something breaks, they add a new check and repeat the cycle.

    That approach doesn't prevent every issue, but it keeps problems contained. You learn early which applications are fragile and which ones don't care what hypervisor they're running on.

    And yes, this takes time. People who've moved 300-plus VMs talk in weeks, not days. Anyone promising a clean weekend cutover is either very lucky or very wrong.

    IPs, VLANs, and the illusion of sameness

    One of the simplest ways to reduce risk is also one of the most boring: keep IP addresses the same. When VMs come up with the same IP, VLAN and gateway, an entire category of problems disappears. DNS doesn't need to change, firewall rules don't need rewriting, and applications don't suddenly find themselves talking to the wrong thing.

    Keeping things the same only works if your physical and virtual networking is actually aligned, though. If your top-of-rack switches don't have the right VLANs trunked, the VM can boot perfectly and still be isolated. If tagging changes between environments, traffic can vanish without a trace. If ARP tables don't update cleanly, you get ghost connectivity issues that feel random until you remember they exist.

    Migrations expose weak spots in network design this way. Proxmox isn't doing anything strange; change simply forces reality to the surface.

    MAC addresses: small detail, big fallout

    MAC addresses are one of those details you don't think about until a vendor ties licensing to them. Plenty of Linux workloads handle MAC changes gracefully, or can be configured to keep the old one. Windows VMs are less forgiving when the virtual hardware changes underneath them. Sometimes they'll happily adapt, and sometimes they'll re-enumerate devices and make a mess.

    Then there's Oracle, or any other software that treats a MAC or UUID change as a licensing event. Proxmox has little to do with that. Virtualization abstracts hardware, but licensing vendors never got that memo.

    Why "just migrate slowly" is real advice

    "Migrate one by one" sounds obvious until you're staring at a spreadsheet with 200 rows and a business asking how long this will take. The people who've done this successfully tend to agree that batching intelligently beats rushing blindly.

    You move a small set, validate it, fix what breaks, and update the documentation that should have existed already. Then you move the next set with fewer surprises. It isn't fast, but it is predictable, and predictability is what keeps migrations from turning into all-hands fire drills.

    Proxmox is the messenger

    What surprises newcomers is that none of this is unique to Proxmox. You'd hear the same stories moving to KVM, Hyper-V, or a public cloud. The hypervisor swap removes the safety blanket of familiarity, and suddenly assumptions get tested. Proxmox usually just delivers the bad news; the problems were already there.

    What it does well is force teams to confront how their systems actually communicate, which is uncomfortable and useful at the same time.

    The takeaway

    If you're planning a large ESXi-to-Proxmox migration and spending most of your time thinking about compute and storage, you're probably underestimating the hardest part. The work lives in the network: in the undocumented flows, in the dependencies nobody owns anymore, and in the monitoring alerts that tell you something is wrong but not why.

    Treat this as a networking project with a virtualization component rather than the other way around. Do that, and the import wizard really will be the easy part.