TheUnknownBlog

Back

If you happen to have a high-configuration cloud server (like my Afly Black Friday VPS) that doesn’t provide Windows images, you might want to try installing Windows yourself using the DD method.

What is DD System Installation?#

As the name suggests, DD system installation uses the dd command to transfer a vhd file to a specific partition, then configures boot files to make it bootable. As scripts have evolved, many features have been added (like installation from img or iso images, system rescue). However, this isn’t the main focus - this tutorial aims to cover the pitfalls I encountered while using such scripts, and how to solve them.

My Environment Configuration#

First, let me introduce my environment (these configurations might seem unusual, but these specific characteristics led to some interesting problems):

  • CPU: 3 Core AMD Ryzen 9 9950X
  • RAM: 4.5GB
  • SSD: 125GB
  • Network: IPv6 /128 Only (Yes, pure IPv6 environment with no IPv4 access! And only a /128 IPv6 allocation, which becomes important later)

Preparation#

Script Used#

I chose this script: https://github.com/bin456789/reinstall

I strongly recommend carefully reading the README first, as the repository contains detailed instructions on how to use the script.

System Image Selection#

I used an image from TeddySun’s collection, which you can find by searching https://teddysun.com/?s=DD to find your preferred image. I selected Windows 10 LTSC because it’s relatively clean.

Quick Installation Commands#

If you’re in a hurry, here are the basic installation commands:

# Download the script
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O reinstall.sh

# Execute the installation
bash reinstall.sh dd --img https://dl.lamp.sh/vhd/zh-cn_windows10_ltsc.xz
bash

Remember to install curl beforehand (if your system doesn’t have it)

First Issue: Incorrect DNS Configuration#

This problem was mainly caused by my specific network environment. The DNS configuration in the script’s Alpine environment was incorrect, preventing files from being downloaded. Here’s my solution:

#!/bin/sh

# Modify /etc/resolv.conf file
echo "nameserver 2001:4860:4860::8888" > /etc/resolv.conf
echo "nameserver 2001:4860:4860::8844" >> /etc/resolv.conf

if [ -f /etc/systemd/resolved.conf ]; then
    echo "[Resolve]" >> /etc/systemd/resolved.conf
    echo "DNS=2001:4860:4860::8888" >> /etc/systemd/resolved.conf
    echo "DNS=2001:4860:4860::8844" >> /etc/systemd/resolved.conf
    systemctl restart systemd-resolved
fi

echo "DNS successfully changed to Google IPv6 DNS"
bash

Of course, if you have a normal dual-stack environment, you probably won’t encounter this issue.

Second Issue: Password Setup#

I found this particularly interesting: when the script first runs, it prompts you to enter a password, but this password is not the one you’ll use to log into Windows! Despite the script’s README mentioning this, I missed it.

In fact, the Windows login password is determined by the image. For TeddySun’s image that I used:

  • Username: Administrator
  • Password: Teddysun.com

Third Issue: Windows IPv6 Privacy Protection#

This problem puzzled me for a long time. If you run ipconfig /all on a Windows computer, you might notice something called “temporary address.” This is because Windows “protects your online privacy,” but in my environment with only a /128 IPv6 allocation, this became a problem: external access to your machine is through that fixed IP address, but your machine accesses external websites using a temporary address. This means you can connect via Remote Desktop but can’t access the internet.

The solution is simple - open Command Prompt as administrator:

netsh interface ipv6 set privacy state=disable
# Then restart the network adapter
cmd

Fourth Issue: Workarounds for Pure IPv6 Environment#

This issue also stems from my special network environment. Not having IPv4 access is quite inconvenient, so I used Cloudflare WARP to provide IPv4 access. However, note that if you directly use the Windows version of WARP, after enabling it, your IPv6 address will also change to WARP’s address, preventing you from connecting to Remote Desktop!

I used a solution provided by a user on the Nodeseek forum (original post):

  1. Download and install the official CloudFlare WARP client
  2. In WARP settings:
    • Click the gear icon in the bottom right → Preferences
    • Advanced → Configure Proxy Mode
    • Enable proxy mode and set a memorable port

This effectively gives you a locally available Cloudflare-provided IPv4 exit socks proxy, which you can use however you like - with SwitchyOmega or other tools, configure as you prefer. This way, you can maintain Remote Desktop connections while gaining IPv4 access.

Fifth Issue: LTSC Minor Problem#

If you chose the LTSC 2021 version of Windows like I did, you might notice that the wsappx service is always running in the background. This issue has a solution on the PCbeta forum; if you’re interested, check out this post: LTSC Optimization Guide

Installing Windows on a IPv6 VPS
https://start-co.de/blog/ipv6-vps-windows
Author TheUnknownThing
Published at January 15, 2025
Comment seems to stuck. Try to refresh?✨