netboot.xyz: install the operating system you want

An FFxF server can boot netboot.xyz, when you order it or reinstall it: an empty disk, the menu in the console, and the system of your choice. The whole path tested with Debian 13, and what to know about the network, which you type in by hand.

A console shows a network boot menu with one line selected; below it, a still-empty disk waits for the install

Our images cover the most requested systems, prepared with cloud-init: you get a server that boots with your SSH key and its network. That is not always enough: a distribution we do not offer, partitioning done your way, a disk encrypted from the first install. For those cases, an FFxF server can now boot netboot.xyz, when you order it or when you reinstall it.

We ran the whole path on a Nano, the way a customer would: order, the netboot.xyz menu in the console, Debian 13 installed by hand, reboot from the disk. Here is what to know before you start, above all about the network, which does not configure itself.

1. What you get

Pick netboot.xyz in the Other tab of the system picker, when ordering or under Reinstall. Through the API, it is the netboot image. The machine comes with:

  • an empty disk, the size of your plan: the Debian installer saw 21.5 GB on a Nano, which is its 20 GiB;
  • the netboot.xyz ISO attached, with a boot order of disk first, ISO second;
  • a graphical console, instead of the serial console of our images;
  • nothing else: no password, no SSH key, no network configured.

In our test, the machine was ready 7 seconds after the order. On first boot, the BIOS tries the disk, prints Boot failed: not a bootable disk, then moves on to the ISO. Open the console from the server page: netboot.xyz is already looking for a network.

2. No DHCP: you type the network in

Our addresses are static and there is no DHCP server on the public network. An anti-spoofing filter only lets your machine send from its own addresses: an address you make up, or one taken from another server, will not get out. The delivery (or reinstall) email therefore gives you the exact values: address, netmask, gateway, DNS, and the network card that carries each address.

netboot.xyz tries DHCP on each card, sees it fail and asks for the configuration:

Console of an FFxF server running netboot.xyz: DHCP fails on net0 and net1, then the Set network interface number prompt asks which card to configure
Two cards, net0 and net1, and no DHCP answer: netboot.xyz asks which card to configure.

Press Enter to keep interface 0, then type the IPv4 address, the netmask (dotted, 255.255.255.0), the gateway and one DNS server. To skip the DHCP attempts, press m on the boot screen and choose Manual network configuration. The menu shows up a few seconds later:

netboot.xyz main menu in the FFxF console: Linux Network Installs, Live CDs, BSD Installs, Unix Network Installs, FreeDOS, Windows, utilities and the iPXE shell
The menu, loaded over HTTPS from boot.netboot.xyz with the address you typed.

3. Two network cards, one per address family

A server with both IPv4 and IPv6 has two network cards: IPv4 on the first one (net0), IPv6 on the second (net1). The hypervisor sets the IPv6 VLAN itself, so there is nothing to configure on that side. An IPv6 address put on the first card, however, answers nothing: we found that out on our first try.

Once the system is installed, the cards get new names. Linux names them after their PCI slot, 18 and 19 on our machines: net0 becomes ens18, net1 becomes ens19. The Debian installer asks which one to use:

Debian installer: choosing the primary network interface between ens18 and ens19
ens18 carries IPv4, ens19 carries IPv6.

Pick ens18, let DHCP fail, then Configure network manually with the same values as in netboot.xyz. The installer only sets up one card. We added IPv6 after the install, in /etc/network/interfaces.d/ens19:

bash
auto ens19
iface ens19 inet6 static
    address <your IPv6>/64
    gateway <IPv6 gateway from the email>

After sudo ifup ens19, the machine answers over IPv6, and apt-get update works with IPv6 forced. Both addresses come back on their own after a reboot. The IPv6 block routed to your server, if you have one, is not configured either: add its addresses on ens19 when you need them.

4. An IPv6-only server

On an IPv6-only plan, the only card is net0, and the netboot.xyz manual setup can only set an IPv4 address. Press m at boot, choose iPXE Debug Shell and type the lines from the email, with your values:

bash
set net0/ip6 <your IPv6>
set net0/len6 64
set net0/gateway6 <IPv6 gateway>
set dns6 2606:4700:4700::64
set ip 0.0.0.0
ifopen net0
chain --autofree https://boot.netboot.xyz/menu.ipxe

The set ip 0.0.0.0 line cost us one try. The netboot.xyz menu.ipxe starts with isset ${ip} || dhcp: with no IPv4 set, it retries DHCP, fails and closes the card. A null IPv4 address passes that test without creating a route, and everything else goes over IPv6. The 2606:4700:4700::64 resolver is a DNS64: it also gives an IPv6 address to sites that only exist over IPv4, which our NAT64 then reaches. Down that path, the menu loaded and the Debian installer downloaded normally.

5. Drivers, BIOS and first boot

The disk sits on a VirtIO SCSI controller and the network cards are VirtIO: your system needs virtio_scsi and virtio_net. Common Linux and BSD installers have them. The Debian network installer loads virtio_scsi with the components it downloads from the mirror: a modprobe run too early answers Module virtio_scsi not found, then the disk shows up at the partitioning step.

Debian installer, Partition disks step: the 21.5 GB disk SCSI1 (0,0,0) (sda) is offered
The Nano's empty disk, as the installer sees it: sda, 21.5 GB.

The machine boots in BIOS mode, not UEFI: the installer puts GRUB in BIOS mode (grub-pc) on /dev/sda, with no EFI partition. When it is done, reboot without ejecting anything. The BIOS now finds a boot loader on the disk and starts your system; the ISO only matters while the disk is empty.

6. What changes afterwards

Your client area does not know this system's password and cannot inject anything into it: password reset is turned off for it. Console firewalls, the anti-spoofing filter and traffic accounting apply as on any server, since they live in the hypervisor.

To go back to one of our images, reinstall the server and pick it: the disk is wiped, and you get cloud-init, your SSH key and a configured network again.

A laptop linked to a Windows server's screen, the pointer resting inside it

Connect to your Windows VPS with Remote Desktop

The delivery email gives the address, the Administrator user and the password. The rest takes five minutes: which client to open on your machine, what the certificate warning means, what to check when the connection fails, and what to set before leaving the server on its own.

Read the article 7 min read

Three stacked layers: the disk has grown, the partition and the filesystem stretch after it

Growing a Linux disk live: growpart, ext4, XFS, LVM

After a move to a bigger plan, df often still shows the old size: the disk grew, the partition and the filesystem did not. ext4, XFS and LVM, each grown live on a test machine, with the real output.

Read the article 7 min read

Support & discussions

Technical questions, incident reports, or infrastructure discussions, the team is reachable on Discord, Telegram, X, Instagram, Reddit, and IRC.