diff --git a/tasks/main.yml b/tasks/main.yml
index 6f06e186ddada307c71f56bd40dafe7de964d7c5..0b7558535c36213fd2d6cbde7e105803e162a91a 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -178,12 +178,14 @@
       export TMOUT
   when: ansible_os_family == "RedHat"
 
-- name: disable ipv6
-  sysctl:
-    name: "{{ item }}"
-    value: '1'
-    sysctl_set: true
-  with_items: "{{ sysctl_disable_ipv6_keys }}"
+- name: setup ipv6
+  template:
+    src: 51-ipv6.yaml.j2
+    dest: /etc/netplan/51-ipv6.yaml
+    owner: root
+    group: root
+    mode: '0644'
+  when: ipv6_address is defined and inventory_hostname in groups['manual_ipv6']
 
 - name: set default path
   template:
diff --git a/templates/51-ipv6.yaml.j2 b/templates/51-ipv6.yaml.j2
new file mode 100644
index 0000000000000000000000000000000000000000..78604e1cbacce92c72ff348d63c46cbf94266cd0
--- /dev/null
+++ b/templates/51-ipv6.yaml.j2
@@ -0,0 +1,14 @@
+network:
+    version: 2
+    ethernets:
+        {{ ansible_default_ipv4.interface }}:
+            dhcp6: no
+            match:
+              name: {{ ansible_default_ipv4.interface }}
+            addresses:
+              - {{ ipv6_address }}
+            routes:
+              - to: {{ ipv6_gateway }}
+                scope: link
+              - to: ::/0
+                via: {{ ipv6_gateway }}