"use client" import { useEffect, useMemo, useState } from "react" import { FormField, FormToggle, SectionTitle } from "@/components/form-kit" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter, SheetClose, } from "@/components/ui/sheet" import { Alert, AlertDescription, AlertTitle } from "@/components/reui/alert" import { InfoIcon } from "lucide-react" export type IpsecInitFormState = { serverId: string serverEndpoint: string poolCidr: string dns: string createNatRule: boolean } export const defaultIpsecInitForm = (): IpsecInitFormState => ({ serverId: "", serverEndpoint: "", poolCidr: "10.77.0.0/24", dns: "", createNatRule: true, }) type ServerOption = { id: string; name: string; host: string } function IpsecInitSheet({ open, onOpenChange, servers, busy, defaultServerId, onSubmit, }: { open: boolean onOpenChange: (v: boolean) => void servers: ServerOption[] busy?: boolean defaultServerId?: string onSubmit: (form: IpsecInitFormState) => void | Promise }) { const [form, setForm] = useState(defaultIpsecInitForm) const set = (k: K, v: IpsecInitFormState[K]) => setForm((f) => ({ ...f, [k]: v })) useEffect(() => { if (!open) return const server = servers.find((s) => s.id === (defaultServerId ?? "")) queueMicrotask(() => setForm({ ...defaultIpsecInitForm(), serverId: defaultServerId ?? "", serverEndpoint: server?.host ?? "", })) }, [open, defaultServerId, servers]) const canSubmit = useMemo(() => { return Boolean( form.serverId && form.serverEndpoint.trim() && /^(\d{1,3}(?:\.\d{1,3}){3}\/\d{1,2}|[\w.-]+\.[a-z]{2,})$/i.test(form.serverEndpoint.trim()) && /^\d{1,3}(?:\.\d{1,3}){3}\/\d{1,2}$/.test(form.poolCidr.trim()), ) }, [form]) return ( Инициализация IKEv2-сервера CA + серверный сертификат, peer (ike2/passive), пул адресов и mode-config
Выпуск CA и сертификатов занимает до минуты Повторный запуск безопасен: существующие managed-объекты обновятся, сертификаты не перевыпускаются.
Основные set("serverEndpoint", e.target.value)} /> set("poolCidr", e.target.value)} /> set("dns", e.target.value)} />

Интернет клиентам (NAT)

Managed srcnat masquerade для подсети клиентов (out-interface-list WAN)

set("createNatRule", v)} />
}> Отмена
) } export { IpsecInitSheet }