Custom MAC Address Linux Service

MAC Addresses are unique for each Network Interface Controller (NIC) and most often are not configurable. Taking advantage of this fact in combination with the Organizationally Unique Identifier(OUI), many Network scanners use the MAC Address in order to determine the manufacturer of a Network Device or even the device type. As you can read in RFC 7042:

48-bit MAC "addresses" are the most commonly used Ethernet interface identifiers. Those that are globally unique are also called EUI-48 identifiers. An EUI-48 is structured into an initial 3-octet OUI and an additional 3 octets assigned by the OUI holder or into a larger initial prefix assigned to an organization and a shorter sequence of additional bits so as to add up to 48 bits in total.

Here you can find a complete list of the registered OUIs from IEEE and here the Wireshark OUI Lookup tool.

Example

MAC addresses starting with:

  • DC-A6-32
  • E4-5F-01
  • B8-27-EB
    are Raspberry PI devices, because all three OUI’s are registered to Raspberry Pi Trading Ltd.

The "Privacy" concerns

The "static" nature of the MAC Address is among the most popular methods for tracking and profiling users. Following the Privacy Concerns which raised over the last years both Android and iOS are now using Randomized MAC addresses to avoid user’s tracking and profiling.

The ENC28J60 Module MAC Address

If you have been following along, you may have noticed that when I built the Raspberry PI "Drone" using the ENC28J60 Ethernet Module, the device’s MAC address was different after each restart. This is a screenshot of the network configuration when the device boot for first time:
MAC on First Boot

and this is after a reboot:

MAC Address after Reboot

As you can see, the MAC Address is different after each boot, which is a result of the ENC28J60 chip. The reason is that ENC28J60 does not come with a preset MAC address but instead it randomly generates a new one on every boot. We can overcome this, and set a constant MAC Address using a Linux service with systemd.

Use a Linux service to set your own MAC Address

1) Create a new file using the command:

sudo nano /lib/systemd/system/custommac.service

2) Enter the following content:

[Unit]
Description=ENC28J60 module MAC Address
Wants=network-pre.target
Before=network-pre.target
BindsTo=sys-subsystem-net-devices-eth0.device
After=sys-subsystem-net-devices-eth0.device
[Service]
Type=oneshot
ExecStart=/sbin/ip link set dev eth0 address dc:a6:32:00:00:01
ExecStart=/sbin/ip link set dev eth0 up
[Install]
WantedBy=multi-user.target

3) Save the file using {CTRL} + {X}, then {Y} and finally {ENTER}

4) Apply the appropriate permissions:

sudo chmod 644 /lib/systemd/system/custommac.service

5) Enable the new service:

sudo systemctl enable custommac.service

Verify that the symlink was created:
Service Enabled

6) Reboot and use the following command check network settings:

ifconfig

Custom MAC Address Configured

Disable the service and use the random generated MAC Address to avoid tracking

To disable this service use the command:

sudo systemctl disable custommac.service

Disabling a custom Linux Service