diff --git a/frontend/src/pages/inbounds/form/protocols/hysteria.tsx b/frontend/src/pages/inbounds/form/protocols/hysteria.tsx
index 5a9337789..97845d115 100644
--- a/frontend/src/pages/inbounds/form/protocols/hysteria.tsx
+++ b/frontend/src/pages/inbounds/form/protocols/hysteria.tsx
@@ -19,7 +19,7 @@ export default function HysteriaFields({ form }: { form: FormInstance }) {
label={t('pages.inbounds.form.udpIdleTimeout')}
name={['streamSettings', 'hysteriaSettings', 'udpIdleTimeout']}
>
-
+
diff --git a/frontend/src/pages/xray/outbounds/transport/hysteria.tsx b/frontend/src/pages/xray/outbounds/transport/hysteria.tsx
index 8b45d082a..155a04ccd 100644
--- a/frontend/src/pages/xray/outbounds/transport/hysteria.tsx
+++ b/frontend/src/pages/xray/outbounds/transport/hysteria.tsx
@@ -25,7 +25,7 @@ export default function HysteriaForm({ form }: { form: FormInstance }) {
label={t('pages.inbounds.form.udpIdleTimeout')}
name={['streamSettings', 'hysteriaSettings', 'udpIdleTimeout']}
>
-
+
diff --git a/frontend/src/schemas/protocols/stream/hysteria.ts b/frontend/src/schemas/protocols/stream/hysteria.ts
index c1a6efc6d..23698811c 100644
--- a/frontend/src/schemas/protocols/stream/hysteria.ts
+++ b/frontend/src/schemas/protocols/stream/hysteria.ts
@@ -25,7 +25,8 @@ export type HysteriaMasquerade = z.infer;
export const HysteriaStreamSettingsSchema = z.object({
version: z.literal(2).default(2),
auth: z.string().default(''),
- udpIdleTimeout: z.number().int().min(1).default(60),
+ // Xray-core rejects values outside 2-600 seconds at startup.
+ udpIdleTimeout: z.number().int().min(2).max(600).default(60),
masquerade: HysteriaMasqueradeSchema.optional(),
});
export type HysteriaStreamSettings = z.infer;