This commit is contained in:
Den Piligrim
2026-03-21 15:16:09 +03:00
parent 29e776a0ec
commit 21e4907aa2
+37 -37
View File
@@ -7,8 +7,8 @@ import * as fs from 'fs';
export class InboundBuilderService {
private flag = process.env.COUNTRY_FLAG ?? '%F0%9F%92%AF';
buildVlessRealityTcp(params: { port: number; uuid: string; domain: string; privateKey: string; publicKey: string }) {
const { port, uuid, domain, privateKey, publicKey } = params;
buildVlessRealityTcp(params: { port: number; uuid: string; sni: string; privateKey: string; publicKey: string }) {
const { port, uuid, sni, privateKey, publicKey } = params;
return {
enable: true,
port,
@@ -27,9 +27,9 @@ export class InboundBuilderService {
realitySettings: {
show: false,
xver: 0,
target: `${domain}:443`,
dest: `${domain}:443`,
serverNames: [domain],
target: `${sni}:443`,
dest: `${sni}:443`,
serverNames: [sni],
privateKey: privateKey,
shortIds: [crypto.randomBytes(4).toString('hex'), crypto.randomBytes(4).toString('hex')],
settings: { publicKey: publicKey, fingerprint: 'random', serverName: '', spiderX: '/' }
@@ -40,8 +40,8 @@ export class InboundBuilderService {
};
}
buildVlessRealityXhttp(params: { port: number; uuid: string; domain: string; privateKey: string; publicKey: string }) {
const { port, uuid, domain, privateKey, publicKey } = params;
buildVlessRealityXhttp(params: { port: number; uuid: string; sni: string; privateKey: string; publicKey: string }) {
const { port, uuid, sni, privateKey, publicKey } = params;
return {
enable: true,
port,
@@ -60,15 +60,15 @@ export class InboundBuilderService {
realitySettings: {
show: false,
xver: 0,
target: `${domain}:443`,
dest: `${domain}:443`,
serverNames: [domain],
target: `${sni}:443`,
dest: `${sni}:443`,
serverNames: [sni],
privateKey: privateKey,
shortIds: [crypto.randomBytes(4).toString('hex'), crypto.randomBytes(4).toString('hex')],
settings: { publicKey: publicKey, fingerprint: 'random', serverName: '', spiderX: '/' }
},
xhttpSettings: {
host: domain,
host: sni,
path: "/",
mode: "auto",
noSSEHeader: false,
@@ -87,8 +87,8 @@ export class InboundBuilderService {
};
}
buildVlessRealityGrpc(params: { port: number; uuid: string; domain: string; privateKey: string; publicKey: string }) {
const { port, uuid, domain, privateKey, publicKey } = params;
buildVlessRealityGrpc(params: { port: number; uuid: string; sni: string; privateKey: string; publicKey: string }) {
const { port, uuid, sni, privateKey, publicKey } = params;
return {
enable: true,
port,
@@ -118,16 +118,16 @@ export class InboundBuilderService {
realitySettings: {
show: false,
xver: 0,
target: `${domain}:443`,
dest: `${domain}:443`,
serverNames: [domain],
target: `${sni}:443`,
dest: `${sni}:443`,
serverNames: [sni],
privateKey: privateKey,
shortIds: [crypto.randomBytes(4).toString('hex')],
settings: { publicKey: publicKey, fingerprint: 'random', serverName: '', spiderX: '/' }
},
grpcSettings: {
serviceName: "myservice",
authority: domain,
authority: sni,
multiMode: false,
}
}),
@@ -266,8 +266,8 @@ export class InboundBuilderService {
};
}
buildTrojanRealityTcp(params: { port: number; uuid: string; domain: string; privateKey: string; publicKey: string }) {
const { port, uuid, domain, privateKey, publicKey } = params;
buildTrojanRealityTcp(params: { port: number; uuid: string; sni: string; privateKey: string; publicKey: string }) {
const { port, uuid, sni, privateKey, publicKey } = params;
return {
enable: true,
port,
@@ -296,9 +296,9 @@ export class InboundBuilderService {
realitySettings: {
show: false,
xver: 0,
target: `${domain}:443`,
dest: `${domain}:443`,
serverNames: [domain],
target: `${sni}:443`,
dest: `${sni}:443`,
serverNames: [sni],
privateKey: privateKey,
shortIds: [
crypto.randomBytes(4).toString("hex"),
@@ -335,29 +335,29 @@ export class InboundBuilderService {
return uuidv4();
}
buildInboundLink(inbound: any, domain: string, idOrPass: string, flagEmoji: string): string {
buildInboundLink(inbound: any, sni: string, idOrPass: string, flagEmoji: string): string {
this.flag = flagEmoji;
let link = "";
switch (inbound.protocol) {
case "vless":
link = this.buildVlessLink(inbound, domain, idOrPass);
link = this.buildVlessLink(inbound, sni, idOrPass);
break;
case "vmess":
link = this.buildVmessLink(inbound, domain, idOrPass);
link = this.buildVmessLink(inbound, sni, idOrPass);
break;
case "shadowsocks":
link = this.buildSsLink(inbound, domain, idOrPass);
link = this.buildSsLink(inbound, sni, idOrPass);
break;
case "trojan":
link = this.buildTrojanLink(inbound, domain, idOrPass);
link = this.buildTrojanLink(inbound, sni, idOrPass);
break;
}
return link;
}
private buildVlessLink(inbound: any, domain: string, uuid: string) {
private buildVlessLink(inbound: any, sni: string, uuid: string) {
const stream = JSON.parse(inbound.streamSettings);
const settings = JSON.parse(inbound.settings);
@@ -408,17 +408,17 @@ export class InboundBuilderService {
}
return (
`vless://${uuid}@${domain}:${inbound.port}` +
`vless://${uuid}@${sni}:${inbound.port}` +
`?${params.toString()}` +
`#${this.flag}%20${encodeURIComponent(inbound.remark)}`
);
}
private buildVmessLink(inbound: any, domain: string, uuid: string) {
private buildVmessLink(inbound: any, sni: string, uuid: string) {
const stream = JSON.parse(inbound.streamSettings);
const vmessObj = {
add: domain,
add: sni,
aid: '0',
alpn: "",
fp: "",
@@ -442,7 +442,7 @@ export class InboundBuilderService {
return `vmess://${base64}`;
}
private buildSsLink(inbound: any, domain: string, idOrPass: string) {
private buildSsLink(inbound: any, sni: string, idOrPass: string) {
const settings = JSON.parse(inbound.settings);
const method = settings.method;
@@ -455,25 +455,25 @@ export class InboundBuilderService {
.from(userInfo, "utf8")
.toString("base64");
return `ss://${base64}@${domain}:${inbound.port}?type=tcp#${this.flag}%20${inbound.remark}`;
return `ss://${base64}@${sni}:${inbound.port}?type=tcp#${this.flag}%20${inbound.remark}`;
}
private buildTrojanLink(inbound: any, domain: string, password: string) {
private buildTrojanLink(inbound: any, sni: string, password: string) {
const stream = JSON.parse(inbound.streamSettings);
const reality = stream.realitySettings;
const pbk = reality.settings.publicKey;
const sni = reality.serverNames?.[0] || domain;
const SNI = reality.serverNames?.[0] || sni;
const sid = reality.shortIds?.[0] || "";
const spx = '%2F';
return (
`trojan://${password}@${domain}:${inbound.port}` +
`trojan://${password}@${SNI}:${inbound.port}` +
`?type=tcp` +
`&security=reality` +
`&pbk=${pbk}` +
`&fp=random` +
`&sni=${sni}` +
`&sni=${SNI}` +
`&sid=${sid}` +
`&spx=${spx}` +
`#${this.flag}%20${inbound.remark}`