diff --git a/playbooks/first.play.yml b/playbooks/first.play.yml
index 96369b2e97e1601d3022b5a5a3ec898de51974da..8412d6bca10b0e21c80f30a141b3cade82724791 100644
--- a/playbooks/first.play.yml
+++ b/playbooks/first.play.yml
@@ -3,98 +3,76 @@
   hosts: all
   become: true
   vars:
-    gns3_hosts:
+    interfaces:
       H1:
-        interfaces:
-          - name: "eth0"
-            address: "1.0.0.3"
-            netmask: "255.255.255.0"
-            gateway: "1.0.0.1"
+        - name: "eth0"
+          address: "1.0.0.3"
+          netmask: "255.255.255.0"
+          gateway: "1.0.0.1"
+
+      H2:
+        - name: "eth0"
+          address: "3.0.0.3"
+          netmask: "255.255.255.0"
+          gateway: "3.0.0.2"
 
       R1:
-        interfaces:
-          - name: eth1
-            address: "1.0.0.1"
-            netmask: "255.255.255.0"
-          - name: eth0
-            address: "2.0.0.1"
-            netmask: "255.255.255.0"
-        routes:
-          - network: "3.0.0.0/24"
-            via: "2.0.0.2"
+        - name: eth1
+          address: "1.0.0.1"
+          netmask: "255.255.255.0"
+        - name: eth0
+          address: "2.0.0.1"
+          netmask: "255.255.255.0"
 
       R2:
-        interfaces:
-          - name: eth0
-            address: "2.0.0.2"
-            netmask: "255.255.255.0"
-          - name: eth1
-            address: "3.0.0.2"
-            netmask: "255.255.255.0"
-        routes:
-          - network: "1.0.0.0/24"
-            via: "2.0.0.1"
+        - name: eth0
+          address: "2.0.0.2"
+          netmask: "255.255.255.0"
+        - name: eth1
+          address: "3.0.0.2"
+          netmask: "255.255.255.0"
 
-      H2:
-        interfaces:
-          - name: eth0
-            address: "3.0.0.3"
-            netmask: "255.255.255.0"
-            gateway: "3.0.0.2"
-
-  tasks:
-    # - name: "Debug interfaces"
-    #   ansible.builtin.debug:
-    #     msg: "{{ item.name }}"
-    #   loop: "{{ gns3_hosts[inventory_hostname].interfaces }}"
-
-    # - name: "Debug routes"
-    #   ansible.builtin.debug:
-    #     msg: "{{ item.network }}"
-    #   loop: "{{ gns3_hosts[inventory_hostname].routes }}"
+    routes:
+      R1:
+        - network: "3.0.0.0/24"
+          via: "2.0.0.2"
 
-    # - name: "Debug YAML"
-    #   ansible.builtin.debug:
-    #     msg: "{{ item.interfaces }}"
-    #   loop: "{{ gns3_hosts[inventory_hostname] | dict2items }}"
-    #   tags: debug_yaml
+      R2:
+        - network: "1.0.0.0/24"
+          via: "2.0.0.1"
 
-    - name: "Ensure /etc/network/interfaces.d exists"
+  tasks:
+    - name: Ensure /etc/network/interfaces.d exists
       ansible.builtin.file:
         path: /etc/network/interfaces.d
         state: directory
         mode: '0755'
 
-    - name: "Configure network interfaces"
+    - name: Configure network interfaces
       ansible.builtin.template:
-        src: "./templates/interfaces.j2"
-        dest: "/etc/network/interfaces.d/{{ item.name }}"
+        src: "templates/netconfig.j2"
+        dest: "/etc/network/interfaces.d/{{ inventory_hostname }}"
         owner: "root"
         group: "root"
         mode: "0644"
-      loop: "{{ gns3_hosts[inventory_hostname].interfaces }}"
       notify: Restart networking
 
-    - name: "Configure routes"
-      ansible.builtin.template:
-        src: "./templates/routes.j2"
-        dest: "/etc/network/interfaces.d/{{ inventory_hostname }}_routes"
-        owner: "root"
-        group: "root"
-        mode: "0644"
-      loop: "{{ gns3_hosts[inventory_hostname].routes }}"
-      when: inventory_hostname != "H1" and inventory_hostname != "H2"
-      notify: Restart networking
-
-    # - name: Verify H1 can ping H2
-    #   command: ping -c 3 3.0.0.3
+    # - name: H1 pings H2
+    #   ansible.builtin.command: ping -c 3 3.0.0.3
     #   register: ping_result
     #   changed_when: false
     #   failed_when: ping_result.rc != 0
     #   when: inventory_hostname == "H1"
+    #
+    # - name: H2 pings H2
+    #   ansible.builtin.command: ping -c 3 1.0.0.3
+    #   register: ping_result
+    #   changed_when: false
+    #   failed_when: ping_result.rc != 0
+    #   when: inventory_hostname == "H2"
 
   handlers:
-    - name: "Restart networking"
+    - name: Restart networking
       ansible.builtin.systemd:
         name: networking
         state: restarted
diff --git a/playbooks/templates/netconfig.j2 b/playbooks/templates/netconfig.j2
new file mode 100644
index 0000000000000000000000000000000000000000..f4ba8c5e5c8ea6c5f9f63cb04ffb1b9ee95c6b70
--- /dev/null
+++ b/playbooks/templates/netconfig.j2
@@ -0,0 +1,17 @@
+{% for intf in interfaces[inventory_hostname] %}
+auto {{ intf.name }}
+iface {{ intf.name }} inet static
+    address {{ intf.address }}
+    netmask {{ intf.netmask }}
+{% if intf.gateway is defined %}
+    gateway {{ intf.gateway }}
+{% endif %}
+{% endfor %}
+
+{% if inventory_hostname in routes %}
+{% for route in routes[inventory_hostname] %}
+    post-up ip route add {{ route.network }} via {{ route.via }}
+    pre-down ip route del {{ route.network }} via {{ route.via }}
+{% endfor %}
+{% endif %}
+