diff --git a/networkd/defaults/main.yml b/networkd/defaults/main.yml
index 680ab8521d17a44350fb0528fc97921f3b3796e9..4db208748fb8a8a055c19731f25a36777749158c 100644
--- a/networkd/defaults/main.yml
+++ b/networkd/defaults/main.yml
@@ -1,5 +1,13 @@
 ---
 
+# interfaces:
+#   - identifier: name_for_the_link_file
+#     match:
+#       PermanentMACAddress: "01:23:45:67:89:ab"
+#     link:
+#       Name: veryimportantinterface
+#
+
 # networkd:
 #   - type: 'dhcp'
 #   - type: 'static'
diff --git a/networkd/tasks/main.yml b/networkd/tasks/main.yml
index dca3fe485be303cd85f33ed13300b7c604cb56bc..e8e06d914959bb2d617bfbf4d688b5a50c173b6f 100644
--- a/networkd/tasks/main.yml
+++ b/networkd/tasks/main.yml
@@ -21,6 +21,17 @@
   notify:
     - restart networkd
 
+- name: ensure there are link files if needed
+  template:
+    src: "interface.link.j2"
+    dest: "/etc/systemd/network/{{ item.0 }}-{{ item.1.identifier }}.link"
+    owner: root
+    group: root
+    mode: '0644'
+  with_indexed_items: "{{ interfaces|default([]) }}"
+  notify:
+    - restart networkd
+
 - name: find network config files generated by the bootstrap process
   find:
     path: /etc/systemd/network
diff --git a/networkd/templates/interface.link.j2 b/networkd/templates/interface.link.j2
new file mode 100644
index 0000000000000000000000000000000000000000..52124d0c9efbdf99908bb9c3ca2b760ff4d2438c
--- /dev/null
+++ b/networkd/templates/interface.link.j2
@@ -0,0 +1,9 @@
+[Match]
+{% for key, value in item.1["match"].items()  %}
+{{ key }}={{ value }}
+{% endfor %}
+
+[Link]
+{% for key, value in item.1["link"].items()  %}
+{{ key }}={{ value }}
+{% endfor %}