diff --git a/frontend/public/openapi.json b/frontend/public/openapi.json index a37fd5f80..cbfb73d07 100644 --- a/frontend/public/openapi.json +++ b/frontend/public/openapi.json @@ -2821,6 +2821,15 @@ "i1": { "type": "string" }, + "ipv6Enabled": { + "type": "boolean" + }, + "ipv6ExternalInterface": { + "type": "string" + }, + "ipv6Subnet": { + "type": "string" + }, "jc": { "description": "Obfuscation20's fields, repeated flat (not embedded) rather than\nnested under their own key: encoding/json would happily inline an\nembedded Obfuscation20 the same way, but the frontend's Go->Zod/TS\ngenerator (tools/openapigen) does not — it emits a genuinely nested\n`obfuscation20` object, which would silently diverge from the real\nwire JSON. See Obfuscation() below for the manager-facing conversion.", "type": "integer" diff --git a/frontend/src/generated/examples.ts b/frontend/src/generated/examples.ts index 8030a06d4..5b00bb56c 100644 --- a/frontend/src/generated/examples.ts +++ b/frontend/src/generated/examples.ts @@ -654,6 +654,9 @@ export const EXAMPLES: Record = { "h3": "", "h4": "", "i1": "", + "ipv6Enabled": false, + "ipv6ExternalInterface": "", + "ipv6Subnet": "", "jc": 0, "jmax": 0, "jmin": 0, diff --git a/frontend/src/generated/schemas.ts b/frontend/src/generated/schemas.ts index 510ee0a98..db99dc1df 100644 --- a/frontend/src/generated/schemas.ts +++ b/frontend/src/generated/schemas.ts @@ -2795,6 +2795,16 @@ export const SCHEMAS: Record = { "i1": { "type": "string" }, + "ipv6Enabled": { + "description": "IPv6Enabled turns on native IPv6 for clients: an IPv6 host address is\nallocated from IPv6Subnet alongside each client's IPv4 one, and the\nserver proxies NDP for each enabled client's address so upstream\nrouters see it as directly reachable (no NAT66). IPv6ExternalInterface\noverrides ExternalInterface for the NDP-proxy PostUp/PostDown entries\nspecifically; empty reuses ExternalInterface.", + "type": "boolean" + }, + "ipv6ExternalInterface": { + "type": "string" + }, + "ipv6Subnet": { + "type": "string" + }, "jc": { "description": "Obfuscation20's fields, repeated flat (not embedded) rather than\nnested under their own key: encoding/json would happily inline an\nembedded Obfuscation20 the same way, but the frontend's Go-\u003eZod/TS\ngenerator (tools/openapigen) does not — it emits a genuinely nested\n`obfuscation20` object, which would silently diverge from the real\nwire JSON. See Obfuscation() below for the manager-facing conversion.", "type": "integer" diff --git a/frontend/src/generated/types.ts b/frontend/src/generated/types.ts index 9717ec53a..249564095 100644 --- a/frontend/src/generated/types.ts +++ b/frontend/src/generated/types.ts @@ -637,6 +637,9 @@ export interface ServerSettings { h3: string; h4: string; i1?: string; + ipv6Enabled?: boolean; + ipv6ExternalInterface?: string; + ipv6Subnet?: string; jc: number; jmax: number; jmin: number; diff --git a/frontend/src/generated/zod.ts b/frontend/src/generated/zod.ts index 35b602a85..827c8f961 100644 --- a/frontend/src/generated/zod.ts +++ b/frontend/src/generated/zod.ts @@ -676,6 +676,9 @@ export const ServerSettingsSchema = z.object({ h3: z.string(), h4: z.string(), i1: z.string().optional(), + ipv6Enabled: z.boolean().optional(), + ipv6ExternalInterface: z.string().optional(), + ipv6Subnet: z.string().optional(), jc: z.number().int(), jmax: z.number().int(), jmin: z.number().int(), diff --git a/frontend/src/pages/inbounds/form/protocols/amneziawg.tsx b/frontend/src/pages/inbounds/form/protocols/amneziawg.tsx index b0481e8cf..76da588e6 100644 --- a/frontend/src/pages/inbounds/form/protocols/amneziawg.tsx +++ b/frontend/src/pages/inbounds/form/protocols/amneziawg.tsx @@ -1,5 +1,5 @@ import { useTranslation } from 'react-i18next'; -import { Button, Form, Input, InputNumber, Space } from 'antd'; +import { Button, Form, Input, InputNumber, Space, Switch } from 'antd'; import { ReloadOutlined } from '@ant-design/icons'; import { FormField } from '@/components/form/rhf'; @@ -47,6 +47,27 @@ export default function AmneziawgFields({ awgPubKey, regenInboundAwg, regenInbou > + + + + + + + + +