diff --git a/frontend/src/MikrotikTools.jsx b/frontend/src/MikrotikTools.jsx
index 697d1ce..8858104 100644
--- a/frontend/src/MikrotikTools.jsx
+++ b/frontend/src/MikrotikTools.jsx
@@ -287,6 +287,72 @@ function MikrotikTools() {
Привязка к gateway / интерфейсу (опционально)
+ {/* Карточки gateways выбранного сервера */}
+ {serverId && gateways.length > 0 && (
+
+
+ {gateways
+ .filter((g) => {
+ if (!g || !g.ip) return false;
+ if (!serverId) return false;
+ if (!currentServer) return g.serverId === serverId;
+ const serverIds = new Set([
+ serverId,
+ currentServer.id,
+ currentServer.ip,
+ currentServer.dns,
+ ].filter(Boolean).map(String));
+ return serverIds.has(String(g.serverId));
+ })
+ .map((g) => {
+ const isSelected = gatewayRef === g.ip || gatewayRef === g.id;
+ const flag = g.country ? countryToFlag(g.country) : '';
+ const subtitle = [g.description, g.provider].filter(Boolean).join(' · ');
+ return (
+
+
{
+ const next = isSelected ? '' : (g.ip || g.id);
+ setGatewayRef(next);
+ if (!next) {
+ setGatewayMeta(null);
+ } else {
+ setGatewayMeta({ ip: g.ip, gateway: g });
+ if (!target && g.ip) setTarget(g.ip);
+ }
+ }}
+ >
+
+
+ {flag || (g.ip ? g.ip.split('.').slice(-1)[0] : '?')}
+
+
+
+ {g.ip || '—'}
+
+ {g.description && (
+
+ {g.description}
+
+ )}
+ {subtitle && (
+
+ {subtitle}
+
+ )}
+
+
+
+
+ );
+ })}
+
+
+ )}
+ {/* Расширенный выбор по IP/интерфейсу */}
- Можно привязать трассировку к конкретному прямому gateway или туннельному интерфейсу.
+ Можно выбрать gateway карточкой выше или через поиск по IP/интерфейсу.
@@ -340,6 +406,25 @@ function MikrotikTools() {
onChange={(e) => setMaxHops(e.target.value)}
/>
+
+
+
Формат адресов в результатах
+
+ setUseDns(e.target.checked)}
+ />
+
+ {useDns ? 'DNS + IP (если доступны)' : 'Только IP адреса'}
+
+
+
+ Этот параметр также передаётся на MikroTik как use-dns.
+
+
>
)}
@@ -368,24 +453,7 @@ function MikrotikTools() {
-
-
Результаты трассировки
-
-
Отображать
-
- setUseDns(e.target.checked)}
- />
-
- {useDns ? 'DNS + IP' : 'только IP'}
-
-
-
-
+
Результаты трассировки
{hops.length === 0 ? (