默认入站:显示可选出站,并给一条转成命名入站的路
上一版把默认入站的整个出站块都藏了,结果策略组也看不见。改成只藏 RULE/DIRECT/GLOBAL 那三张卡(它固定是 RULE),策略组和线路照常列出来当上下文,只是不可点。 顺带修一个显示错误:老式顶层端口没有 listen 字段,实际地址是内核从 allow-lan 和 bind-address 推出来的(listener/listener.go:709-718)——allow-lan 关着时绑的是 127.0.0.1,而界面一律显示 0.0.0.0,会让人以为局域网连得上。 转换时会把老式端口字段删掉并把推导出的地址显式写进 listen:不删会导致同一个端口被声明 两次内核起不来,不写 listen 则以后改 allow-lan 会连带影响这个端口。
This commit is contained in:
+18
-1
@@ -74,8 +74,25 @@ export function outboundToProxyField(mode: OutboundMode): string | undefined {
|
||||
return mode.name
|
||||
}
|
||||
|
||||
/**
|
||||
* 老式顶层端口实际绑在哪个地址上。
|
||||
*
|
||||
* 它没有自己的 listen 字段,地址是内核从两个全局开关推出来的
|
||||
* (内核源码 `listener/listener.go:709-718`):
|
||||
* allow-lan 关 → 127.0.0.1,只有本机连得上
|
||||
* allow-lan 开 → bind-address 指定的地址,写 * 或没写就是所有网卡
|
||||
* 界面上不能一律显示 0.0.0.0,那会让人以为局域网连得上而实际连不上。
|
||||
*/
|
||||
export function legacyListenAddress(data: ConfigObject): string {
|
||||
if (data['allow-lan'] !== true) return '127.0.0.1'
|
||||
const bind = data['bind-address']
|
||||
if (typeof bind !== 'string' || bind === '' || bind === '*') return '0.0.0.0'
|
||||
return bind
|
||||
}
|
||||
|
||||
export function collectInbounds(data: ConfigObject): Inbound[] {
|
||||
const result: Inbound[] = []
|
||||
const legacyListen = legacyListenAddress(data)
|
||||
|
||||
for (const { key, type } of LEGACY_PORTS) {
|
||||
const raw = data[key]
|
||||
@@ -89,7 +106,7 @@ export function collectInbounds(data: ConfigObject): Inbound[] {
|
||||
name: key,
|
||||
type,
|
||||
port: String(port),
|
||||
listen: null,
|
||||
listen: legacyListen,
|
||||
outbound: { kind: 'rules' },
|
||||
ruleSet: null,
|
||||
isDefault: true,
|
||||
|
||||
Reference in New Issue
Block a user