Skip to content

Commit e705871

Browse files
refactor: enhance auto routing logic and update related translations
1 parent 9603e06 commit e705871

7 files changed

Lines changed: 11 additions & 7 deletions

File tree

src/components/inbounds/TunInbound.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,11 @@
158158
const supportsDesc = computed(() => coreSupports('tunDesc'));
159159
160160
const hasAutoRouting = computed(() => (inbound.value.settings?.autoSystemRoutingTable?.length ?? 0) > 0);
161-
const autoRoutingBindsOutbounds = computed(() => hasAutoRouting.value);
161+
const outboundsInterfaceIsAuto = computed(() => {
162+
const iface = inbound.value.settings?.autoOutboundsInterface?.trim();
163+
return !iface || iface === 'auto';
164+
});
165+
const autoRoutingBindsOutbounds = computed(() => hasAutoRouting.value && outboundsInterfaceIsAuto.value);
162166
163167
return {
164168
inbound,

src/modules/TunMigration.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('migrateTunInbound', () => {
1818
expect(settings.address).toBeUndefined();
1919
});
2020

21-
it('drops routes without translating it to autoSystemRoutingTable', () => {
21+
it('drops routes without translating them to autoSystemRoutingTable', () => {
2222
const inbound = legacy({ routes: ['10.0.0.0/8'] });
2323
migrateTunInbound(inbound);
2424

src/translations/cn.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@
561561
"hint_gateway_placeholder": "示例:192.168.10.1/24",
562562
"hint_auto_routing": "Xray-core 添加到**主**系统路由表的目标前缀,使流量被导入此 TUN 接口。每行一个 CIDR:`0.0.0.0/0` 表示所有 IPv4,`::/0` 表示所有 IPv6。<hr/>从 `26.6.27` 版本起由 Xray-core 自身应用。留空时,路由由 XRAYUI 或其他工具管理。<hr/><blockquote>**警告**:此设置还会让 Xray-core 将**所有**出站连接绑定到一个自动挑选的接口;在未保护 Xray 自身上行链路的情况下将 `0.0.0.0/0` 路由进隧道会造成网络环路。**出站接口绑定**应填入真实的 WAN 接口。</blockquote>",
563563
"hint_auto_routing_placeholder": "示例:0.0.0.0/0",
564-
"warn_auto_routing_conflict": "设置此项会让 Xray-core 将它的<b>所有</b>出站连接绑定到它自动挑选的一个物理接口。在接口众多的路由器上,它经常会选错,于是所有出站都会以 <b>no route to host</b> 失败。<b>出站接口绑定</b>中应填入真实的 WAN 接口(例如 <b>eth0</b>),不要留空",
564+
"warn_auto_routing_conflict": "设置此项会让 Xray-core 将它的<b>所有</b>出站连接绑定到它自动挑选的一个物理接口。在接口众多的路由器上,它经常会选错,于是所有出站都会以 <b>no route to host</b> 失败。<b>出站接口绑定</b>中应填入真实的 WAN 接口(例如 <b>eth0</b>),而不是留空或填 <b>auto</b>",
565565
"hint_auto_outbounds_interface": "将 Xray 自身的出站连接绑定到物理接口,使 Xray 产生的流量不会被送回 TUN 接口而形成环路。等同于为所有出站设置 `sockopt.interface`。<hr/>使用 `auto` 让 Xray 自行选择接口,或显式指定接口名称(例如 `eth0`)。留空则禁用。当设置了**自动系统路由**而此项为空时,Xray-core 将其视为 `auto`。",
566566
"hint_auto_outbounds_interface_placeholder": "示例:auto",
567567
"hint_dns": "分配给 TUN 接口的 DNS 服务器,每行一个。<hr/><blockquote>**仅 Windows**:此选项在 Linux 路由器上无效。保留它是为了让与桌面客户端共享的配置保持完整。</blockquote>",

src/translations/de.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,7 @@
643643
"hint_gateway_placeholder": "Beispiel: 192.168.10.1/24",
644644
"hint_auto_routing": "Zielpräfixe, die Xray-core in die **Haupt**-Routingtabelle des Systems einträgt, damit Datenverkehr in diese TUN-Schnittstelle geleitet wird. Ein CIDR pro Zeile: `0.0.0.0/0` für gesamtes IPv4, `::/0` für gesamtes IPv6.<hr/>Wird ab Version `26.6.27` von Xray-core selbst angewendet. Bleibt das Feld leer, verwaltet XRAYUI oder ein anderes Werkzeug das Routing.<hr/><blockquote>**Warnung**: Diese Einstellung bindet zudem **alle** ausgehenden Verbindungen von Xray-core an eine automatisch gewählte Schnittstelle, und `0.0.0.0/0` in den Tunnel zu routen, ohne den eigenen Uplink von Xray zu schützen, verursacht eine Netzwerkschleife. Unter **Ausgehende Schnittstellenbindung** sollte die echte WAN-Schnittstelle stehen.</blockquote>",
645645
"hint_auto_routing_placeholder": "Beispiel: 0.0.0.0/0",
646-
"warn_auto_routing_conflict": "Diese Einstellung bindet <b>alle</b> ausgehenden Verbindungen von Xray-core an eine physische Schnittstelle, die es automatisch auswählt. Auf einem Router mit vielen Schnittstellen wird oft die falsche gewählt, und dann scheitern alle Outbounds mit <b>no route to host</b>. Unter <b>Ausgehende Schnittstellenbindung</b> sollte die echte WAN-Schnittstelle stehen (z. B. <b>eth0</b>), statt das Feld leer zu lassen.",
646+
"warn_auto_routing_conflict": "Diese Einstellung bindet <b>alle</b> ausgehenden Verbindungen von Xray-core an eine physische Schnittstelle, die es automatisch auswählt. Auf einem Router mit vielen Schnittstellen wird oft die falsche gewählt, und dann scheitern alle Outbounds mit <b>no route to host</b>. Unter <b>Ausgehende Schnittstellenbindung</b> sollte die echte WAN-Schnittstelle stehen (z. B. <b>eth0</b>), statt das Feld leer oder auf <b>auto</b> zu lassen.",
647647
"hint_auto_outbounds_interface": "Bindet die ausgehenden Verbindungen von Xray an eine physische Schnittstelle, damit von Xray erzeugter Datenverkehr nicht in die TUN-Schnittstelle zurückgeleitet wird und eine Schleife bildet. Entspricht dem Setzen von `sockopt.interface` für alle Outbounds.<hr/>`auto` lässt Xray die Schnittstelle wählen, alternativ eine Schnittstelle explizit angeben (z. B. `eth0`). Leer lassen zum Deaktivieren. Sind **Automatische Systemrouten** gesetzt und dieses Feld leer, behandelt Xray-core es als `auto`.",
648648
"hint_auto_outbounds_interface_placeholder": "Beispiel: auto",
649649
"hint_dns": "DNS-Server, die der TUN-Schnittstelle zugewiesen werden, einer pro Zeile.<hr/><blockquote>**Nur Windows**: Diese Option hat auf Linux-Routern keine Wirkung. Die Option bleibt erhalten, damit mit Desktop-Clients geteilte Konfigurationen unverändert bleiben.</blockquote>",

src/translations/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@
565565
"hint_gateway_placeholder": "Example: 192.168.10.1/24",
566566
"hint_auto_routing": "Destination prefixes that Xray-core adds to the **main** system routing table so traffic is directed into this TUN interface. One CIDR per line: `0.0.0.0/0` for all IPv4, `::/0` for all IPv6.<hr/>Applied by Xray-core itself from version `26.6.27`. Leaving it empty hands the routing to XRAYUI or another tool.<hr/><blockquote>**Warning**: setting this also makes Xray-core bind **all** of its outbound connections to one automatically chosen interface, and routing `0.0.0.0/0` into the tunnel without protecting Xray's own uplink causes a network loop. **Outbound interface binding** should name the real WAN interface.</blockquote>",
567567
"hint_auto_routing_placeholder": "Example: 0.0.0.0/0",
568-
"warn_auto_routing_conflict": "Setting this makes Xray-core bind <b>all</b> of its outbound connections to one physical interface it picks automatically. On a router with many interfaces it often picks the wrong one and every outbound then fails with <b>no route to host</b>. Set <b>Outbound interface binding</b> to the real WAN interface (e.g. <b>eth0</b>) instead of leaving it empty.",
568+
"warn_auto_routing_conflict": "Setting this makes Xray-core bind <b>all</b> of its outbound connections to one physical interface it picks automatically. On a router with many interfaces it often picks the wrong one, and every outbound then fails with <b>no route to host</b>. <b>Outbound interface binding</b> should name the real WAN interface (e.g. <b>eth0</b>) rather than being left empty or set to <b>auto</b>.",
569569
"hint_auto_outbounds_interface": "Binds Xray's own outbound connections to a physical interface, so traffic Xray generates is not sent back into the TUN interface and looped. Equivalent to setting `sockopt.interface` on every outbound.<hr/>Use `auto` to let Xray pick the interface, or name one explicitly (e.g. `eth0`). Leave empty to disable. When **Auto system routes** is set and this is empty, Xray-core treats it as `auto`.",
570570
"hint_auto_outbounds_interface_placeholder": "Example: auto",
571571
"hint_dns": "DNS servers assigned to the TUN interface, one per line.<hr/><blockquote>**Windows only**: this option has no effect on Linux routers. It is kept here so configs shared with desktop clients stay intact.</blockquote>",

src/translations/ru.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@
565565
"hint_gateway_placeholder": "Пример: 192.168.10.1/24",
566566
"hint_auto_routing": "Префиксы назначения, которые Xray-core добавляет в **основную** системную таблицу маршрутизации, чтобы трафик направлялся в этот TUN-интерфейс. По одному CIDR в строке: `0.0.0.0/0` для всего IPv4, `::/0` для всего IPv6.<hr/>Применяется самим Xray-core начиная с версии `26.6.27`. Если поле оставить пустым, маршрутизацией управляет XRAYUI или другой инструмент.<hr/><blockquote>**Внимание**: эта настройка также заставляет Xray-core привязать **все** исходящие соединения к одному автоматически выбранному интерфейсу, а маршрут `0.0.0.0/0` в туннель без защиты собственного аплинка Xray вызывает сетевую петлю. В поле **Привязка исходящих к интерфейсу** следует указать реальный WAN-интерфейс.</blockquote>",
567567
"hint_auto_routing_placeholder": "Пример: 0.0.0.0/0",
568-
"warn_auto_routing_conflict": "Эта настройка заставляет Xray-core привязать <b>все</b> исходящие соединения к одному физическому интерфейсу, который он выбирает автоматически. На роутере с большим числом интерфейсов он часто выбирает неверный, и тогда все исходящие падают с ошибкой <b>no route to host</b>. Укажите в поле <b>Привязка исходящих к интерфейсу</b> реальный WAN-интерфейс (например <b>eth0</b>), не оставляйте его пустым.",
568+
"warn_auto_routing_conflict": "Эта настройка заставляет Xray-core привязать <b>все</b> исходящие соединения к одному физическому интерфейсу, который он выбирает автоматически. На роутере с большим числом интерфейсов он часто выбирает неверный, и тогда все исходящие падают с ошибкой <b>no route to host</b>. В поле <b>Привязка исходящих к интерфейсу</b> следует указать реальный WAN-интерфейс (например <b>eth0</b>), а не оставлять его пустым или равным <b>auto</b>.",
569569
"hint_auto_outbounds_interface": "Привязывает исходящие соединения самого Xray к физическому интерфейсу, чтобы генерируемый Xray трафик не возвращался в TUN-интерфейс и не образовывал петлю. Эквивалентно установке `sockopt.interface` для всех исходящих.<hr/>Используйте `auto`, чтобы Xray выбрал интерфейс сам, или укажите имя явно (например `eth0`). Оставьте пустым, чтобы отключить. Если заданы **Автоматические системные маршруты**, а это поле пустое, Xray-core считает его равным `auto`.",
570570
"hint_auto_outbounds_interface_placeholder": "Пример: auto",
571571
"hint_dns": "DNS-серверы, назначаемые TUN-интерфейсу, по одному в строке.<hr/><blockquote>**Только Windows**: на Linux-роутерах параметр не действует. Он сохранён, чтобы конфигурации, передаваемые настольным клиентам, оставались целыми.</blockquote>",

src/translations/uk.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@
561561
"hint_gateway_placeholder": "Приклад: 192.168.10.1/24",
562562
"hint_auto_routing": "Префікси призначення, які Xray-core додає до **основної** системної таблиці маршрутизації, щоб трафік спрямовувався в цей TUN-інтерфейс. По одному CIDR у рядку: `0.0.0.0/0` для всього IPv4, `::/0` для всього IPv6.<hr/>Застосовується самим Xray-core починаючи з версії `26.6.27`. Якщо поле залишити порожнім, маршрутизацією керує XRAYUI або інший інструмент.<hr/><blockquote>**Увага**: це налаштування також змушує Xray-core прив'язати **всі** вихідні з'єднання до одного автоматично вибраного інтерфейсу, а маршрут `0.0.0.0/0` у тунель без захисту власного аплінку Xray спричиняє мережеву петлю. У полі **Прив'язка вихідних до інтерфейсу** слід вказати справжній WAN-інтерфейс.</blockquote>",
563563
"hint_auto_routing_placeholder": "Приклад: 0.0.0.0/0",
564-
"warn_auto_routing_conflict": "Це налаштування змушує Xray-core прив'язати <b>всі</b> вихідні з'єднання до одного фізичного інтерфейсу, який він обирає автоматично. На роутері з великою кількістю інтерфейсів він часто обирає хибний, і тоді всі вихідні падають з помилкою <b>no route to host</b>. Вкажіть у полі <b>Прив'язка вихідних до інтерфейсу</b> справжній WAN-інтерфейс (наприклад <b>eth0</b>), не залишайте його порожнім.",
564+
"warn_auto_routing_conflict": "Це налаштування змушує Xray-core прив'язати <b>всі</b> вихідні з'єднання до одного фізичного інтерфейсу, який він обирає автоматично. На роутері з великою кількістю інтерфейсів він часто обирає хибний, і тоді всі вихідні падають з помилкою <b>no route to host</b>. У полі <b>Прив'язка вихідних до інтерфейсу</b> слід вказати справжній WAN-інтерфейс (наприклад <b>eth0</b>), а не залишати його порожнім або рівним <b>auto</b>.",
565565
"hint_auto_outbounds_interface": "Прив'язує вихідні з'єднання самого Xray до фізичного інтерфейсу, щоб згенерований Xray трафік не повертався в TUN-інтерфейс і не утворював петлю. Еквівалентно встановленню `sockopt.interface` для всіх вихідних.<hr/>Використовуйте `auto`, щоб Xray обрав інтерфейс сам, або вкажіть ім'я явно (наприклад `eth0`). Залиште порожнім, щоб вимкнути. Якщо задано **Автоматичні системні маршрути**, а це поле порожнє, Xray-core вважає його рівним `auto`.",
566566
"hint_auto_outbounds_interface_placeholder": "Приклад: auto",
567567
"hint_dns": "DNS-сервери, що призначаються TUN-інтерфейсу, по одному в рядку.<hr/><blockquote>**Лише Windows**: на Linux-роутерах параметр не діє. Його збережено, щоб конфігурації, що передаються настільним клієнтам, залишалися цілими.</blockquote>",

0 commit comments

Comments
 (0)