Hyper-V on Hetzner's EX51 Hosted Dedicated Servers

Your low-cost high-performance cloud data center building block.

This guide explains how to install Windows Server 2012 R2 on Hetzner’s EX51-SSD dedicated servers. That line of servers is very attractive for virtualization as it combines a fast CPU with a good amount of RAM and SSD storage - at a price point of less than €60 per month. Another cool thing: Hetzner lets you install your own operating system. Here’s how.

Hardware

These are the main components of the EX51-SSD servers:

  • Mainboard: Fujutsu D3401-H1
  • CPU: Intel Core i7-6700
  • RAM: 64 GB
  • SSD: 2 x Crucial MX200 500 GB

Ordering Multiple Servers

If you want to order multiple servers to be able to Live Migrate virtual machines you can ask Hetzner to equip each server with a second NIC connected to a dedicated 5-port Ethernet switch for a small one-time fee.

Currently there is one little thing making Live Migrations less useful than they should be: although you can easily order multiple public IP addresses per server for your VMs, you cannot use those VMs on any other server. They are tied to the server they were assigned to. If you were to Live Migrate a VM with a public IP address to another host, it would not be reachable any more. When I asked Hetzner’s support for a way around this unfortunate limitation, I was promised a new custom VLAN feature for the end of Feburary. With custom VLANs it will be possible to define a group of servers that share a pool of IP addresses. Let’s hope it is available soon!

During the ordering process you are asked to choose an operating system. Select “rescue system” in order to install your own.

Connecting to the Console

Hetzner have slightly antiquated KVM remote consoles called LARA they connect to a server on request (documentation). You get three hours of free guaranteed usage (which you might need, especially the first time around!). If you find that you need more contact Hetzner support. Each additional three hours cost €10.

Installing Windows

Hetzner has some OS images at http://download.hetzner.de/bootimages/windows/. You can find credentials to access that site in the email you get from Hetzner telling you that LARA is ready.

If you need something else you can either map a drive to any SMB share on the internet or upload to your backup space. The latter, however, is only reachable from within the Hetzner network, so you must already have a working server there. As I already had a server at Hetzner’s data center I chose to upload an ISO to my backup space.

LARA’s web interface states that only ISO files up to 4.7 GB in size are supported. That may or may not be true. When I attempted to use a 5 GB ISO things seemed to work but the installation froze at 90% (which may also have been due to a timeout, see below).

Configure the ISO mount on the Virtual Media page. In my case it looked like this:

Hetzner LARA configure ISO mount

Reboot the server and press F12 to bring up the boot device selection menu. Select “PepperC Virtual Disc” without (!) UEFI:

Hetzner LARA select boot device

If keyboard and mouse are not working try to change the Host Interface setting on the Keyboard/Mouse page.

The Getting files ready for installation phase of Windows setup takes so long (more than an hour) that the connection to LARA may time out, freezing the installation. It may be possible to prevent that from happening by clicking around the LARA web console every ten minutes or so. It certainly does not hurt.

Installing the Ethernet Driver

Unfortunately Server 2012 R2 does not come with a driver for the server’s onboard NIC. To install the Ethernet driver without an internet connection follow these steps:

  • Download ProWinx64.exe on a different computer
  • Create an ISO file containing ProWinx64.exe with ISO Recorder
  • Unmount the Windows ISO on LARA’s Virtual Media page
  • Mount the ISO driver file you created from the Lantronix KVM Console by clicking the floppy icon and then Connect ISO
  • You will see a new drive in Explorer
  • Run ProWinx64.exe and install the Ethernet drivers

Enable RDP Access

Configure Remote Desktop in Server Manager. Enable RDP access in Windows Firewall’s public network profile. Test logging on via RDP. Now you do not need the LARA remote console any more.

What Else?

I recommend to install Intel’s Chipset Device Software (INF Update Utility).

For more information on things like two-factor authentication please see the article My Hyper-V Server in the Cloud.

Comments

Related Posts

Docker (Compose) Cheat Sheet

Docker (Compose) Cheat Sheet
This is a collection of tips and tricks I picked up while learning and working with Docker and Docker Compose on my home server and web server. Container Configuration Environment Variables Where to Define Environment Variables Environment variables are a common way to configure containers. To keep things organized, don’t put them in your Compose file but into dedicated files with the extension env. env_file vs. .env .env file: this “special” file can be used to set environment variable for use in the Compose file. The variables specified in .env are not available in the container. env_file: this section in the Docker Compose file lets you specify files that contain environment variables for use in the container. The variables specified in this section are not available in the Compose file. Bind Mounts vs. Docker Volumes Bind mounts let you control the directory structure. This has the advantage that you know exactly what gets stored where in the host’s file system. It has the disadvantage that you need to create the directory structure before you can start a container. Docker volumes are managed by the Docker engine. They’re stored in /var/lib/docker, “far away” from the Compose file. Personally, I very much prefer bind mounts because of the control they offer. I use subdirectories relative to the Compose file, e.g., ./data:/data. Keeping the container configuration and the container data in one place facilitates backups. Networking Expose vs. Ports Expose serves as documentation which ports a container is accessible on. Note: container ports are always accessible from other containers on the same Docker network. Ports makes container ports accessible to the host. Most of my services are accessible through the Caddy reverse proxy only. Opening ports to the host is, therefore, only rarely necessary. Static IP Address on the Host Network Use the Macvlan Docker network to attach a container directly to the host’s local network. Assign a static IP address by specifying the ip_range parameter in the ipam section of the Docker Compose file. See this configuration for an example. Disable Macvlan Container/Host Isolation Containers on a Macvlan network are isolated from the host. While the container can contact other machines on the local network, communications with the host are blocked. To work around that, create a virtual link with a route that points to the container’s IP address (example). Time Zone Containers should know about your local time zone. To achieve that, make it a habit to pass in /etc/localtime as a read-only volume to every container:
Virtualization & Containers

Latest Posts