diff --git a/src/upnp/protocol/pupnp/pupnp.cpp b/src/upnp/protocol/pupnp/pupnp.cpp
index d07cc20768b431190385e2e56f0d9792a9950c31..7003a49333331163655aa0d4f2d571941c472ca6 100644
--- a/src/upnp/protocol/pupnp/pupnp.cpp
+++ b/src/upnp/protocol/pupnp/pupnp.cpp
@@ -1157,6 +1157,13 @@ PUPnP::actionIsIgdConnected(const UPnPIGD& igd)
                                   nullptr,
                                   action.get(),
                                   &response_container_ptr);
+    if (upnp_err == 401) {
+        // YET ANOTHER UPNP HACK: MiniUpnp on some routers seems to not recognize this action, sending a 401: Invalid Action.
+        // So even if mapping succeeds, the router was considered as not connected.
+        // Returning true here works around this issue.
+        // E.g. https://community.tp-link.com/us/home/forum/topic/577840
+        return true;
+    }
     if (not response_container_ptr or upnp_err != UPNP_E_SUCCESS) {
         if (logger_) logger_->warn("PUPnP: Failed to send GetStatusInfo action -> {}", UpnpGetErrorMessage(upnp_err));
         return false;