Create Dummy Network Interfaces on Linux

Various professional software use a solution called “FlexNet“ for licensing. While license managers like this are supposed to protect the intellectual properties of the vendor while keeping this attempt as transparent to the end user as possible, FlexNet seems to be bad at both. Basically, FlexNet tries to hook one license to a single machine (so-called “node-locked”) by associating the license with a unique identifier of the machine. During initialization, the software checks the ID of the machine and verifies it against the license.

So why does it cause a PITA? First, there is no good way to “deactivate” a license once it has been generated for a host. Recall that once the license certificate has been created, all subsequent checks happen offline. If the end user wants to reassociate the license with a different machine for whatever reason, the vendor can do nothing but to trust the user that he or she has nuked the original license file. Second, attaching a license to an ID of the machine is simply funny, since the software can easily be fooled unless this ID comes from a component that is out of reach from the end uder. For example, FlexNet uses the MAC address of the NIC to identify a Linux computer, but actually the MAC address can be changed with just one simple command, and there is little that the software vendor can prevent that from happening.

Now get back to the topic. I have a Xilinx Vivado license that is associated to a VM that I used (and deleted) long ago, and now I want it to work on my new desktop, so I plan to change the MAC address of the desktop machine to be the same as the VM. However the license manager says that the host ID is 000000000000, indicating that it fails to detect the MAC address of the NIC. Meanwhile, I happen to know that Ubuntu has changed the naming scheme of network interfaces a while ago, and Etherent interfaces are no longer named ethX, a change which I suppose FlexNet has not gotten used to. If this hypothesis holds, then I only need to create a “dummy” eth0 interface.

Some quick Googling led me to this StackExchange post. First, we need to load the dummy module, as it is not loaded at boot on Ubuntu 16.04. And we can then proceed to create the dummy interface. Finally, we change the MAC address of the dummy interface to match that of the VM.

sudo modprobe dummy
sudo ip link set name eth0 dev dummy0
sudo ifconfig eth0 hw ether 01:23:45:67:89:ab

And voilĂ ! I get access to the software that I own!