diff --git a/scripts/nbhelper.py b/scripts/nbhelper.py
index b941cfb..c8309ab 100644
--- a/scripts/nbhelper.py
+++ b/scripts/nbhelper.py
@@ -213,6 +213,8 @@
         self.build_prefix()
         self.prefixes[self.data.prefix] = self
 
+        self.prefixes[self.data.prefix] = self
+
     @classmethod
     def all_prefixes(cls):
         return cls.prefixes
@@ -242,6 +244,37 @@
             }
         )
 
+    @classmethod
+    def all_reserved_by_ip(cls, ip_addr=""):
+        """
+        all_reserved_by_ip will return all reserved IP found in prefixes
+
+        We have the IP address marked as type 'Reserved' in Prefix,
+        This type of IP address is using to define a DHCP range
+        """
+
+        ret = list()
+
+        for prefix in cls.prefixes.values():
+            if ip_addr and ip_addr in prefix.aos.keys():
+                if prefix.reserved_ips:
+                    return list(prefix.reserved_ips.values())
+            else:
+                if prefix.reserved_ips:
+                    ret.extend(list(prefix.reserved_ips.values()))
+
+        return ret
+
+    def get_reserved_ips(self):
+        """
+        Get the reserved IP range (DHCP) in prefix
+
+        We have the IP address marked as type 'Reserved' in Prefix,
+        This type of IP address is using to define a DHCP range
+        """
+        if prefix.reserved_ips:
+            return list(prefix.reserved_ips.values())
+
     def parent(self):
         """
         Get the parent prefix to this prefix
@@ -558,12 +591,30 @@
                 interface_id=virtual_if.id
             )
 
+            routes = []
+            for ip in virtual_if_ips:
+                reserved_ips = NBPrefix.all_reserved_by_ip(str(ip))
+                for reserved_ip in reserved_ips:
+                    destination = reserved_ip["custom_fields"].get("rfc3442routes", "")
+                    if destination:
+                        for dest_ip in destination.split():
+                            new_route = {
+                                "to": dest_ip,
+                                "via": str(netaddr.IPNetwork(reserved_ip["ip4"]).ip),
+                                "metric": 100,
+                            }
+                            if new_route not in routes:
+                                routes.append(new_route)
+
             self.netplan_config["vlans"][virtual_if.name] = {
                 "id": vlan_object.vid,
                 "link": virtual_if.label,
                 "addresses": [ip.address for ip in virtual_if_ips],
             }
 
+            if routes:
+                self.netplan_config["vlans"][virtual_if.name]["routes"] = routes
+
         # If the object is mgmtserver, it needs to have DNS/NTP server configs
         if self.data["device_role"]["name"] == "Router":
             services = list(netboxapi.ipam.services.filter(device_id=self.id))
