diff --git a/nixos/modules/overlays.nix b/nixos/modules/overlays.nix
index ad41b406e3f7629f1e0765a9230a17c85fdba577..e510fbd7f6849d09fc52e0d3aff321c154e29cd4 100644
--- a/nixos/modules/overlays.nix
+++ b/nixos/modules/overlays.nix
@@ -1,11 +1,20 @@
+let
+  pythonTwistedOverride = python-self: python-super: {
+    twisted = python-super.callPackage ../pkgs/twisted.nix { inherit (python-super) twisted; };
+  };
+in
 self: super: {
-  privatestorage = super.python27.buildEnv.override
+  privatestorage = self.python27.buildEnv.override
   { extraLibs =
-    [ super.python27Packages.tahoe-lafs
-      super.python27Packages.zkapauthorizer
+    [ self.python27Packages.tahoe-lafs
+      self.python27Packages.zkapauthorizer
     ];
     # Twisted's dropin.cache always collides between different
     # plugin-providing packages.
-    ignoreCollisions = true;
+    # ignoreCollisions = true;
   };
+
+  python27 = super.python27.override (old: {
+    packageOverrides = super.lib.composeExtensions old.packageOverrides pythonTwistedOverride;
+  });
 }
diff --git a/nixos/pkgs/twisted.nix b/nixos/pkgs/twisted.nix
new file mode 100644
index 0000000000000000000000000000000000000000..32fb34378dcb287c01f405ef1284921459aaf792
--- /dev/null
+++ b/nixos/pkgs/twisted.nix
@@ -0,0 +1,7 @@
+{ twisted }:
+twisted.overrideAttrs (old: {
+  version = old.version + "-0";
+  prePatch = old.patchPhase;
+  patchPhase = null;
+  patches = (if old ? "patches" then old.patches else []) ++ [ ./twisted.patch ];
+})
diff --git a/nixos/pkgs/twisted.patch b/nixos/pkgs/twisted.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9f50368c8cffe60a819306687b5f78df228d4b61
--- /dev/null
+++ b/nixos/pkgs/twisted.patch
@@ -0,0 +1,23 @@
+diff --git a/src/twisted/internet/_resolver.py b/src/twisted/internet/_resolver.py
+index 1c16174a2..8c8249db4 100644
+--- a/src/twisted/internet/_resolver.py
++++ b/src/twisted/internet/_resolver.py
+@@ -74,6 +74,8 @@ class GAIResolver(object):
+     L{getaddrinfo} in a thread.
+     """
+ 
++    _log = Logger()
++
+     def __init__(self, reactor, getThreadPool=None, getaddrinfo=getaddrinfo):
+         """
+         Create a L{GAIResolver}.
+@@ -124,6 +126,9 @@ class GAIResolver(object):
+                                          socketType)
+             except gaierror:
+                 return []
++            except Exception as e:
++                self._log.failure("Problem resolving {hostName}", hostName=hostName)
++                return []
+         d = deferToThreadPool(self._reactor, pool, get)
+         resolution = HostResolution(hostName)
+         resolutionReceiver.resolutionBegan(resolution)