diff --git a/inventory_provider/db/opsdb.py b/inventory_provider/db/opsdb.py
index ac8958a5ca816583b60d8bf9829119541fb7aca7..cdf49bdc947cb282b5e86093dee0f5448d5708f7 100644
--- a/inventory_provider/db/opsdb.py
+++ b/inventory_provider/db/opsdb.py
@@ -414,15 +414,20 @@ WHERE
 """
 
     def _public(row):
+        # cf. LGR-73
+
         if row['pop_name'] in INTERNAL_POP_NAMES:
             return False
-        if row['router_name'].startswith('sw'):
+
+        router_name_lower = row['router_name'].lower()
+        if any(router_name_lower.startswith(prefix)
+                for prefix in ['srx', 'gts', 'sw', 'qfx']):
             return False
+
         if row['pop_city'].lower() == 'slough' \
                 and not row['equipment_model'].upper().startswith('MX'):
             return False
-        if row['router_name'].startswith('srx'):
-            return False
+
         return True
 
     def _row2rsp(row):
diff --git a/test/test_opsdb_queries.py b/test/test_opsdb_queries.py
index 021a2adda1cc9429993cad268f55c3e8e557b3fd..da219e271fd717a46655b5b6721ffa027d3fbe01 100644
--- a/test/test_opsdb_queries.py
+++ b/test/test_opsdb_queries.py
@@ -294,9 +294,12 @@ def test_lookup_lg_routers(connection, cached_test_data):
     assert not any(
         r['equipment name'].lower().startswith('junosspace') for r in routers)
 
-    srx = filter(
-        lambda r: r['equipment name'].lower().startswith('srx'), routers)
-    assert all(s['type'] == 'INTERNAL' for s in srx)
+    internal_prefix_patterns = ['srx', 'gts', 'qfx']
+    for prefix in internal_prefix_patterns:
+        filtered = filter(
+            lambda r: r['equipment name'].lower().startswith(prefix), routers)
+        assert all(r['type'] == 'INTERNAL' for r in filtered), \
+            f'not all {prefix}* routers are INTERNAL'
 
 
 CIRCUIT_INFO_SCHEMA = {