Update – Feb 21, 2020:
I never found an elegant way make NetworkManager assign a particular MAC address to the first/only Ethernet adapter on whatever system my disk happened to boot on. I also realized I may be able to solve my particular problem by reconfiguring my DHCP server to assign IP addresses based on system names, rather than MAC addresses. I also started configuring the network on most of my systems via systemd-networkd
, rather than NetworkManager or netplan. (systemd-networkd
may be better, but still has flaws IMO.) Finally, I am no longer confident that my Oct 14, 2019 update is correct. In other words, a default install of Ubuntu (maybe 19.10?) may no longer include the ifupdown
package.
Update – Oct 14, 2019:
(Note: As of Feb 2020, I suspect this paragraph may be incorrect and/or out of date.) This week I installed the desktop version of Ubuntu 19.04. It appears the package ifupdown
is installed by default on Ubuntu 19.04. (Yay!) Therefore, this question probably only applies to Ubuntu derivatives that have chosen to exclude the ifupdown
package from their default install. And the question probably does not apply to Ubuntu itself. For this and other reasons, I expect I will prefer vanilla Ubuntu over any of its derivatives on all my future installs.
Original Question – Feb 26, 2019
In the (distant?) past, I could assign a MAC address to a network interface by adding the following stanza to to /etc/network/interfaces
:
auto eth0
iface eth0
hwaddress 00:12:34:56:78:9a
As of Lubuntu 18.04, this no longer works (because the ifupdown
package is not installed by default).
My question is, what configuration file do I edit, and how do I edit it, so that NetworkManager will assign the fixed MAC address of my choice to eth0
.
(Aside: Yes, I know that by default Ubuntu 18.04 renames eth0
to a "predictable" name like enp1s0
. I have already disabled that renaming, so I do indeed have an eth0
interface on my system.)
I have glanced at the following documentation:
- The Gnome NetworkManager.conf documentation
- The Gnome nm-settings documentation
- Thomas Haller's Blog – MAC Address Spoofing in NetworkManager 1.4.0
Based on the above documentation, I tried adding something like the below to /etc/NetworkManager/NetworkManager.conf
:
[device]
match-device=interface-name:eth0
ethernet.assigned-mac-address=00:22:68:1c:59:b1
Unfortunately, the above does not seem to work.
My use case is that I have installed Lubuntu onto a USB stick. Upon boot of the USB stick on any system, I want NetworkManager to assign a predetermined and fixed MAC address to eth0
.
Best Answer
As said, the property in keyfile format, nmcli, and
NetworkManager.conf
is calledethernet.cloned-mac-address
. Only on D-Bus API it's calledethernet.assigned-mac-address
-- that has historic reasons.Usually you would set this per profile, for example via
nmcli connection modify "$PROFILE" ethernet.cloned-mac-address 00:22:68:1c:59:b1
. By editingNetworkManager.conf
you specify the default value that is used if the per-profile value is unspecified. That's explained inman NetworkManager.conf
.After modifying a profile, you need to reactivate it for the changes to take effect. Likewise, if you edit the default value in
NetworkManager.conf
, you need to reload it withSIGHUP
and reactivate the profile.Regarding predictable interface names: NetworkManager does not (re)name the device, that's commonly done by udev. You may restrict a profile to an interface by setting
connection.interface-name
to the name that was given to the device. You can see that name withip link
ornmcli device
. Likewise thematch-device=interface-name:
setting forNetworkManager.conf
.