Context for newbies: Linux refers to network adapters (wifi cards, ethernet cards, etc.) by so called “interfaces”. For the longest time, the interface names were assigned based on the type of device and the order in which the system discovered it. So, eth0, eth1, wlan0, and wwan0 are all possible interface names. This, however, can be an issue: “the order in which the system discovered it” is not deterministic, which means hardware can switch interface names across reboots. This can be a real issue for things like servers that rely on interface names staying the same.

The solution to this issue is to assign custom names based on MAC address. The MAC address is hardcoded into the network adaptor, and will not change. (There are other ways to do this as well, such as setting udev rules).

Redhat, however, found this solution too simple and instead devised their own scheme for assigning network interface names. It fails at solving the problem it was created to solve while making it much harder to type and remember interface names.

To disable predictable interface naming and switch back to the old scheme, add net.ifnames=0 and biosdevname=0 to your boot paramets.

The template for this meme is called “stop doing math”.

  • blackstrat@lemmy.fwgx.uk
    link
    fedilink
    arrow-up
    31
    ·
    6 days ago

    As someone who worked on a pre-systemd linux system with multiple NICs and needed them all configured automatically from an OS image based on where it was in the rack, I can’t stress enough how good deterministic interface names are.

    Booting up a system and each time having different names for each NIC was a nightmare.

    Frankly 90+% of what systemd has done is tremendously positive and makes linux a better operating system to use, both for sys admins and end users.

    • laurelraven@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      3
      ·
      6 days ago

      Couldn’t they be configured to always set each interface to a particular name? I’d think that would be the better solution anyway…

    • Murdoc@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      8
      arrow-down
      1
      ·
      7 days ago

      I came here to say this. I don’t really do networking so I don’t have much care for this issue, but the clarity of the explanation was enjoyable. Plus I learned a couple of little things too.

  • maxinstuff@lemmy.world
    link
    fedilink
    English
    arrow-up
    21
    arrow-down
    1
    ·
    edit-2
    6 days ago

    Here I am on a laptop with no ethernet ports (probably works over USB-C? No idea, haven’t tried), and a single wifi adapter. Guess I’ll give it a try:

    ip link show

    What I expected

    wlan0

    What I got

    wlp242s0

    Neat 👍 😎 👍

  • mlg@lemmy.world
    link
    fedilink
    English
    arrow-up
    1
    ·
    4 days ago

    me setting my interface into monitor mode manually because it can’t handle being split into mon and managed.

  • bitwaba@lemmy.world
    link
    fedilink
    arrow-up
    30
    ·
    7 days ago

    “the order in which the system discovered it” is not deterministic

    This is the same problem they had with hard drive names and it seems to have been solved in a sensible way, i.e. /dev/sda still points to the first disk detected by the system, but you can look look in /dev/disk/by-path (or by-uuid, etc) to see the physical address of the devices on the system and what they are symlinked back to, and set your fstab or mdadm arrays to be configured based on those unique identifiers instead.

    So, I guess what I’d like to know is why hasn’t this been solved the same way? When you boot up they should present every hard wired Ethernet port as ethX, and the hardware address interface should be present as well but aliased back to the eth. Then you can build the your network configs based on either one.

    Shouldn’t be that hard right?

      • partizan@lemm.ee
        link
        fedilink
        arrow-up
        6
        ·
        7 days ago

        Taking a sip of Rum and chuckles at the look on the name of my OS partition: /dev/mapper/vg-root and /dev/mapper/vg-home 🙃

        • phx@lemmy.ca
          cake
          link
          fedilink
          arrow-up
          1
          ·
          6 days ago

          That’s because you’re using LVM though. In most distros you could also use something like:

          /dev/vg/root

    • thisisnotgoingwell@programming.dev
      link
      fedilink
      arrow-up
      7
      ·
      edit-2
      6 days ago

      As a data center engineer of 10+ years, I struggled to understand this at first. In my world, the hardware does a POST before the OS boots and has an inventory of what hardware components are available, so it shouldn’t matter in what order they are discovered, since the interface names should make a correlation between the interface and the pcie slot that NIC exists in.

      Where the water gets muddled is in virtualized servers. The NICs no longer have a correlation to a specific hardware component, and you may need to configure different interfaces in the virtualized OS for different networks. I think in trying to create a methodology that is agnostic to bare metal/virtualized OSs, it was decided that the naming convention should be uniform.

      Probably seems like bloat to the average admin who is unconcerned with whether these NICs are physical or virtual, they just want to configure their server.

    • lemmyvore@feddit.nl
      link
      fedilink
      English
      arrow-up
      8
      ·
      7 days ago

      But nobody uses /dev/sdX anymore (not after they wipe the wrong disk once anyway). They either use logical UUIDs or hardware WWN/serial.

      • renzev@lemmy.worldOP
        link
        fedilink
        English
        arrow-up
        11
        arrow-down
        1
        ·
        edit-2
        7 days ago

        idk man I use /dev/sdX when running commands interactively and PARTLABELs in my /etc/fstab. All those letters and numbers in UUIDs are too much for my monkey brain to handle lol

      • bitwaba@lemmy.world
        link
        fedilink
        arrow-up
        7
        ·
        edit-2
        6 days ago

        Yeah, the point is “you can use either one”, instead of “we made the choice for you”

    • jj4211@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      7 days ago

      And at least in some distributions, they do exactly that, a number of aliases for the same interface. And you can add your own.

  • neclimdul@lemmy.world
    link
    fedilink
    arrow-up
    9
    ·
    6 days ago

    I really appreciate this change. Prior to it was always a struggle to deploy servers successfully. You’d reboot and your database would be on the wrong interface and you could even remote in because the management interface was suddenly on a firewalled external only network. Ask me how I know.

    With virtualization and containers this just got more complicated. I would constantly have to rewrite kvm entire configs because I’d drop a new nic in the machine. A nightmare.

    Sure, it’s gibberish for the desktop user but you can just use the UI and ignore the internal name. Not even sure the last time I saw it on my laptop. So no big deal.

  • NutWrench@lemmy.world
    link
    fedilink
    arrow-up
    10
    ·
    6 days ago

    Also, make sure your password contains L’s, 1’s, 0’s and O’s in a font deliberately chosen to make them hard to tell apart.

  • 🐍🩶🐢@lemmy.world
    link
    fedilink
    English
    arrow-up
    7
    ·
    6 days ago

    I had to change mine to mac address naming on my proxmox server after the second time the name changed due to a GPU or SSD being added. It was kind of like, so what, if an SSD dies suddenly or I have some issue with a device you are going to rename my fucking nic card again while I am trying to troubleshoot? Absolutely deranged.