feat(NetworkConfigManager): implement PTR zone replacement functionality, allowing dynamic DNS adjustments for improved server configuration and user experience
Publish Fast Tabler Docker image / build-and-push-fast (push) Has been cancelled
Publish Fast Tabler Docker image / build-and-push-fast (push) Has been cancelled
This commit is contained in:
@@ -146,6 +146,8 @@ const getEmptyInterface = () => ({
|
||||
ipsecPasswordId: '', // ID IPSec пароля (опционально, только для IPSec)
|
||||
ipPoolId: '', // ID IP пула для выбора IP адресов (опционально)
|
||||
mtu: '', // MTU (опционально)
|
||||
ptrZoneReplaceFrom: '', // Что заменить в DNS домене для PTR зоны (например, "rt.shx")
|
||||
ptrZoneReplaceTo: '', // На что заменить (например, "shrt")
|
||||
});
|
||||
|
||||
const getEmptyIpPool = () => ({
|
||||
@@ -1480,6 +1482,18 @@ function NetworkConfigManager() {
|
||||
}
|
||||
};
|
||||
|
||||
// Функция для генерации PTR зоны с учетом замены
|
||||
const generatePtrZone = (serverDns, iface) => {
|
||||
if (!serverDns) return '—';
|
||||
|
||||
// Если указана замена PTR зоны, применяем её
|
||||
if (iface?.ptrZoneReplaceFrom && iface?.ptrZoneReplaceTo) {
|
||||
return serverDns.replace(iface.ptrZoneReplaceFrom, iface.ptrZoneReplaceTo);
|
||||
}
|
||||
|
||||
return serverDns;
|
||||
};
|
||||
|
||||
// === Получение реестра всех используемых IP адресов ===
|
||||
const ipRegistry = useMemo(() => {
|
||||
const registry = [];
|
||||
@@ -1495,7 +1509,7 @@ function NetworkConfigManager() {
|
||||
interfaceName: iface.name || iface.id,
|
||||
server: server, // localIp привязан к serverId
|
||||
serverName: server?.dns || server?.ip || iface.serverId || '—',
|
||||
ptrZone: server?.dns || '—' // PTR зона = доменное имя сервера
|
||||
ptrZone: generatePtrZone(server?.dns, iface) // PTR зона с учетом замены
|
||||
});
|
||||
}
|
||||
if (iface.remoteIp && iface.remoteIp.trim()) {
|
||||
@@ -1507,7 +1521,7 @@ function NetworkConfigManager() {
|
||||
interfaceName: iface.name || iface.id,
|
||||
server: server2, // remoteIp привязан к serverId2
|
||||
serverName: server2?.dns || server2?.ip || iface.serverId2 || '—',
|
||||
ptrZone: server2?.dns || '—' // PTR зона = доменное имя сервера
|
||||
ptrZone: generatePtrZone(server2?.dns, iface) // PTR зона с учетом замены
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -4228,6 +4242,59 @@ function NetworkConfigManager() {
|
||||
</div>
|
||||
) : null;
|
||||
})()}
|
||||
|
||||
{/* Поля для замены PTR зоны */}
|
||||
<div className="col-12">
|
||||
<hr />
|
||||
<h6 className="mb-3">Настройка PTR зоны</h6>
|
||||
<div className="row g-3">
|
||||
<div className="col-md-6">
|
||||
<FormField
|
||||
label="Заменить в DNS домене"
|
||||
name="ptrZoneReplaceFrom"
|
||||
value={editingInterface.ptrZoneReplaceFrom || ''}
|
||||
onChange={(val) => setEditingInterface({ ...editingInterface, ptrZoneReplaceFrom: val })}
|
||||
placeholder="rt.shx"
|
||||
/>
|
||||
<div className="form-text">
|
||||
Часть DNS домена, которую нужно заменить (например, "rt.shx")
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-md-6">
|
||||
<FormField
|
||||
label="Заменить на"
|
||||
name="ptrZoneReplaceTo"
|
||||
value={editingInterface.ptrZoneReplaceTo || ''}
|
||||
onChange={(val) => setEditingInterface({ ...editingInterface, ptrZoneReplaceTo: val })}
|
||||
placeholder="shrt"
|
||||
/>
|
||||
<div className="form-text">
|
||||
На что заменить (например, "shrt"). Результат: DNS "selectel.msk.rt.shx.su" → PTR "selectel.msk.shrt.su"
|
||||
</div>
|
||||
</div>
|
||||
{editingInterface.serverId && editingInterface.ptrZoneReplaceFrom && editingInterface.ptrZoneReplaceTo && (() => {
|
||||
const server = getServerInfo(editingInterface.serverId);
|
||||
const originalDns = server?.dns || '';
|
||||
const ptrZone = generatePtrZone(originalDns, editingInterface);
|
||||
return originalDns ? (
|
||||
<div className="col-12">
|
||||
<div className="card card-sm border-info">
|
||||
<div className="card-body p-2">
|
||||
<div className="small">
|
||||
<div className="mb-1">
|
||||
<strong>DNS:</strong> <code>{originalDns}</code>
|
||||
</div>
|
||||
<div>
|
||||
<strong>PTR зона:</strong> <code className="text-info">{ptrZone}</code>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : null;
|
||||
})()}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</FormModal>
|
||||
|
||||
Reference in New Issue
Block a user