Using Predictable Network Interface Names
When you run Photon OS on a virtual machine or a bare-metal machine, the Ethernet network interface name might shift from one device to another if you add or remove a card and reboot the machine. For example, a device named eth2
might become eth1
after you remove a NIC and restart the machine.
You can prevent interface names from reordering by turning on predictable network interface names. The naming schemes that Photon OS uses can then assign fixed, predictable names to network interfaces even after you add or remove cards or other firmware and the restart the system.
When you enable predictable network interface names, you can use one of the following options to assign persistent names to network interfaces:
- Apply the
slot
name policy to set the name of networking devices in theens
format with a statically assigned PCI slot number. - Apply the
mac
name policy to set the name of networking devices in theenx
format a unique MAC address. - Apply the
path
name policy to set the name of networking devices in theenpXsY
format derived from a device connector's physical location.
Though Photon OS supports the onboard
name policy to set the name of networking devices from index numbers given by the firmware in the eno
format, the policy might result in nonpersistent names.
The option to choose depends on your use case and your unique networking requirements. For example, when you clone virtual machines and require the MAC addresses to be different from one another but the interface name to be the same, consider using ens
to keep the slot the same after system reboots.
Alternatively, if the cloning function supports enx
, you can use it to set a MAC address which persists after reboots.
Perform the following steps to turn on predictable network interface names:
Make a backup copy of the following file in case you need to restore it later:
cp /boot/grub/grub.cfg /boot/grub/grub.cfg.original
To turn on predictable network interface names, edit
/boot/grub/grub.cfg
to remove the following string:
```
net.ifnames=0Item
```
The string appears near the bottom of the file in the `menuentry` section:
```
menuentry "Photon" {
linux "/boot/"$photon_linux root=$rootpartition net.ifnames=0 $photon_cmdline
if [ "$photon_initrd" ]; then
initrd "/boot/"$photon_initrd
fi
}
# End /boot/grub2/grub.cfg
```
Edit out `net.ifnames=0`, but make no other changes to the file, and then save it.
- Specify the types of policies that you want to use for predictable interface names by modifying the
NamePolicy
option in/lib/systemd/network/99-default.link
. The file contents are as follows:
```
cat /lib/systemd/network/99-default.link
[Link]
NamePolicy=kernel database
MACAddressPolicy=persistent
```
To use the ens
or enx
option, the slot
policy or the mac
policy can be added to the space-separated list of policies that follow the NamePolicy
option in the default link file, /lib/systemd/network/99-default.link
. The order of the policies matters. Photon OS applies the policy listed first before proceeding to the next policy if the first one fails.
For example:
/lib/systemd/network/99-default.link
[Link]
NamePolicy=slot mac kernel database
MACAddressPolicy=persistent
With the name policy specified in the above example, you might still have an Ethernet-style interface name if the two previous policies, slot
and mac
, fail.
For information on setting name policies, see systemd.link--network device configuration.