diff --git a/scripts/check.mjs b/scripts/check.mjs
index 74698d88809a19e43d192aa5f3f8f825e22a7325..aaef5630a46741378366a2038bd56d8595dd4ec8 100644
--- a/scripts/check.mjs
+++ b/scripts/check.mjs
@@ -91,6 +91,47 @@ async function resolveSidecar() {
   await fs.remove(tempDir);
 }
 
+/**
+ * only Windows
+ * get the wintun.dll (not required)
+ */
+async function resolveWintun() {
+  const { platform } = process;
+
+  if (platform !== "win32") return;
+
+  const url = "https://www.wintun.net/builds/wintun-0.14.1.zip";
+
+  const tempDir = path.join(cwd, "pre-dev-temp");
+  const tempZip = path.join(tempDir, "wintun.zip");
+
+  const wintunPath = path.join(tempDir, "wintun/bin/amd64/wintun.dll");
+  const targetPath = path.join(cwd, "src-tauri/resources", "wintun.dll");
+
+  if (!FORCE && (await fs.pathExists(targetPath))) return;
+
+  await fs.mkdirp(tempDir);
+
+  if (!(await fs.pathExists(tempZip))) {
+    await downloadFile(url, tempZip);
+  }
+
+  // unzip
+  const zip = new AdmZip(tempZip);
+  zip.extractAllTo(tempDir, true);
+
+  if (!(await fs.pathExists(wintunPath))) {
+    throw new Error(`path not found "${wintunPath}"`);
+  }
+
+  // move wintun.dll to resources
+  await fs.rename(wintunPath, targetPath);
+  // delete temp dir
+  await fs.remove(tempDir);
+
+  console.log(`[INFO]: resolve wintun.dll finished`);
+}
+
 /**
  * get the Country.mmdb (not required)
  */
@@ -123,4 +164,5 @@ async function downloadFile(url, path) {
 
 /// main
 resolveSidecar().catch(console.error);
+resolveWintun().catch(console.error);
 resolveMmdb().catch(console.error);
diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore
index 1412c98d6a570920a0893499e9f7039feeaed89b..7b128ffce57dfbbc5dca361dd1cc78b3f93b25d7 100644
--- a/src-tauri/.gitignore
+++ b/src-tauri/.gitignore
@@ -2,5 +2,5 @@
 # will have compiled files and executables
 /target/
 WixTools
-resources/Country.mmdb
+resources
 sidecar