diff --git a/frontend/src/pages/clients/ClientFormModal.tsx b/frontend/src/pages/clients/ClientFormModal.tsx
index f7b28f42c..3f5912557 100644
--- a/frontend/src/pages/clients/ClientFormModal.tsx
+++ b/frontend/src/pages/clients/ClientFormModal.tsx
@@ -132,6 +132,7 @@ type Values = ClientFormValues & {
wgAllowedIPs: string;
awgAllowedIPs: string;
awgForwardedPorts: string;
+ wgKeepAlive: number;
secret: string;
adTag: string;
};
@@ -168,6 +169,7 @@ const EMPTY: Values = {
wgAllowedIPs: '',
awgAllowedIPs: '',
awgForwardedPorts: '',
+ wgKeepAlive: 25,
secret: '',
adTag: '',
};
@@ -378,6 +380,7 @@ export default function ClientFormModal({
wgAllowedIPs: wgTunnelIPs ?? client.allowedIPs ?? '',
awgAllowedIPs: awgTunnelIPs ?? client.allowedIPs ?? '',
awgForwardedPorts: client.forwardedPorts || '',
+ wgKeepAlive: client.keepAlive ?? 0,
secret: client.secret || '',
adTag: client.adTag || '',
};
@@ -693,6 +696,7 @@ export default function ClientFormModal({
// so both protocols share this one field set — see wgPrivateKey etc.
// below and the AmneziaWG-labeled variants of the same inputs.
clientPayload.privateKey = values.wgPrivateKey;
+ clientPayload.keepAlive = values.wgKeepAlive;
clientPayload.publicKey = values.wgPublicKey;
if (values.wgPreSharedKey) {
clientPayload.preSharedKey = values.wgPreSharedKey;
@@ -1271,6 +1275,13 @@ export default function ClientFormModal({
)}
+
+
+
{showAmneziawg && (