From 657f43d0d6b14cfc3bb0fbe2ad074b9bc8b28ac1 Mon Sep 17 00:00:00 2001 From: CthulhuVRN Date: Tue, 17 Feb 2026 11:33:23 +0300 Subject: [PATCH] AmneziaWG 2.0: support for H1-H4 ranges ## Changes: ``` - [+] Added support for H1-H4 ranges - [!] Fixed interface fields order (H1-H4 goes before I1-I5) ``` ## Known issues: ``` - [!] no check for unique/overlap of H1-H4 values on settings apply: settings will be applied but wg interface will crash with "Invalid argument" error ``` --- src/server/utils/WireGuard.ts | 2 +- src/server/utils/types.ts | 34 ++++++++++++++++++++-------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts index b2ec5ffe..1fc56bfe 100644 --- a/src/server/utils/WireGuard.ts +++ b/src/server/utils/WireGuard.ts @@ -213,7 +213,7 @@ class WireGuard { WG_DEBUG('New Wireguard Keys generated successfully.'); } - if (wgInterface.h1 === 0 || wgInterface.h1 === '0') { + if (wgInterface.h1 === '0') { WG_DEBUG('Generating random AmneziaWG obfuscation parameters...'); const headers = new Set(); diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts index 83cd6e39..8b10a794 100644 --- a/src/server/utils/types.ts +++ b/src/server/utils/types.ts @@ -39,23 +39,29 @@ const H_MAX = 2 ** 31 - 1; export const HSchema = z .string() - .transform(v => v.replace(/\s+/g, '')) - .refine(v => { - if (!v) return false; + .transform((v) => v.replace(/\s+/g, '')) + .refine( + (v) => { + if (!v) return false; + + if (!/^\d+(-\d+)?$/.test(v)) return false; + + if (!v.includes('-')) { + const num = Number(v); + return num >= H_MIN && num <= H_MAX; + } - if (!/^\d+(-\d+)?$/.test(v)) return false; + const [min, max] = v.split('-').map(Number); + if ( min && max ) + return min >= H_MIN && max <= H_MAX && min <= max; - if (!v.includes('-')) { - const num = Number(v); - return num >= H_MIN && num <= H_MAX; + return false; + }, + { + message: t('zod.generic.validNumberRange'), } - - const [min, max] = v.split('-').map(Number); - return min >= H_MIN && max <= H_MAX && min <= max; - }, { - message: t('zod.generic.validNumberRange') - }) - .transform(v => { + ) + .transform((v) => { if (!v.includes('-')) return `${Number(v)}`; const [min, max] = v.split('-').map(Number);