diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 246b532bb622a413f6c33d866f564d5b945936ff..2afb2e47ebd6dcb9993d2a6f4e2ab74234cf5a71 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -117,6 +117,40 @@ def update_interfaces_to_services(self):
     logger.debug('<<< update_interfaces_to_services')
 
 
+@app.task(base=InventoryTask, bind=True)
+def import_unmanaged_interfaces(self):
+    logger.debug('>>> import_unmanaged_interfaces')
+
+    def _convert(d):
+        # the config file keys are more readable than
+        # the keys used in redis
+        return {
+            'name': d['address'],
+            'interface address': d['network'],
+            'interface name': d['interface'],
+            'router': d['router']
+        }
+
+    interfaces = [
+        _convert(ifc) for ifc
+        in InventoryTask.config.get('unmanaged-interfaces', [])
+    ]
+
+    if interfaces:
+        r = get_next_redis(InventoryTask.config)
+        rp = r.pipeline()
+        for ifc in interfaces:
+            rp.set(
+                f'reverse_interface_addresses:{ifc["name"]}',
+                json.dumps(ifc))
+            rp.set(
+                f'subnets:{ifc["interface address"]}',
+                json.dumps([ifc]))
+        rp.execute()
+
+    logger.debug('<<< import_unmanaged_interfaces')
+
+
 @app.task(base=InventoryTask, bind=True)
 def update_access_services(self):
     logger.debug('>>> update_access_services')
@@ -533,7 +567,8 @@ def launch_refresh_cache_all(config):
     subtasks = [
         update_equipment_locations.apply_async(),
         update_lg_routers.apply_async(),
-        update_access_services.apply_async()
+        update_access_services.apply_async(),
+        import_unmanaged_interfaces.apply_async()
     ]
     for hostname in _derive_router_hostnames(config):
         logger.debug('queueing router refresh jobs for %r' % hostname)