+
+
+ setTemplateType(val)}
+ options={INTERFACE_TYPES}
+ />
+
+
+
+
setTemplateNamePrefix(e.target.value)}
+ placeholder="tunnel"
+ />
+
Будет добавлен перед именем интерфейса
+
+
+
+
setTemplateServer1(val)}
+ servers={servers.filter(s => s.id !== templateServer2 && s.ip !== templateServer2)}
+ placeholder="Выберите первый сервер..."
+ />
+ {templateServer1 && (() => {
+ const server1 = getServerInfo(templateServer1);
+ return server1 ? (
+
+ {server1.dns || server1.ip}
+ {server1.country && ` • ${countryToFlag(server1.country)} ${server1.country}`}
+
+ ) : null;
+ })()}
+
+
+
+
setTemplateServer2(val)}
+ servers={servers.filter(s => s.id !== templateServer1 && s.ip !== templateServer1)}
+ placeholder="Выберите второй сервер..."
+ />
+ {templateServer2 && (() => {
+ const server2 = getServerInfo(templateServer2);
+ return server2 ? (
+
+ {server2.dns || server2.ip}
+ {server2.country && ` • ${countryToFlag(server2.country)} ${server2.country}`}
+
+ ) : null;
+ })()}
+
+ {templateServer1 && templateServer2 && templateServer1 !== templateServer2 && (() => {
+ const server1 = getServerInfo(templateServer1);
+ const server2 = getServerInfo(templateServer2);
+ if (!server1 || !server2) return null;
+
+ const previewName1 = generateInterfaceName(server1, server2, templateType, templateNamePrefix);
+ const previewName2 = generateInterfaceName(server2, server1, templateType, templateNamePrefix);
+ const previewLocalIp = generateFreePrivateIp(null, false, null);
+ const previewRemoteIp = previewLocalIp ? generateFreePrivateIp(null, true, previewLocalIp) : null;
+
+ return (
+
+
+
+
Предпросмотр интерфейса:
+
+
+
Сервер 1 ({server1.dns || server1.ip}):
+
Имя: {previewName1}
+
Local IP: {previewLocalIp || '—'}
+
+
+
Сервер 2 ({server2.dns || server2.ip}):
+
Имя: {previewName2}
+
Local IP: {previewRemoteIp || '—'}
+
+ {previewLocalIp && previewRemoteIp && (
+
+
+ {previewLocalIp} ↔ {previewRemoteIp}
+
+
+ )}
+
+
+
+
+ );
+ })()}
+
+