Home Explore Blog Models CI



nixpkgs

nixos/doc/manual/configuration/renaming-interfaces.section.md
8b16c19ef245641810d39087dd4f5c2954db55bd8b231e7a000000030000075a
# Renaming network interfaces {#sec-rename-ifs}

NixOS uses the udev [predictable naming
scheme](https://systemd.io/PREDICTABLE_INTERFACE_NAMES/) to assign names
to network interfaces. This means that by default cards are not given
the traditional names like `eth0` or `eth1`, whose order can change
unpredictably across reboots. Instead, relying on physical locations and
firmware information, the scheme produces names like `ens1`, `enp2s0`,
etc.

These names are predictable but less memorable and not necessarily
stable: for example installing new hardware or changing firmware
settings can result in a [name
change](https://github.com/systemd/systemd/issues/3715#issue-165347602).
If this is undesirable, for example if you have a single ethernet card,
you can revert to the traditional scheme by setting
[](#opt-networking.usePredictableInterfaceNames)
to `false`.

## Assigning custom names {#sec-custom-ifnames}

In case there are multiple interfaces of the same type, it's better to
assign custom names based on the device hardware address. For example,
we assign the name `wan` to the interface with MAC address
`52:54:00:12:01:01` using a netword link unit:

```nix
{
  systemd.network.links."10-wan" = {
    matchConfig.PermanentMACAddress = "52:54:00:12:01:01";
    linkConfig.Name = "wan";
  };
}
```

Note that links are directly read by udev, *not networkd*, and will work
even if networkd is disabled.

Alternatively, we can use a plain old udev rule:

```nix
{
  boot.initrd.services.udev.rules = ''
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
    ATTR{address}=="52:54:00:12:01:01", KERNEL=="eth*", NAME="wan"
  '';
}
```

::: {.warning}
The rule must be installed in the initrd using
`boot.initrd.services.udev.rules`, not the usual `services.udev.extraRules`
option. This is to avoid race conditions with other programs controlling
the interface.
:::

Chunks
74967cf0 (1st chunk of `nixos/doc/manual/configuration/renaming-interfaces.section.md`)
Title: Renaming Network Interfaces in NixOS
Summary
NixOS employs udev's predictable naming scheme (e.g., `ens1`) for network interfaces to ensure consistent names across reboots, departing from traditional `eth0` names. However, these predictable names can be less memorable and may change with hardware alterations. Users can disable this scheme by setting `networking.usePredictableInterfaceNames` to `false` to revert to traditional naming. For situations with multiple interfaces, custom names can be assigned based on hardware MAC addresses, either through a `systemd.network.links` unit or a udev rule that must be installed in the `initrd` to prevent race conditions.