diff --git a/README.md b/README.md index a7c3799..45aff76 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,9 @@ https://evilfox.win/ Некоторые AV (Bkav, Microsoft Wacapew/Wacatac, Ikarus Trojan.WinGo.Agent, Google, Trapmine) часто помечают **любые** неподписанные Go-бинарники с сетью и сменой системного прокси. +В 2.6.1: +- AmneziaWG: перед подключением Endpoint-хост резолвится в IP (предпочтительно IPv4) — обход сбоя IpcSet на Windows («No such host is known»). + В 2.6.0: - исправлен разбор AmneziaWG: ключ в `awg://KEY@host`, JSON/`vpn://`, пробелы в именах полей, URL-safe base64. diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index f96962d..3b8c34c 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -12,8 +12,8 @@ android { applicationId = "win.evilfox.navis" minSdk = 26 targetSdk = 35 - versionCode = 260 - versionName = "2.6.0" + versionCode = 261 + versionName = "2.6.1" vectorDrawables.useSupportLibrary = true ndk { abiFilters += listOf("arm64-v8a", "armeabi-v7a", "x86_64") diff --git a/android/app/src/main/java/win/evilfox/navis/ui/NavisScreen.kt b/android/app/src/main/java/win/evilfox/navis/ui/NavisScreen.kt index 2b2325c..f41253a 100644 --- a/android/app/src/main/java/win/evilfox/navis/ui/NavisScreen.kt +++ b/android/app/src/main/java/win/evilfox/navis/ui/NavisScreen.kt @@ -97,7 +97,7 @@ fun NavisScreen( Text("Navis", fontSize = 28.sp, fontWeight = FontWeight.Black, color = Ink) Spacer(Modifier.width(8.dp)) Surface(color = Soft, shape = RoundedCornerShape(999.dp)) { - Text("2.6", Modifier.padding(horizontal = 8.dp, vertical = 2.dp), fontSize = 12.sp, fontWeight = FontWeight.Bold, color = AccentDeep) + Text("2.6.1", Modifier.padding(horizontal = 8.dp, vertical = 2.dp), fontSize = 12.sp, fontWeight = FontWeight.Bold, color = AccentDeep) } } Text("Android · Naive · Hy2 · AWG · Xray", color = Muted, fontSize = 13.sp) diff --git a/build-macos.bat b/build-macos.bat index e42d336..24ed0cf 100644 --- a/build-macos.bat +++ b/build-macos.bat @@ -28,11 +28,11 @@ if errorlevel 1 exit /b 1 go build -o "tools\packmac\packmac.exe" .\tools\packmac if errorlevel 1 exit /b 1 -tools\packmac\packmac.exe -bin "dist\navis-release\darwin-arm64\Navis" -out "dist\navis-release\darwin-arm64" -version 2.6.0 -arch arm64 +tools\packmac\packmac.exe -bin "dist\navis-release\darwin-arm64\Navis" -out "dist\navis-release\darwin-arm64" -version 2.6.1 -arch arm64 if errorlevel 1 exit /b 1 -tools\packmac\packmac.exe -bin "dist\navis-release\darwin-amd64\Navis" -out "dist\navis-release\darwin-amd64" -version 2.6.0 -arch amd64 +tools\packmac\packmac.exe -bin "dist\navis-release\darwin-amd64\Navis" -out "dist\navis-release\darwin-amd64" -version 2.6.1 -arch amd64 if errorlevel 1 exit /b 1 -tools\packmac\packmac.exe -bin "dist\navis-release\darwin-universal\Navis" -out "dist\navis-release\darwin-universal" -version 2.6.0 -arch universal +tools\packmac\packmac.exe -bin "dist\navis-release\darwin-universal\Navis" -out "dist\navis-release\darwin-universal" -version 2.6.1 -arch universal if errorlevel 1 exit /b 1 echo Built: diff --git a/dist/navis-release/Navis.exe b/dist/navis-release/Navis.exe index 3023e2b..9618cfe 100644 Binary files a/dist/navis-release/Navis.exe and b/dist/navis-release/Navis.exe differ diff --git a/dist/navis-release/darwin-amd64/Navis b/dist/navis-release/darwin-amd64/Navis index 100a903..e522eda 100644 Binary files a/dist/navis-release/darwin-amd64/Navis and b/dist/navis-release/darwin-amd64/Navis differ diff --git a/dist/navis-release/darwin-amd64/Navis.app.zip b/dist/navis-release/darwin-amd64/Navis.app.zip index 92abc89..326265a 100644 Binary files a/dist/navis-release/darwin-amd64/Navis.app.zip and b/dist/navis-release/darwin-amd64/Navis.app.zip differ diff --git a/dist/navis-release/darwin-amd64/Navis.dmg b/dist/navis-release/darwin-amd64/Navis.dmg index 953f27a..2d4f06e 100644 Binary files a/dist/navis-release/darwin-amd64/Navis.dmg and b/dist/navis-release/darwin-amd64/Navis.dmg differ diff --git a/dist/navis-release/darwin-arm64/Navis b/dist/navis-release/darwin-arm64/Navis index 4711e8e..da13ab5 100644 Binary files a/dist/navis-release/darwin-arm64/Navis and b/dist/navis-release/darwin-arm64/Navis differ diff --git a/dist/navis-release/darwin-arm64/Navis.app.zip b/dist/navis-release/darwin-arm64/Navis.app.zip index 6fc6880..d02074f 100644 Binary files a/dist/navis-release/darwin-arm64/Navis.app.zip and b/dist/navis-release/darwin-arm64/Navis.app.zip differ diff --git a/dist/navis-release/darwin-arm64/Navis.dmg b/dist/navis-release/darwin-arm64/Navis.dmg index 5a86492..db39d9b 100644 Binary files a/dist/navis-release/darwin-arm64/Navis.dmg and b/dist/navis-release/darwin-arm64/Navis.dmg differ diff --git a/dist/navis-release/darwin-universal/Navis b/dist/navis-release/darwin-universal/Navis index 90e8557..9922bc2 100644 Binary files a/dist/navis-release/darwin-universal/Navis and b/dist/navis-release/darwin-universal/Navis differ diff --git a/dist/navis-release/darwin-universal/Navis.app.zip b/dist/navis-release/darwin-universal/Navis.app.zip index 5c45b37..a1ed74d 100644 Binary files a/dist/navis-release/darwin-universal/Navis.app.zip and b/dist/navis-release/darwin-universal/Navis.app.zip differ diff --git a/dist/navis-release/darwin-universal/Navis.dmg b/dist/navis-release/darwin-universal/Navis.dmg index e0cb43f..e623d65 100644 Binary files a/dist/navis-release/darwin-universal/Navis.dmg and b/dist/navis-release/darwin-universal/Navis.dmg differ diff --git a/dist/navis-release/update.json b/dist/navis-release/update.json index f7d6f8e..1403363 100644 --- a/dist/navis-release/update.json +++ b/dist/navis-release/update.json @@ -1,22 +1,22 @@ { - "version": "2.6.0", - "notes": "Исправление AmneziaWG: ключи в awg://KEY@host, JSON/vpn://, пробелы в полях; без автоподключения по умолчанию", + "version": "2.6.1", + "notes": "AWG: любой hostname Endpoint резолвится в IP до подключения (фикс No such host is known)", "platform": "windows-amd64", "os": "windows", "arch": "amd64", "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "5d7d262c7804779aff8ccc4ef48ed3b280eb460ead3cc95386added909fb3fb2", + "sha256": "08f001a3850ca5bd4f73b7ba4d21e8664ee9fc8120a87877f35d8f20a5ed6993", "mandatory": false, "platforms": { "windows-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "5d7d262c7804779aff8ccc4ef48ed3b280eb460ead3cc95386added909fb3fb2", + "sha256": "08f001a3850ca5bd4f73b7ba4d21e8664ee9fc8120a87877f35d8f20a5ed6993", "os": "windows", "arch": "amd64" }, "darwin-arm64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis", - "sha256": "31ae3cca6cdfd9239b1812251a2c55e7c8ea879ae543020d1ca7f4138585a0b8", + "sha256": "b67e8b3fb5db8b97f85dba4c0d307c137c67fb6b56b36f8b2a7adf327ff226d4", "os": "darwin", "arch": "arm64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg", @@ -24,7 +24,7 @@ }, "darwin-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis", - "sha256": "d4ed12f647c2ce87a266999f73c66a54873eb9bd77f75dc49d5cb4f36f94aff1", + "sha256": "37385c52cb397f60acc699adecb0ffc1843106d50288b1304393daf63083b4b7", "os": "darwin", "arch": "amd64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg", @@ -32,7 +32,7 @@ }, "darwin-universal": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis", - "sha256": "e1dd86693e9b002afa7fa2921010e2d9909b94492dcd0d957165e46304c5bcdb", + "sha256": "ce250733cc7f5ed50b42f5cc106be9872b057966e7a73bcee78974d85748c2fb", "os": "darwin", "arch": "universal", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis.dmg", diff --git a/dist/update.json b/dist/update.json index f7d6f8e..1403363 100644 --- a/dist/update.json +++ b/dist/update.json @@ -1,22 +1,22 @@ { - "version": "2.6.0", - "notes": "Исправление AmneziaWG: ключи в awg://KEY@host, JSON/vpn://, пробелы в полях; без автоподключения по умолчанию", + "version": "2.6.1", + "notes": "AWG: любой hostname Endpoint резолвится в IP до подключения (фикс No such host is known)", "platform": "windows-amd64", "os": "windows", "arch": "amd64", "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "5d7d262c7804779aff8ccc4ef48ed3b280eb460ead3cc95386added909fb3fb2", + "sha256": "08f001a3850ca5bd4f73b7ba4d21e8664ee9fc8120a87877f35d8f20a5ed6993", "mandatory": false, "platforms": { "windows-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "5d7d262c7804779aff8ccc4ef48ed3b280eb460ead3cc95386added909fb3fb2", + "sha256": "08f001a3850ca5bd4f73b7ba4d21e8664ee9fc8120a87877f35d8f20a5ed6993", "os": "windows", "arch": "amd64" }, "darwin-arm64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis", - "sha256": "31ae3cca6cdfd9239b1812251a2c55e7c8ea879ae543020d1ca7f4138585a0b8", + "sha256": "b67e8b3fb5db8b97f85dba4c0d307c137c67fb6b56b36f8b2a7adf327ff226d4", "os": "darwin", "arch": "arm64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg", @@ -24,7 +24,7 @@ }, "darwin-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis", - "sha256": "d4ed12f647c2ce87a266999f73c66a54873eb9bd77f75dc49d5cb4f36f94aff1", + "sha256": "37385c52cb397f60acc699adecb0ffc1843106d50288b1304393daf63083b4b7", "os": "darwin", "arch": "amd64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg", @@ -32,7 +32,7 @@ }, "darwin-universal": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis", - "sha256": "e1dd86693e9b002afa7fa2921010e2d9909b94492dcd0d957165e46304c5bcdb", + "sha256": "ce250733cc7f5ed50b42f5cc106be9872b057966e7a73bcee78974d85748c2fb", "os": "darwin", "arch": "universal", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis.dmg", diff --git a/internal/appui/index.html b/internal/appui/index.html index ab58051..35f83a9 100644 --- a/internal/appui/index.html +++ b/internal/appui/index.html @@ -725,7 +725,7 @@

Navis

- 2.6 + 2.6.1

Быстрый клиент · Naive · Hy2 · AWG · Xray

diff --git a/internal/protocols/awg/conf.go b/internal/protocols/awg/conf.go index f455d5f..3647295 100644 --- a/internal/protocols/awg/conf.go +++ b/internal/protocols/awg/conf.go @@ -1,6 +1,7 @@ package awg import ( + "context" "encoding/base64" "encoding/hex" "encoding/json" @@ -9,6 +10,7 @@ import ( "net/netip" "strconv" "strings" + "time" ) // Conf is a parsed AmneziaWG / WireGuard client configuration (AWG 2.0 fields included). @@ -444,7 +446,117 @@ func HostPort(raw string) (host, port string, err error) { return h, p, nil } +// lookupIP is overridable in tests. +var lookupIP = defaultLookupIP + +func defaultLookupIP(host string) ([]net.IP, error) { + ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second) + defer cancel() + + try := func(r *net.Resolver) ([]net.IP, error) { + addrs, err := r.LookupIPAddr(ctx, host) + if err != nil { + return nil, err + } + out := make([]net.IP, 0, len(addrs)) + for _, a := range addrs { + if a.IP != nil { + out = append(out, a.IP) + } + } + if len(out) == 0 { + return nil, fmt.Errorf("нет IP-адресов") + } + return out, nil + } + + // PreferGo avoids flaky Windows WinDNS "No such host" for some A/AAAA shapes. + if ips, err := try(&net.Resolver{PreferGo: true, Dial: resolverDial}); err == nil { + return ips, nil + } + if ips, err := try(net.DefaultResolver); err == nil { + return ips, nil + } + // Last resort: classic LookupIP (system). + return net.LookupIP(host) +} + +func resolverDial(ctx context.Context, network, _ string) (net.Conn, error) { + d := net.Dialer{Timeout: 3 * time.Second} + var last error + for _, dns := range []string{"1.1.1.1:53", "8.8.8.8:53", "9.9.9.9:53"} { + c, err := d.DialContext(ctx, network, dns) + if err == nil { + return c, nil + } + last = err + } + return nil, last +} + +// ResolveEndpoint turns "hostname:port" into "ip:port" for amneziawg-go IpcSet +// (which fails on bare hostnames with "No such host is known"). Prefers IPv4. +func ResolveEndpoint(endpoint string) (string, error) { + return resolveEndpointWith(endpoint, lookupIP) +} + +// ResolveEndpoint rewrites c.Endpoint to a resolved IP:port (IPv4 preferred). +func (c *Conf) ResolveEndpoint() error { + resolved, err := ResolveEndpoint(c.Endpoint) + if err != nil { + return err + } + c.Endpoint = resolved + return nil +} + +func resolveEndpointWith(endpoint string, lookup func(string) ([]net.IP, error)) (string, error) { + endpoint = strings.TrimSpace(endpoint) + if endpoint == "" { + return "", fmt.Errorf("awg: нет Endpoint") + } + host, port, err := net.SplitHostPort(endpoint) + if err != nil { + host = trimBrackets(endpoint) + port = "51820" + } else { + host = trimBrackets(host) + } + if host == "" { + return "", fmt.Errorf("awg: нет Endpoint") + } + if ip := net.ParseIP(host); ip != nil { + return net.JoinHostPort(ip.String(), port), nil + } + ips, err := lookup(host) + if err != nil { + return "", fmt.Errorf("awg: не удалось разрешить DNS для Endpoint %q: %v", host, err) + } + var v4, v6 net.IP + for _, ip := range ips { + if ip == nil { + continue + } + if ip4 := ip.To4(); ip4 != nil { + v4 = ip4 + break + } + if v6 == nil { + v6 = ip + } + } + chosen := v4 + if chosen == nil { + chosen = v6 + } + if chosen == nil { + return "", fmt.Errorf("awg: не удалось разрешить DNS для Endpoint %q: нет IP-адресов", host) + } + return net.JoinHostPort(chosen.String(), port), nil +} + // ToIPC builds the amneziawg-go UAPI configuration string. +// Endpoint hostnames are resolved to IP first (IPv4 preferred). func (c Conf) ToIPC() (string, error) { priv, err := decodeKey(c.PrivateKey) if err != nil { @@ -454,6 +566,10 @@ func (c Conf) ToIPC() (string, error) { if err != nil { return "", fmt.Errorf("public key: %w", err) } + endpoint, err := ResolveEndpoint(c.Endpoint) + if err != nil { + return "", err + } var b strings.Builder b.WriteString("private_key=") b.WriteString(hex.EncodeToString(priv)) @@ -477,7 +593,7 @@ func (c Conf) ToIPC() (string, error) { b.WriteString("\npublic_key=") b.WriteString(hex.EncodeToString(pub)) b.WriteString("\nendpoint=") - b.WriteString(c.Endpoint) + b.WriteString(endpoint) for _, ip := range c.AllowedIPs { b.WriteString("\nallowed_ip=") b.WriteString(strings.TrimSpace(ip)) diff --git a/internal/protocols/awg/conf_test.go b/internal/protocols/awg/conf_test.go index a5c1202..ad25021 100644 --- a/internal/protocols/awg/conf_test.go +++ b/internal/protocols/awg/conf_test.go @@ -2,6 +2,7 @@ package awg import ( "encoding/base64" + "net" "testing" ) @@ -139,6 +140,81 @@ func TestDecodeKeyURLSafe(t *testing.T) { } } +func TestResolveEndpointPrefersIPv4(t *testing.T) { + got, err := resolveEndpointWith("peer.example:41421", func(host string) ([]net.IP, error) { + if host != "peer.example" { + t.Fatalf("host %q", host) + } + return []net.IP{ + net.ParseIP("2001:db8::1"), + net.ParseIP("203.0.113.44"), + }, nil + }) + if err != nil { + t.Fatal(err) + } + if got != "203.0.113.44:41421" { + t.Fatalf("got %q", got) + } +} + +func TestResolveEndpointAlreadyIP(t *testing.T) { + got, err := resolveEndpointWith("203.0.113.10:51820", func(string) ([]net.IP, error) { + t.Fatal("lookup should not run for IP") + return nil, nil + }) + if err != nil || got != "203.0.113.10:51820" { + t.Fatalf("%q %v", got, err) + } +} + +func TestResolveEndpointDNSError(t *testing.T) { + _, err := resolveEndpointWith("missing.invalid:41421", func(string) ([]net.IP, error) { + return nil, &net.DNSError{Err: "no such host", Name: "missing.invalid", IsNotFound: true} + }) + if err == nil || !stringsContains(err.Error(), "не удалось разрешить DNS") { + t.Fatalf("expected Russian DNS error, got %v", err) + } +} + +func TestToIPCResolvesEndpoint(t *testing.T) { + old := lookupIP + lookupIP = func(host string) ([]net.IP, error) { + return []net.IP{net.ParseIP("198.51.100.9")}, nil + } + defer func() { lookupIP = old }() + + c := Conf{ + PrivateKey: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", + PublicKey: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEE=", + Address: []string{"10.8.0.2/32"}, + Endpoint: "peer.example:41421", + } + ipc, err := c.ToIPC() + if err != nil { + t.Fatal(err) + } + if !stringsContains(ipc, "endpoint=198.51.100.9:41421") { + t.Fatalf("ipc missing resolved endpoint: %s", ipc) + } +} + +func TestConfResolveEndpointMutates(t *testing.T) { + old := lookupIP + lookupIP = func(string) ([]net.IP, error) { + return []net.IP{net.ParseIP("198.51.100.1")}, nil + } + defer func() { lookupIP = old }() + + c := Conf{Endpoint: "host.example:41421"} + if err := c.ResolveEndpoint(); err != nil { + t.Fatal(err) + } + if c.Endpoint != "198.51.100.1:41421" { + t.Fatalf("endpoint %q", c.Endpoint) + } +} + func containsAll(s string, parts ...string) bool { for _, p := range parts { if !stringsContains(s, p) { diff --git a/internal/protocols/awg/engine.go b/internal/protocols/awg/engine.go index afb00dd..12efa94 100644 --- a/internal/protocols/awg/engine.go +++ b/internal/protocols/awg/engine.go @@ -46,6 +46,10 @@ func (e *Engine) Start(ctx context.Context, profile config.Profile, _ string) er if err != nil { return err } + // amneziawg-go IpcSet does not resolve hostnames reliably (Windows WSAHOST_NOT_FOUND). + if err := cfg.ResolveEndpoint(); err != nil { + return err + } ipc, err := cfg.ToIPC() if err != nil { return err diff --git a/internal/update/update.go b/internal/update/update.go index d7c81dc..ad1dd66 100644 --- a/internal/update/update.go +++ b/internal/update/update.go @@ -17,7 +17,7 @@ import ( ) // CurrentVersion is the shipped client version. -const CurrentVersion = "2.6.0" +const CurrentVersion = "2.6.1" // DefaultManifestURL is the update feed (hosted in the project git repo). const DefaultManifestURL = "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/update.json" diff --git a/server/update.json b/server/update.json index f7d6f8e..1403363 100644 --- a/server/update.json +++ b/server/update.json @@ -1,22 +1,22 @@ { - "version": "2.6.0", - "notes": "Исправление AmneziaWG: ключи в awg://KEY@host, JSON/vpn://, пробелы в полях; без автоподключения по умолчанию", + "version": "2.6.1", + "notes": "AWG: любой hostname Endpoint резолвится в IP до подключения (фикс No such host is known)", "platform": "windows-amd64", "os": "windows", "arch": "amd64", "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "5d7d262c7804779aff8ccc4ef48ed3b280eb460ead3cc95386added909fb3fb2", + "sha256": "08f001a3850ca5bd4f73b7ba4d21e8664ee9fc8120a87877f35d8f20a5ed6993", "mandatory": false, "platforms": { "windows-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/Navis.exe", - "sha256": "5d7d262c7804779aff8ccc4ef48ed3b280eb460ead3cc95386added909fb3fb2", + "sha256": "08f001a3850ca5bd4f73b7ba4d21e8664ee9fc8120a87877f35d8f20a5ed6993", "os": "windows", "arch": "amd64" }, "darwin-arm64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis", - "sha256": "31ae3cca6cdfd9239b1812251a2c55e7c8ea879ae543020d1ca7f4138585a0b8", + "sha256": "b67e8b3fb5db8b97f85dba4c0d307c137c67fb6b56b36f8b2a7adf327ff226d4", "os": "darwin", "arch": "arm64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-arm64/Navis.dmg", @@ -24,7 +24,7 @@ }, "darwin-amd64": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis", - "sha256": "d4ed12f647c2ce87a266999f73c66a54873eb9bd77f75dc49d5cb4f36f94aff1", + "sha256": "37385c52cb397f60acc699adecb0ffc1843106d50288b1304393daf63083b4b7", "os": "darwin", "arch": "amd64", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-amd64/Navis.dmg", @@ -32,7 +32,7 @@ }, "darwin-universal": { "url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis", - "sha256": "e1dd86693e9b002afa7fa2921010e2d9909b94492dcd0d957165e46304c5bcdb", + "sha256": "ce250733cc7f5ed50b42f5cc106be9872b057966e7a73bcee78974d85748c2fb", "os": "darwin", "arch": "universal", "dmg_url": "https://git.evilfox.cc/test2/navi/raw/branch/main/dist/navis-release/darwin-universal/Navis.dmg", diff --git a/versioninfo.json b/versioninfo.json index cd6312c..f4a2ba2 100644 --- a/versioninfo.json +++ b/versioninfo.json @@ -1,7 +1,7 @@ { "FixedFileInfo": { - "FileVersion": { "Major": 2, "Minor": 6, "Patch": 0, "Build": 0 }, - "ProductVersion": { "Major": 2, "Minor": 6, "Patch": 0, "Build": 0 }, + "FileVersion": { "Major": 2, "Minor": 6, "Patch": 1, "Build": 0 }, + "ProductVersion": { "Major": 2, "Minor": 6, "Patch": 1, "Build": 0 }, "FileFlagsMask": "3f", "FileFlags": "00", "FileOS": "40004", @@ -11,12 +11,12 @@ "StringFileInfo": { "CompanyName": "EvilFox", "FileDescription": "Navis 2 — VPN client (Naive / Hy2 / AWG / VLESS / VMess / Trojan)", - "FileVersion": "2.6.0.0", + "FileVersion": "2.6.1.0", "InternalName": "Navis", "LegalCopyright": "Copyright (c) EvilFox", "OriginalFilename": "Navis.exe", "ProductName": "Navis", - "ProductVersion": "2.6.0.0", + "ProductVersion": "2.6.1.0", "Comments": "Open-source VPN/proxy client. https://evilfox.win/" }, "VarFileInfo": {