How do I get NetworkManager to assign a fixed MAC address to eth0?
Solution 1
TLDR:
nmcli con show
look for your DEVICE (eth0) in the last column and use the name of the connection for the following command. Example, if the connection name is "Default":
sudo nmcli con modify Default 802-3-ethernet.cloned-mac-address 00:12:34:56:78:9a
Longer Answer:
nmcli --version
NetworkManager is in continuous development and sometimes configuration parameters or their names change. Some changes are confusing.
Contrast and compare:
- https://developer.gnome.org/NetworkManager/1.10/NetworkManager.conf.html
- https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html
And:
- https://developer.gnome.org/NetworkManager/1.10/settings-802-3-ethernet.html
- https://developer.gnome.org/NetworkManager/stable/settings-802-3-ethernet.html
I faced the same problem with Xubuntu 18.04. Rant against compatibility-breaking configuration changes omitted.
Solution 2
As said, the property in keyfile format, nmcli, and NetworkManager.conf
is called ethernet.cloned-mac-address
. Only on D-Bus API it's called ethernet.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 editing NetworkManager.conf
you specify the default value that is used if the per-profile value is unspecified. That's explained in man 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 with SIGHUP
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 with ip link
or nmcli device
. Likewise the match-device=interface-name:
setting for NetworkManager.conf
.
Related videos on Youtube
mpb
Updated on September 18, 2022Comments
-
mpb over 1 year
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 theifupdown
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 theifupdown
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 likeenp1s0
. I have already disabled that renaming, so I do indeed have aneth0
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
.-
AlexOnLinux about 5 yearsas far as i know 18.04 uses
netplan
Probably this link helps you somehow bugs.launchpad.net/netplan/+bug/1718607 and netplan.io -
Olorin about 5 yearsThe docs says about
assigned-mac-address
: 'Note that this property only exists in D-Bus API. libnm and nmcli continue to call this property "cloned-mac-address".' So maybe you needcloned-mac-address="00:22:68:1c:59:b1"
? -
Robert Baker about 5 years@mpb I wonder is NetworkManager is looking for the 'predictable' interface and not eth0.