Skip to content

Instantly share code, notes, and snippets.

@scmanjarrez
Last active January 19, 2024 15:57
Show Gist options
  • Save scmanjarrez/71d4c694c920edd4b22345bf11109fb9 to your computer and use it in GitHub Desktop.
Save scmanjarrez/71d4c694c920edd4b22345bf11109fb9 to your computer and use it in GitHub Desktop.
wifi rename netplan

During an experiment, I need to use three WiFi interfaces on a Raspberry Pi running Ubuntu 20.04. In addition to Raspberry Pi's internal WiFi interface, I added two USB WiFi adapters. Three network interfaces showed up in the system (ip link command), and they are named wlan0, wlan1, and wlan2 by default.

I often need to capture packets with tcpdump, and I often have to be type these interface names manually. It isn't easy to remember the purpose of each network interface, so I wanted to rename the interfaces to reflect their role in my application. However, this isn't as easy as it sounds.

🚫 Netplan

Ubuntu 20.04 configures network interfaces using Netplan, so my first thought was: I can write a Netplan configuration that matches network interfaces with their MAC addresses, and assigns the desired name to each network interface.

The config file would look like this:

network:
  version: 2
  wifis:
    uplink:
      optional: true
      match:
        macaddress: ba:fe:de:f0:b9:e4
      set-name: uplink
      access-points:
        home:
          password: rP8jKHJ64
      dhcp4: true
      dhcp6: true
      accept-ra: true

However, this method would not work:

$ sudo netplan apply
ERROR: uplink: networkd backend does not support wifi with match:, only by interface name

🚫 70-persistent-net.rules

Many online guides refer to a file /etc/udev/rules.d/70-persistent-net.rules, which is processed by udev during boot. The file should have been created automatically by the system upon discovery of the network interfaces, and I just need to modify the interface names to the desired names.

However, this file does not exist in Ubuntu 20.04, so it's another dead end.

✔️ systemd.link

After carefully reading Debian's NetworkInterfaceNames guide, I found the correct way: systemd.link.

To rename WiFi interfaces, I can create a systemd configuration file for each network interface:

echo '[Match]
MACAddress=ba:fe:de:f0:b9:e4
[Link]
Name=uplink' | sudo tee /etc/systemd/network/10-uplink.link

After rebooting, the network interface is renamed to what I wanted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment