Running a Windows VPS can often be significantly more expensive than a Linux VPS due to licensing costs. However, with a little bit of technical work, you can convert a standard Linux KVM VPS (like Ubuntu or Debian) into a fully functional Windows 11 RDP server using a custom image.

In this tutorial, I will guide you through creating a lightweight Windows 10 image using Proxmox on your local PC and flashing it onto your Cloud VPS, then upgrade to Windows 11.

⚠️ Disclaimer: This process involves wiping your VPS hard drive completely using the dd command. All data on the VPS will be destroyed. Make sure you have backups. Additionally, check your VPS provider’s Terms of Service regarding custom ISOs.

Prerequisites

  • A Local Windows PC with Proxmox installed.
  • Windows 10 ISO (Download from Microsoft).
  • VirtIO Drivers ISO (Download virtio-win.iso from Fedora/RedHat).
  • 7-Zip installed on your local PC.
  • A Linux KVM VPS (Ubuntu recommended) with at least 60GB storage and 4GB RAM.

Phase 1: Create the Windows 10 VM

We will start by creating the “Gold Image” on your local computer.

1. Configure Proxmox

Visit Proxmox web panel and create a New Machine with the following settings:

  • Name: Windows 10
  • ISO Image: Select your Win10_x64.iso file.
  • Edition: Windows 10 Pro
  • Skip Unattended Installation: [CHECKED] (Important!)
  • Hardware:
    • Memory: 4096 MB (4GB) +
    • Processors: 2 CPU
    • Enable EFI: [CHECKED]
  • Hard Disk:
    • Size: 30.00 GB
    • Type: VHD (Virtual Hard Disk)
    • Pre-allocate: [UNCHECKED]

STOP: Do not start the VM yet. We need to tweak the settings first.

2. Advanced VM Settings

Right-click your new VM and go to Settings:

  • System > Acceleration: Set Paravirtualization Interface to KVM.
  • System > Motherboard:
    • TPM: None
    • Secure Boot: [UNCHECKED] (Disable it).
  • Network > Adapter 1:
    • Adapter Type: Paravirtualized Network (virtio-net).
    • MAC Address: Copy the MAC address from your Cloud VPS control panel (remove the colons). This ensures your internet works immediately after migration.

Click OK to save.


Phase 2: Installation & Registry Hacks

Start the VM. When the Windows Setup screen appears, follow these steps to bypass hardware requirements.

1. Bypass TPM and Secure Boot

  1. On the language selection screen, press Shift + F10 to open CMD.
  2. Type regedit and press Enter.
  3. Navigate to: HKEY_LOCAL_MACHINE\SYSTEM\Setup
  4. Right-click on the Setup folder > New > Key. Name it LabConfig.
  5. Inside LabConfig, create the following DWORD (32-bit) Values and set all their values to 1:
    • BypassTPMCheck
    • BypassSecureBootCheck
    • BypassCPUCheck
    • BypassRAMCheck
    • BypassStorageCheck

Close the Registry Editor and proceed with the installation. If you see a disk size warning, ignore it and click Next.

2. Bypass Microsoft Account (No Internet)

When you reach the “Let’s connect you to a network” screen (or Finalization):

  1. Press Shift + F10.
  2. Type the following command and press Enter:
OOBE\BYPASSNRO

The VM will restart. When it returns to the network screen, select “I don’t have internet”.


Phase 3: Driver Injection

Once you are on the Windows Desktop, shut down the VM.

  1. VirtualBox Settings > Storage: Remove the Windows installation ISO.
  2. Attach: The virtio-win.iso file to the Optical Drive.
  3. Add a Tiny Disk: Create a new Controller (Type: VirtIO) and add a new 100MB disk. (This forces Windows to initialize the VirtIO controller).
  4. Start the VM.

Install Drivers & Services

Open the CD Drive (VirtIO) inside the VM and run the virtio-win-guest-tools installer. Then, open CMD as Administrator and run:

sc config vioscsi start= boot
sc config viostor start= boot

Troubleshooting: If viostor fails to configure, create a registry fix:

Open Notepad, paste the following code, and save it as fix-viostor.reg. Then run it.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\viostor]
"Type"=dword:00000001
"Start"=dword:00000000
"Group"="SCSI miniport"
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,\
  72,00,69,00,76,00,65,00,72,00,73,00,5c,00,76,00,69,00,6f,00,73,00,74,00,6f,\
  00,72,00,2e,00,73,00,79,00,73,00,00,00
"Tag"=dword:00000020

After running the registry file, restart the VM and try the sc config command again.

Finally, enable Remote Desktop from Settings and Shutdown the VM.


Phase 4: Image Conversion & Compression

Now we convert the VirtualBox disk (`.vhd`) to a Raw image (`.img`) compatible with the VPS.

  1. Open PowerShell as Administrator on your local PC.
  2. Navigate to VirtualBox directory:
cd "C:\Program Files\Oracle\VirtualBox"
  1. Run the clone command (Update the path to your user name):
.\VBoxManage.exe clonehd "C:\Users\User Name\Documents\Virtual Machines\Windows 10\Windows 10.vhd" "C:\Users\User Name\Downloads\win10.img" --format RAW

Once done, use 7-Zip to compress win10.img to win10.img.gz (GZIP format). Upload this file to a direct download link (your website or FTP).


Phase 5: Flash to VPS

Login to your VPS provider panel. You should use the provider’s console.

Option A:  Standard Command (If  VPS is running Linux)

Connect to your console terminal and run:

cd /dev/shm
wipefs -a /dev/vda
dd if=/dev/zero of=/dev/vda bs=1M count=100
wget -qO- "http://yourdomain.com/win10.img.gz" | gunzip -c | dd of=/dev/vda bs=1M status=progress
gdisk /dev/vda
x
e
w
Enter

Option B:  Clonezilla / Recovery Mode

If your provider supports booting into Clonezilla or Rescue Mode, enter the Shell and run:

sudo su
dhclient ens6
wipefs -a /dev/vda
dd if=/dev/zero of=/dev/vda bs=1M count=100
curl -L -C - "http://yourdomain.com/win10.img.gz" | gunzip -c | dd of=/dev/vda bs=1M status=progress
gdisk /dev/vda
x
e
w
Enter

Final Step

  1. Once the copy process finishes, Force Reboot your VPS from the provider’s panel.
  2. Wait 2-3 minutes for Windows to detect the hardware.
  3. Open the console and login to the Desktop, make sure the internet connectivity, then enable Remote Desktop.
  4. Open Remote Desktop Connection (RDP) on your  local PC.
  5. Connect to your VPS IP Address using the credentials you created during installation.

Go to Disk Management > Right-click on the drive and click Extend Volume
If the recovery partition after C: partition, then run CMD as Administrator and do the diskpart commands:

diskpart
list disk

(maybe Disk 0)

select disk 0
list partition

(partition 4 maybe the recovery partition)

select partition 4
delete partition override

Then extend the volume space

Open regedit again and do the BypassTPMCheck, BypassSecureBootCheck,etc. again.

When in the Windows 10 Desktop, download Windows 11 iso and mount it (assume the iso mount drive is D:). Then run CMD as Administrator, and command D: and press Enter

setup.exe /product server

 

After upgradation, Open regedit again and do the BypassTPMCheck, BypassSecureBootCheck,etc. again.

Then CMD as Administrator, command the OOBE\BYPASSNRO

 

Congratulations! You now have a high-performance Windows 11 VPS running on a Linux plan.

Leave A Comment