Add UI-controlled TProxy bypass for devices
This commit is contained in:
@@ -25,6 +25,10 @@ import {
|
||||
buildSharedProxyInfo,
|
||||
checkSharedProxyGateway,
|
||||
} from "./sharedProxy.js";
|
||||
import {
|
||||
sourceBypassCidrs,
|
||||
syncTproxySourceBypass,
|
||||
} from "./tproxySourceBypass.js";
|
||||
import { matchRoute, detectRuleConflicts } from "./routeMatcher.js";
|
||||
import { tcpPing, resolveHost } from "./ping.js";
|
||||
|
||||
@@ -634,6 +638,7 @@ function publicState() {
|
||||
directBypassCount,
|
||||
directBypassEnabled: DIRECT_BYPASS_CACHE,
|
||||
directBypassAvailable: IPSET_AVAILABLE,
|
||||
sourceBypassCidrs: sourceBypassCidrs(deviceProfiles),
|
||||
...rest,
|
||||
};
|
||||
}
|
||||
@@ -970,6 +975,13 @@ async function handleApi(req, res) {
|
||||
devices: body.devices,
|
||||
};
|
||||
const profiles = writeDeviceProfiles(input);
|
||||
const sourceBypassResult = syncTproxySourceBypass(profiles);
|
||||
if (!sourceBypassResult.success) {
|
||||
pushLog(
|
||||
"warning",
|
||||
`Не удалось применить bypass устройств в iptables: ${sourceBypassResult.error}`,
|
||||
);
|
||||
}
|
||||
const prevState = readJson(settings.statePath, {});
|
||||
const devicesUpdatedAt = new Date().toISOString();
|
||||
writeJson(settings.statePath, {
|
||||
@@ -979,6 +991,8 @@ async function handleApi(req, res) {
|
||||
return sendJson(res, 200, {
|
||||
success: true,
|
||||
...profiles,
|
||||
sourceBypassCidrs: sourceBypassCidrs(profiles),
|
||||
sourceBypassResult,
|
||||
devicesUpdatedAt,
|
||||
});
|
||||
}
|
||||
@@ -1541,6 +1555,14 @@ process.on("SIGINT", async () => {
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
const sourceBypassStartup = syncTproxySourceBypass(readDeviceProfiles());
|
||||
if (!sourceBypassStartup.success) {
|
||||
pushLog(
|
||||
"warning",
|
||||
`Не удалось применить bypass устройств в iptables: ${sourceBypassStartup.error}`,
|
||||
);
|
||||
}
|
||||
|
||||
// При старте пробуем подхватить уже запущенный sing-box
|
||||
const existingPid = readSingboxPid();
|
||||
if (existingPid && isPidAlive(existingPid)) {
|
||||
|
||||
Reference in New Issue
Block a user