diff --git a/pkgs/tools/networking/clash/default.nix b/pkgs/tools/networking/clash/default.nix
new file mode 100644
index 000000000000..5829f5b5239b
--- /dev/null
+++ b/pkgs/tools/networking/clash/default.nix
@@ -0,0 +1,23 @@
+{ stdenv, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "clash";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "Dreamacro";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1k6afpazggpd7cabbw6ldv77bjj43083d5diy2w0iq5nw69gmwd3";
+  };
+
+  modSha256 = "1fx53df67mq7p3ampr96x8hd99v2991alb16v8iq36f032raa32f";
+
+  meta = with stdenv.lib; {
+    description = "A rule-based tunnel in Go";
+    homepage = "https://github.com/Dreamacro/clash";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ contrun ];
+    platforms = platforms.all;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 3b5f0e03004f..39d131e4d6c1 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1396,6 +1396,8 @@ in
 
   clac = callPackage ../tools/misc/clac {};
 
+  clash = callPackage ../tools/networking/clash { };
+
   clasp = callPackage ../tools/misc/clasp { };
 
   cli53 = callPackage ../tools/admin/cli53 { };