diff --git a/defaults/main.yml b/defaults/main.yml
index ccbd58d979304d904fc283b0d3f161a2e389e14b..9708f5c15581c83eae2b9459a06a924f0e488149 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -23,3 +23,19 @@ users:
 #  passwordless_sudo: yes
 #  # https://docs.ansible.com/ansible/latest/collections/ansible/posix/authorized_key_module.html#examples
 #  keys_url: https://git.sch.bme.hu/xy.keys
+
+# netplan:
+#   network:
+#     ethernets:
+#       ens192:
+#         dhcp4: no
+#         addresses:
+#           - 152.66.208.666/24
+#         nameservers:
+#           search: [sch.bme.hu]
+#           addresses: [152.66.208.1, 8.8.8.8]
+#         gateway4: 152.66.208.254
+#       ens224:
+#         dhcp4: no
+#         addresses:
+#           - 192.168.1.254/24
diff --git a/tasks/main.yml b/tasks/main.yml
index 051d931642b61279a7803d620ef062b646b17694..99844df386f25558ddbf1e3d2116705e587732e1 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -34,3 +34,7 @@
 
 - name: Fix multipath UUID VMWare errors
   include_tasks: multipath.yaml
+
+- name: Update netplan config
+  include_tasks: netplan.yaml
+  when: netplan is defined
diff --git a/tasks/netplan.yaml b/tasks/netplan.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..981aa98d33a5421819db8bb86e6e508145a0c334
--- /dev/null
+++ b/tasks/netplan.yaml
@@ -0,0 +1,23 @@
+---
+- name: Disable cloud init networking
+  template:
+    src: etc/cloud/cloud.cfg.d/99-disable-network-config.cfg.j2
+    dest: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
+    mode: 0644
+
+- name: Add netplan network config
+  template:
+    src: etc/netplan/01-netcfg.yaml.j2
+    dest: /etc/netplan/01-netcfg.yaml
+    mode: 0644
+  register: netplan_config
+
+- name: Remove old netplan config
+  ansible.builtin.file:
+    path: /etc/netplan/50-cloud-init.yaml
+    state: absent
+  when: netplan_config.changed
+
+- name: Apply Netplan Configuration
+  command: netplan apply
+  when: netplan_config.changed
diff --git a/tasks/packages.yml b/tasks/packages.yml
index 68ef1f9fa0e16c83e143245e43ebdf5698381d6a..653d5101d64c43360b41be362ad62162b4168c0c 100644
--- a/tasks/packages.yml
+++ b/tasks/packages.yml
@@ -19,6 +19,7 @@
       - strace
       - tcpdump
       - xxd
+      - traceroute
 
       # Editors
       - nano
diff --git a/templates/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg.j2 b/templates/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg.j2
new file mode 100644
index 0000000000000000000000000000000000000000..c12ad7873d81d28f981ea4ee75ee56ac8534c9fa
--- /dev/null
+++ b/templates/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg.j2
@@ -0,0 +1,7 @@
+#
+# !!!
+# {{ ansible_managed }}
+# !!!
+
+# Disable cloudinit network config
+network: {config: disabled}
diff --git a/templates/etc/netplan/01-netcfg.yaml.j2 b/templates/etc/netplan/01-netcfg.yaml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..8cd0c6fc27b86cbe37b4a1b3985bcf7cc306c289
--- /dev/null
+++ b/templates/etc/netplan/01-netcfg.yaml.j2
@@ -0,0 +1,10 @@
+#
+# !!!
+# {{ ansible_managed }}
+# !!!
+
+network:
+  version: 2
+  renderer: networkd
+  ethernets:
+{{ netplan['network']['ethernets']|to_nice_yaml|indent(4, true) }}