fix(inbound): explain how to unlock fallbacks on the inbound form (#5014)

The fallbacks card only renders for VLESS/Trojan over RAW with TLS or
Reality security, and a new inbound starts at security=none — so the Add
Inbound page looked like it had lost fallback support entirely. Show an
inline hint in that state pointing at the Security tab.
This commit is contained in:
MHSanaei
2026-06-12 01:21:38 +02:00
parent 0711d3077b
commit a5e5640804
14 changed files with 36 additions and 13 deletions
@@ -2,6 +2,7 @@ import { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { import {
Alert,
Form, Form,
Input, Input,
InputNumber, InputNumber,
@@ -680,6 +681,15 @@ export default function InboundFormModal({
{protocol === Protocols.VLESS && <VlessFields saving={saving} selectedVlessAuth={selectedVlessAuth} network={network} security={security} getNewVlessEnc={getNewVlessEnc} clearVlessEnc={clearVlessEnc} />} {protocol === Protocols.VLESS && <VlessFields saving={saving} selectedVlessAuth={selectedVlessAuth} network={network} security={security} getNewVlessEnc={getNewVlessEnc} clearVlessEnc={clearVlessEnc} />}
{isFallbackHost && fallbacksCard} {isFallbackHost && fallbacksCard}
{(protocol === Protocols.VLESS || protocol === Protocols.TROJAN)
&& network === 'tcp' && !isFallbackHost && (
<Alert
className="mt-12"
type="info"
showIcon
message={t('pages.inbounds.fallbacks.needsTls')}
/>
)}
</> </>
); );
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "تمت إضافة {n} fallback", "quickAdded": "تمت إضافة {n} fallback",
"quickAddedNone": "لا توجد inbounds جديدة مؤهلة للإضافة", "quickAddedNone": "لا توجد inbounds جديدة مؤهلة للإضافة",
"routesWhen": "يوجَّه عندما", "routesWhen": "يوجَّه عندما",
"defaultCatchAll": "افتراضي — يلتقط أي شيء آخر" "defaultCatchAll": "افتراضي — يلتقط أي شيء آخر",
"needsTls": "تصبح الـ Fallbacks متاحة بعد اختيار TLS أو Reality في تبويب الأمان (فقط VLESS/Trojan عبر RAW)."
}, },
"protocol": "بروتوكول", "protocol": "بروتوكول",
"port": "المنفذ", "port": "المنفذ",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "Added {n} fallback(s)", "quickAdded": "Added {n} fallback(s)",
"quickAddedNone": "No new eligible inbounds to add", "quickAddedNone": "No new eligible inbounds to add",
"routesWhen": "Routes when", "routesWhen": "Routes when",
"defaultCatchAll": "Default — catches anything else" "defaultCatchAll": "Default — catches anything else",
"needsTls": "Fallbacks become available once Security is set to TLS or Reality on the Security tab (VLESS/Trojan over RAW only)."
}, },
"protocol": "Protocol", "protocol": "Protocol",
"port": "Port", "port": "Port",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "Se añadieron {n} fallback(s)", "quickAdded": "Se añadieron {n} fallback(s)",
"quickAddedNone": "No hay nuevos inbounds elegibles", "quickAddedNone": "No hay nuevos inbounds elegibles",
"routesWhen": "Enruta cuando", "routesWhen": "Enruta cuando",
"defaultCatchAll": "Por defecto — captura cualquier otra cosa" "defaultCatchAll": "Por defecto — captura cualquier otra cosa",
"needsTls": "Los fallbacks estarán disponibles al seleccionar TLS o Reality en la pestaña de Seguridad (solo VLESS/Trojan sobre RAW)."
}, },
"protocol": "Protocolo", "protocol": "Protocolo",
"port": "Puerto", "port": "Puerto",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "{n} فال‌بک افزوده شد", "quickAdded": "{n} فال‌بک افزوده شد",
"quickAddedNone": "اینباند جدیدی برای افزودن وجود ندارد", "quickAddedNone": "اینباند جدیدی برای افزودن وجود ندارد",
"routesWhen": "هدایت می‌شود وقتی", "routesWhen": "هدایت می‌شود وقتی",
"defaultCatchAll": "پیش‌فرض — همه‌ی موارد دیگر را می‌گیرد" "defaultCatchAll": "پیش‌فرض — همه‌ی موارد دیگر را می‌گیرد",
"needsTls": "فال‌بک‌ها پس از انتخاب TLS یا Reality در برگه‌ی امنیت در دسترس می‌شوند (فقط VLESS/Trojan روی RAW)."
}, },
"protocol": "پروتکل", "protocol": "پروتکل",
"port": "پورت", "port": "پورت",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "Menambahkan {n} fallback", "quickAdded": "Menambahkan {n} fallback",
"quickAddedNone": "Tidak ada inbound baru yang memenuhi syarat", "quickAddedNone": "Tidak ada inbound baru yang memenuhi syarat",
"routesWhen": "Diarahkan ketika", "routesWhen": "Diarahkan ketika",
"defaultCatchAll": "Default — menangkap apa pun lainnya" "defaultCatchAll": "Default — menangkap apa pun lainnya",
"needsTls": "Fallback tersedia setelah memilih TLS atau Reality di tab Keamanan (hanya VLESS/Trojan melalui RAW)."
}, },
"protocol": "Protokol", "protocol": "Protokol",
"port": "Port", "port": "Port",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "{n} 件のフォールバックを追加しました", "quickAdded": "{n} 件のフォールバックを追加しました",
"quickAddedNone": "追加可能な新規インバウンドはありません", "quickAddedNone": "追加可能な新規インバウンドはありません",
"routesWhen": "次の条件でルーティング", "routesWhen": "次の条件でルーティング",
"defaultCatchAll": "デフォルト — その他すべてを捕捉" "defaultCatchAll": "デフォルト — その他すべてを捕捉",
"needsTls": "フォールバックは、セキュリティタブで TLS または Reality を選択すると設定できます(RAW 上の VLESS/Trojan のみ)。"
}, },
"protocol": "プロトコル", "protocol": "プロトコル",
"port": "ポート", "port": "ポート",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "{n} fallback(s) adicionado(s)", "quickAdded": "{n} fallback(s) adicionado(s)",
"quickAddedNone": "Nenhum inbound novo elegível para adicionar", "quickAddedNone": "Nenhum inbound novo elegível para adicionar",
"routesWhen": "Roteia quando", "routesWhen": "Roteia quando",
"defaultCatchAll": "Padrão — captura qualquer outra coisa" "defaultCatchAll": "Padrão — captura qualquer outra coisa",
"needsTls": "Os fallbacks ficam disponíveis após selecionar TLS ou Reality na aba Segurança (apenas VLESS/Trojan sobre RAW)."
}, },
"protocol": "Protocolo", "protocol": "Protocolo",
"port": "Porta", "port": "Porta",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "Добавлено {n} фолбэк(ов)", "quickAdded": "Добавлено {n} фолбэк(ов)",
"quickAddedNone": "Нет новых подходящих инбаундов", "quickAddedNone": "Нет новых подходящих инбаундов",
"routesWhen": "Маршрутизирует, когда", "routesWhen": "Маршрутизирует, когда",
"defaultCatchAll": "По умолчанию — ловит всё остальное" "defaultCatchAll": "По умолчанию — ловит всё остальное",
"needsTls": "Fallbacks станут доступны после выбора TLS или Reality на вкладке «Безопасность» (только VLESS/Trojan поверх RAW)."
}, },
"protocol": "Протокол", "protocol": "Протокол",
"port": "Порт", "port": "Порт",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "{n} fallback eklendi", "quickAdded": "{n} fallback eklendi",
"quickAddedNone": "Eklenecek yeni uygun gelen bağlantı yok", "quickAddedNone": "Eklenecek yeni uygun gelen bağlantı yok",
"routesWhen": "Şu Durumda Yönlendirir", "routesWhen": "Şu Durumda Yönlendirir",
"defaultCatchAll": "Varsayılan — başka her şeyi yakalar" "defaultCatchAll": "Varsayılan — başka her şeyi yakalar",
"needsTls": "Geri düşüşler (fallback), Güvenlik sekmesinde TLS veya Reality seçildiğinde kullanılabilir olur (yalnızca RAW üzerinde VLESS/Trojan)."
}, },
"protocol": "Protokol", "protocol": "Protokol",
"port": "Port", "port": "Port",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "Додано {n} фолбек(ів)", "quickAdded": "Додано {n} фолбек(ів)",
"quickAddedNone": "Немає нових придатних інбаундів", "quickAddedNone": "Немає нових придатних інбаундів",
"routesWhen": "Маршрутизує, коли", "routesWhen": "Маршрутизує, коли",
"defaultCatchAll": "За замовчуванням — ловить усе інше" "defaultCatchAll": "За замовчуванням — ловить усе інше",
"needsTls": "Fallbacks стануть доступні після вибору TLS або Reality на вкладці «Безпека» (лише VLESS/Trojan поверх RAW)."
}, },
"protocol": "Протокол", "protocol": "Протокол",
"port": "Порт", "port": "Порт",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "Đã thêm {n} fallback", "quickAdded": "Đã thêm {n} fallback",
"quickAddedNone": "Không có inbound mới nào đủ điều kiện", "quickAddedNone": "Không có inbound mới nào đủ điều kiện",
"routesWhen": "Định tuyến khi", "routesWhen": "Định tuyến khi",
"defaultCatchAll": "Mặc định — bắt mọi thứ khác" "defaultCatchAll": "Mặc định — bắt mọi thứ khác",
"needsTls": "Fallback khả dụng sau khi chọn TLS hoặc Reality trong thẻ Bảo mật (chỉ VLESS/Trojan trên RAW)."
}, },
"protocol": "Giao thức", "protocol": "Giao thức",
"port": "Cổng", "port": "Cổng",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "已添加 {n} 条回落", "quickAdded": "已添加 {n} 条回落",
"quickAddedNone": "没有可添加的新入站", "quickAddedNone": "没有可添加的新入站",
"routesWhen": "当满足条件时路由", "routesWhen": "当满足条件时路由",
"defaultCatchAll": "默认 — 兜底匹配其他所有" "defaultCatchAll": "默认 — 兜底匹配其他所有",
"needsTls": "在“安全”标签页选择 TLS 或 Reality 后即可配置回落(仅限 RAW 上的 VLESS/Trojan)。"
}, },
"protocol": "协议", "protocol": "协议",
"port": "端口", "port": "端口",
+2 -1
View File
@@ -282,7 +282,8 @@
"quickAdded": "已新增 {n} 個回落", "quickAdded": "已新增 {n} 個回落",
"quickAddedNone": "沒有可新增的新入站", "quickAddedNone": "沒有可新增的新入站",
"routesWhen": "當條件成立時路由", "routesWhen": "當條件成立時路由",
"defaultCatchAll": "預設 — 兜底匹配其餘" "defaultCatchAll": "預設 — 兜底匹配其餘",
"needsTls": "在「安全」分頁選擇 TLS 或 Reality 後即可設定回落(僅限 RAW 上的 VLESS/Trojan)。"
}, },
"protocol": "協議", "protocol": "協議",
"port": "連接埠", "port": "連接埠",