Nextcloud refuses to install applications from appstore when the instance is on an IPv6-Only network with SIIT-DC/NAT64/DNS64 gateway
Application is installed successfully without pinning DNS hostnames to legacy IPv4 addresses
{
"reqId": "1QT4vePqWwE9N0xhZDRi",
"level": 3,
"time": "2026-09-27T12:46:11+00:00",
"remoteAddr": "***REMOVED SENSITIVE VALUE***",
"user": "admin",
"app": "appstore",
"method": "POST",
"url": "/ocs/v2.php/apps/appstore/api/v1/apps/enable",
"scriptName": "/ocs/v2.php",
"message": "could not enable app",
"userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:155.0) Gecko/20100101 Firefox/155.0",
"version": "35.0.1.1",
"exception": {
"Exception": "OCP\\Http\\Client\\LocalServerException",
"Message": "Host \"64:ff9b:1::8c52:7903\" (github.com:80) violates local access rules",
"Code": 0,
"Trace": [
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php",
"line": 35,
"function": "OC\\Http\\Client\\{closure}",
"class": "OC\\Http\\Client\\DnsPinMiddleware",
"type": "->",
"args": [
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Middleware.php",
"line": 31,
"function": "__invoke",
"class": "GuzzleHttp\\PrepareBodyMiddleware",
"type": "->",
"args": [
"*** sensitive parameters replaced ***",
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php",
"line": 72,
"function": "GuzzleHttp\\{closure}",
"class": "GuzzleHttp\\Middleware",
"type": "::",
"args": [
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Middleware.php",
"line": 66,
"function": "__invoke",
"class": "GuzzleHttp\\RedirectMiddleware",
"type": "->",
"args": [
"*** sensitive parameters replaced ***",
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/HandlerStack.php",
"line": 75,
"function": "GuzzleHttp\\{closure}",
"class": "GuzzleHttp\\Middleware",
"type": "::",
"args": [
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Client.php",
"line": 1109,
"function": "__invoke",
"class": "GuzzleHttp\\HandlerStack",
"type": "->",
"args": [
"*** sensitive parameters replaced ***",
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Client.php",
"line": 243,
"function": "transfer",
"class": "GuzzleHttp\\Client",
"type": "->",
"args": [
"*** sensitive parameters replaced ***",
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Client.php",
"line": 273,
"function": "requestAsync",
"class": "GuzzleHttp\\Client",
"type": "->",
"args": [
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/lib/private/Http/Client/Client.php",
"line": 215,
"function": "request",
"class": "GuzzleHttp\\Client",
"type": "->",
"args": [
"*** sensitive parameters replaced ***",
"*** sensitive parameters replaced ***",
{
"0": "And 4 more entries, set log level to debug to see all entries",
"verify": "/srv/nextcloud/resources/config/ca-bundle.crt",
"timeout": 120,
"version": "2.0",
"curl": {
"84": 4
},
"allow_redirects": {
"on_redirect": {
"__class__": "Closure"
}
}
}
]
},
{
"file": "/srv/nextcloud/lib/private/Installer.php",
"line": 240,
"function": "get",
"class": "OC\\Http\\Client\\Client",
"type": "->",
"args": [
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/apps/appstore/lib/Controller/ApiController.php",
"line": 173,
"function": "downloadApp",
"class": "OC\\Installer",
"type": "->",
"args": [
"user_oidc"
]
},
{
"file": "/srv/nextcloud/lib/private/AppFramework/Http/Dispatcher.php",
"line": 198,
"function": "enableApp",
"class": "OCA\\Appstore\\Controller\\ApiController",
"type": "->",
"args": [
"user_oidc",
[],
false
]
},
{
"file": "/srv/nextcloud/lib/private/AppFramework/Http/Dispatcher.php",
"line": 86,
"function": "executeController",
"class": "OC\\AppFramework\\Http\\Dispatcher",
"type": "->",
"args": [
{
"__class__": "OCA\\Appstore\\Controller\\ApiController"
},
"enableApp"
]
},
{
"file": "/srv/nextcloud/lib/private/AppFramework/App.php",
"line": 138,
"function": "dispatch",
"class": "OC\\AppFramework\\Http\\Dispatcher",
"type": "->",
"args": [
{
"__class__": "OCA\\Appstore\\Controller\\ApiController"
},
"enableApp"
]
},
{
"file": "/srv/nextcloud/lib/private/Route/Router.php",
"line": 324,
"function": "main",
"class": "OC\\AppFramework\\App",
"type": "::",
"args": [
"OCA\\Appstore\\Controller\\ApiController",
"enableApp",
{
"__class__": "OC\\AppFramework\\DependencyInjection\\DIContainer"
},
{
"_route": "ocs.appstore.api.enableapp"
}
]
},
{
"file": "/srv/nextcloud/ocs/v1.php",
"line": 88,
"function": "match",
"class": "OC\\Route\\Router",
"type": "->",
"args": [
"/ocsapp/apps/appstore/api/v1/apps/enable"
]
},
{
"file": "/srv/nextcloud/lib/OC.php",
"line": 1397,
"function": "{closure}",
"args": [
"*** sensitive parameters replaced ***"
]
},
{
"file": "/srv/nextcloud/ocs/v1.php",
"line": 35,
"function": "handleRequests",
"class": "OC",
"type": "::",
"args": [
{
"__class__": "Closure"
}
]
},
{
"file": "/srv/nextcloud/ocs/v2.php",
"line": 10,
"args": [
"/srv/nextcloud/ocs/v1.php"
],
"function": "require_once"
}
],
"File": "/srv/nextcloud/lib/private/Http/Client/DnsPinMiddleware.php",
"Line": 151,
"message": "could not enable app",
"CustomMessage": "could not enable app"
},
"id": "6ab912e9242ff"
}
It looks like there is a DNS pinning done, but why? I don't see the reason behind it, it's at best some pseudo-security, since TLS verification is enough... and at worst, it completely breaks the setup for users behind IPv6-only networks with DNS64.
I tried to use Nextcloud without NAT64/DNS64 and well, we all know that GitHub hasn't added IPv6 support yet, so running a gateway is necessary.
Bug description
Nextcloud refuses to install applications from appstore when the instance is on an IPv6-Only network with SIIT-DC/NAT64/DNS64 gateway
Steps to reproduce
taygafor stateless NAT64 andunboundwith DNS64 enabled.Expected behavior
Application is installed successfully without pinning DNS hostnames to legacy IPv4 addresses
Nextcloud Server version
35
Operating system
Debian/Ubuntu
PHP engine version
PHP 8.3
Web server
Other
Database engine version
PostgreSQL
Is this bug present after an update or on a fresh install?
Fresh Nextcloud Server install
Are you using the Nextcloud Server Encryption module?
None
What user-backends are you using?
Configuration report
{ "system": { "instanceid": "***REMOVED SENSITIVE VALUE***", "passwordsalt": "***REMOVED SENSITIVE VALUE***", "secret": "***REMOVED SENSITIVE VALUE***", "trusted_domains": [ "cloud.inklusives.theater" ], "datadirectory": "***REMOVED SENSITIVE VALUE***", "dbtype": "pgsql", "version": "35.0.1.1", "overwrite.cli.url": "https:\/\/cloud.inklusives.theater", "dbname": "***REMOVED SENSITIVE VALUE***", "dbhost": "***REMOVED SENSITIVE VALUE***", "dbtableprefix": "oc_", "dbuser": "***REMOVED SENSITIVE VALUE***", "dbpassword": "***REMOVED SENSITIVE VALUE***", "installed": true, "mail_smtpmode": "smtp", "mail_smtpsecure": "ssl", "mail_sendmailmode": "smtp", "mail_smtpstreamoptions": { "ssl": { "allow_self_signed": false, "verify_peer": true, "verify_peer_name": true } }, "ldapProviderFactory": "OCA\\User_LDAP\\LDAPProviderFactory" } }List of activated Apps
Nextcloud Signing status
Nextcloud Logs
{ "reqId": "1QT4vePqWwE9N0xhZDRi", "level": 3, "time": "2026-09-27T12:46:11+00:00", "remoteAddr": "***REMOVED SENSITIVE VALUE***", "user": "admin", "app": "appstore", "method": "POST", "url": "/ocs/v2.php/apps/appstore/api/v1/apps/enable", "scriptName": "/ocs/v2.php", "message": "could not enable app", "userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:155.0) Gecko/20100101 Firefox/155.0", "version": "35.0.1.1", "exception": { "Exception": "OCP\\Http\\Client\\LocalServerException", "Message": "Host \"64:ff9b:1::8c52:7903\" (github.com:80) violates local access rules", "Code": 0, "Trace": [ { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php", "line": 35, "function": "OC\\Http\\Client\\{closure}", "class": "OC\\Http\\Client\\DnsPinMiddleware", "type": "->", "args": [ "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Middleware.php", "line": 31, "function": "__invoke", "class": "GuzzleHttp\\PrepareBodyMiddleware", "type": "->", "args": [ "*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/RedirectMiddleware.php", "line": 72, "function": "GuzzleHttp\\{closure}", "class": "GuzzleHttp\\Middleware", "type": "::", "args": [ "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Middleware.php", "line": 66, "function": "__invoke", "class": "GuzzleHttp\\RedirectMiddleware", "type": "->", "args": [ "*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/HandlerStack.php", "line": 75, "function": "GuzzleHttp\\{closure}", "class": "GuzzleHttp\\Middleware", "type": "::", "args": [ "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Client.php", "line": 1109, "function": "__invoke", "class": "GuzzleHttp\\HandlerStack", "type": "->", "args": [ "*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Client.php", "line": 243, "function": "transfer", "class": "GuzzleHttp\\Client", "type": "->", "args": [ "*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/3rdparty/guzzlehttp/guzzle/src/Client.php", "line": 273, "function": "requestAsync", "class": "GuzzleHttp\\Client", "type": "->", "args": [ "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/lib/private/Http/Client/Client.php", "line": 215, "function": "request", "class": "GuzzleHttp\\Client", "type": "->", "args": [ "*** sensitive parameters replaced ***", "*** sensitive parameters replaced ***", { "0": "And 4 more entries, set log level to debug to see all entries", "verify": "/srv/nextcloud/resources/config/ca-bundle.crt", "timeout": 120, "version": "2.0", "curl": { "84": 4 }, "allow_redirects": { "on_redirect": { "__class__": "Closure" } } } ] }, { "file": "/srv/nextcloud/lib/private/Installer.php", "line": 240, "function": "get", "class": "OC\\Http\\Client\\Client", "type": "->", "args": [ "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/apps/appstore/lib/Controller/ApiController.php", "line": 173, "function": "downloadApp", "class": "OC\\Installer", "type": "->", "args": [ "user_oidc" ] }, { "file": "/srv/nextcloud/lib/private/AppFramework/Http/Dispatcher.php", "line": 198, "function": "enableApp", "class": "OCA\\Appstore\\Controller\\ApiController", "type": "->", "args": [ "user_oidc", [], false ] }, { "file": "/srv/nextcloud/lib/private/AppFramework/Http/Dispatcher.php", "line": 86, "function": "executeController", "class": "OC\\AppFramework\\Http\\Dispatcher", "type": "->", "args": [ { "__class__": "OCA\\Appstore\\Controller\\ApiController" }, "enableApp" ] }, { "file": "/srv/nextcloud/lib/private/AppFramework/App.php", "line": 138, "function": "dispatch", "class": "OC\\AppFramework\\Http\\Dispatcher", "type": "->", "args": [ { "__class__": "OCA\\Appstore\\Controller\\ApiController" }, "enableApp" ] }, { "file": "/srv/nextcloud/lib/private/Route/Router.php", "line": 324, "function": "main", "class": "OC\\AppFramework\\App", "type": "::", "args": [ "OCA\\Appstore\\Controller\\ApiController", "enableApp", { "__class__": "OC\\AppFramework\\DependencyInjection\\DIContainer" }, { "_route": "ocs.appstore.api.enableapp" } ] }, { "file": "/srv/nextcloud/ocs/v1.php", "line": 88, "function": "match", "class": "OC\\Route\\Router", "type": "->", "args": [ "/ocsapp/apps/appstore/api/v1/apps/enable" ] }, { "file": "/srv/nextcloud/lib/OC.php", "line": 1397, "function": "{closure}", "args": [ "*** sensitive parameters replaced ***" ] }, { "file": "/srv/nextcloud/ocs/v1.php", "line": 35, "function": "handleRequests", "class": "OC", "type": "::", "args": [ { "__class__": "Closure" } ] }, { "file": "/srv/nextcloud/ocs/v2.php", "line": 10, "args": [ "/srv/nextcloud/ocs/v1.php" ], "function": "require_once" } ], "File": "/srv/nextcloud/lib/private/Http/Client/DnsPinMiddleware.php", "Line": 151, "message": "could not enable app", "CustomMessage": "could not enable app" }, "id": "6ab912e9242ff" }Additional info
It looks like there is a DNS pinning done, but why? I don't see the reason behind it, it's at best some pseudo-security, since TLS verification is enough... and at worst, it completely breaks the setup for users behind IPv6-only networks with DNS64.
I tried to use Nextcloud without NAT64/DNS64 and well, we all know that GitHub hasn't added IPv6 support yet, so running a gateway is necessary.