@serve.zone/dcrouter 11.23.5 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_serve/bundle.js +1052 -939
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/classes.cert-provision-scheduler.d.ts +6 -8
- package/dist_ts/classes.cert-provision-scheduler.js +37 -17
- package/dist_ts/classes.dcrouter.d.ts +26 -29
- package/dist_ts/classes.dcrouter.js +101 -91
- package/dist_ts/classes.storage-cert-manager.d.ts +3 -6
- package/dist_ts/classes.storage-cert-manager.js +35 -25
- package/dist_ts/config/classes.api-token-manager.d.ts +1 -3
- package/dist_ts/config/classes.api-token-manager.js +45 -15
- package/dist_ts/config/classes.route-config-manager.d.ts +1 -3
- package/dist_ts/config/classes.route-config-manager.js +62 -24
- package/dist_ts/{cache → db}/classes.cache.cleaner.d.ts +3 -3
- package/dist_ts/db/classes.cache.cleaner.js +130 -0
- package/dist_ts/{cache → db}/classes.cached.document.js +1 -1
- package/dist_ts/db/classes.dcrouter-db.d.ts +70 -0
- package/dist_ts/db/classes.dcrouter-db.js +146 -0
- package/dist_ts/db/documents/classes.accounting-session.doc.d.ts +32 -0
- package/dist_ts/db/documents/classes.accounting-session.doc.js +214 -0
- package/dist_ts/db/documents/classes.acme-cert.doc.d.ts +13 -0
- package/dist_ts/db/documents/classes.acme-cert.doc.js +109 -0
- package/dist_ts/db/documents/classes.api-token.doc.d.ts +18 -0
- package/dist_ts/db/documents/classes.api-token.doc.js +127 -0
- package/dist_ts/{cache → db}/documents/classes.cached.email.js +3 -3
- package/dist_ts/{cache → db}/documents/classes.cached.ip.reputation.js +3 -3
- package/dist_ts/db/documents/classes.cert-backoff.doc.d.ts +11 -0
- package/dist_ts/db/documents/classes.cert-backoff.doc.js +97 -0
- package/dist_ts/db/documents/classes.proxy-cert.doc.d.ts +12 -0
- package/dist_ts/db/documents/classes.proxy-cert.doc.js +103 -0
- package/dist_ts/db/documents/classes.remote-ingress-edge.doc.d.ts +17 -0
- package/dist_ts/db/documents/classes.remote-ingress-edge.doc.js +130 -0
- package/dist_ts/db/documents/classes.route-override.doc.d.ts +10 -0
- package/dist_ts/db/documents/classes.route-override.doc.js +91 -0
- package/dist_ts/db/documents/classes.stored-route.doc.d.ts +12 -0
- package/dist_ts/db/documents/classes.stored-route.doc.js +103 -0
- package/dist_ts/db/documents/classes.vlan-mappings.doc.d.ts +15 -0
- package/dist_ts/db/documents/classes.vlan-mappings.doc.js +77 -0
- package/dist_ts/db/documents/classes.vpn-client.doc.d.ts +26 -0
- package/dist_ts/db/documents/classes.vpn-client.doc.js +184 -0
- package/dist_ts/db/documents/classes.vpn-server-keys.doc.d.ts +10 -0
- package/dist_ts/db/documents/classes.vpn-server-keys.doc.js +94 -0
- package/dist_ts/db/documents/index.d.ts +13 -0
- package/dist_ts/db/documents/index.js +20 -0
- package/dist_ts/{cache → db}/index.d.ts +1 -1
- package/dist_ts/db/index.js +9 -0
- package/dist_ts/opsserver/handlers/certificate.handler.js +66 -66
- package/dist_ts/opsserver/handlers/config.handler.js +14 -15
- package/dist_ts/opsserver/handlers/vpn.handler.js +35 -1
- package/dist_ts/paths.d.ts +0 -1
- package/dist_ts/paths.js +1 -2
- package/dist_ts/radius/classes.accounting.manager.d.ts +4 -12
- package/dist_ts/radius/classes.accounting.manager.js +80 -93
- package/dist_ts/radius/classes.radius.server.d.ts +1 -3
- package/dist_ts/radius/classes.radius.server.js +4 -6
- package/dist_ts/radius/classes.vlan.manager.d.ts +3 -7
- package/dist_ts/radius/classes.vlan.manager.js +21 -28
- package/dist_ts/radius/index.d.ts +1 -1
- package/dist_ts/radius/index.js +1 -1
- package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +3 -5
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +41 -21
- package/dist_ts/security/classes.ipreputationchecker.d.ts +6 -21
- package/dist_ts/security/classes.ipreputationchecker.js +59 -138
- package/dist_ts/vpn/classes.vpn-manager.d.ts +37 -22
- package/dist_ts/vpn/classes.vpn-manager.js +161 -51
- package/dist_ts_interfaces/data/vpn.d.ts +8 -0
- package/dist_ts_interfaces/requests/vpn.d.ts +16 -0
- package/dist_ts_oci_container/index.js +4 -4
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/dist_ts_web/appstate.d.ts +16 -0
- package/dist_ts_web/appstate.js +17 -1
- package/dist_ts_web/elements/ops-view-vpn.js +155 -3
- package/package.json +3 -3
- package/readme.storage.md +55 -91
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.cert-provision-scheduler.ts +35 -17
- package/ts/classes.dcrouter.ts +129 -125
- package/ts/classes.storage-cert-manager.ts +34 -22
- package/ts/config/classes.api-token-manager.ts +42 -11
- package/ts/config/classes.route-config-manager.ts +56 -21
- package/ts/{cache → db}/classes.cache.cleaner.ts +6 -6
- package/ts/db/classes.dcrouter-db.ts +179 -0
- package/ts/db/documents/classes.accounting-session.doc.ts +106 -0
- package/ts/db/documents/classes.acme-cert.doc.ts +41 -0
- package/ts/db/documents/classes.api-token.doc.ts +56 -0
- package/ts/{cache → db}/documents/classes.cached.email.ts +2 -2
- package/ts/{cache → db}/documents/classes.cached.ip.reputation.ts +2 -2
- package/ts/db/documents/classes.cert-backoff.doc.ts +35 -0
- package/ts/db/documents/classes.proxy-cert.doc.ts +38 -0
- package/ts/db/documents/classes.remote-ingress-edge.doc.ts +54 -0
- package/ts/db/documents/classes.route-override.doc.ts +32 -0
- package/ts/db/documents/classes.stored-route.doc.ts +38 -0
- package/ts/db/documents/classes.vlan-mappings.doc.ts +32 -0
- package/ts/db/documents/classes.vpn-client.doc.ts +81 -0
- package/ts/db/documents/classes.vpn-server-keys.doc.ts +31 -0
- package/ts/db/documents/index.ts +24 -0
- package/ts/{cache → db}/index.ts +6 -2
- package/ts/opsserver/handlers/certificate.handler.ts +67 -65
- package/ts/opsserver/handlers/config.handler.ts +13 -14
- package/ts/opsserver/handlers/vpn.handler.ts +37 -0
- package/ts/paths.ts +0 -1
- package/ts/radius/classes.accounting.manager.ts +81 -103
- package/ts/radius/classes.radius.server.ts +3 -6
- package/ts/radius/classes.vlan.manager.ts +20 -32
- package/ts/radius/index.ts +1 -1
- package/ts/remoteingress/classes.remoteingress-manager.ts +40 -22
- package/ts/security/classes.ipreputationchecker.ts +103 -196
- package/ts/vpn/classes.vpn-manager.ts +187 -81
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +32 -0
- package/ts_web/elements/ops-view-vpn.ts +153 -2
- package/dist_ts/cache/classes.cache.cleaner.js +0 -130
- package/dist_ts/cache/classes.cachedb.d.ts +0 -60
- package/dist_ts/cache/classes.cachedb.js +0 -126
- package/dist_ts/cache/documents/index.d.ts +0 -2
- package/dist_ts/cache/documents/index.js +0 -3
- package/dist_ts/cache/index.js +0 -7
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
- package/dist_ts/storage/classes.storagemanager.js +0 -348
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
- package/ts/cache/classes.cachedb.ts +0 -155
- package/ts/cache/documents/index.ts +0 -2
- package/ts/storage/classes.storagemanager.ts +0 -404
- package/ts/storage/index.ts +0 -2
- /package/dist_ts/{cache → db}/classes.cached.document.d.ts +0 -0
- /package/dist_ts/{cache → db}/documents/classes.cached.email.d.ts +0 -0
- /package/dist_ts/{cache → db}/documents/classes.cached.ip.reputation.d.ts +0 -0
- /package/ts/{cache → db}/classes.cached.document.ts +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '
|
|
6
|
+
version: '12.1.0',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
|
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
import type { StorageManager } from './storage/index.js';
|
|
2
1
|
/**
|
|
3
2
|
* Manages certificate provisioning scheduling with:
|
|
4
|
-
* - Per-domain exponential backoff persisted
|
|
3
|
+
* - Per-domain exponential backoff persisted via CertBackoffDoc
|
|
5
4
|
*
|
|
6
5
|
* Note: Serial stagger queue was removed — smartacme v9 handles
|
|
7
6
|
* concurrency, per-domain dedup, and rate limiting internally.
|
|
8
7
|
*/
|
|
9
8
|
export declare class CertProvisionScheduler {
|
|
10
|
-
private storageManager;
|
|
11
9
|
private maxBackoffHours;
|
|
12
10
|
private backoffCache;
|
|
13
|
-
constructor(
|
|
11
|
+
constructor(options?: {
|
|
14
12
|
maxBackoffHours?: number;
|
|
15
13
|
});
|
|
16
14
|
/**
|
|
17
|
-
*
|
|
15
|
+
* Sanitized domain key for storage lookups
|
|
18
16
|
*/
|
|
19
|
-
private
|
|
17
|
+
private sanitizeDomain;
|
|
20
18
|
/**
|
|
21
|
-
* Load backoff entry from
|
|
19
|
+
* Load backoff entry from database (with in-memory cache)
|
|
22
20
|
*/
|
|
23
21
|
private loadBackoff;
|
|
24
22
|
/**
|
|
25
|
-
* Save backoff entry to both cache and
|
|
23
|
+
* Save backoff entry to both cache and database
|
|
26
24
|
*/
|
|
27
25
|
private saveBackoff;
|
|
28
26
|
/**
|
|
@@ -1,46 +1,62 @@
|
|
|
1
1
|
import { logger } from './logger.js';
|
|
2
|
+
import { CertBackoffDoc } from './db/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* Manages certificate provisioning scheduling with:
|
|
4
|
-
* - Per-domain exponential backoff persisted
|
|
5
|
+
* - Per-domain exponential backoff persisted via CertBackoffDoc
|
|
5
6
|
*
|
|
6
7
|
* Note: Serial stagger queue was removed — smartacme v9 handles
|
|
7
8
|
* concurrency, per-domain dedup, and rate limiting internally.
|
|
8
9
|
*/
|
|
9
10
|
export class CertProvisionScheduler {
|
|
10
|
-
storageManager;
|
|
11
11
|
maxBackoffHours;
|
|
12
12
|
// In-memory backoff cache (mirrors storage for fast lookups)
|
|
13
13
|
backoffCache = new Map();
|
|
14
|
-
constructor(
|
|
15
|
-
this.storageManager = storageManager;
|
|
14
|
+
constructor(options) {
|
|
16
15
|
this.maxBackoffHours = options?.maxBackoffHours ?? 24;
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
18
|
+
* Sanitized domain key for storage lookups
|
|
20
19
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return `/cert-backoff/${clean}`;
|
|
20
|
+
sanitizeDomain(domain) {
|
|
21
|
+
return domain.replace(/\*/g, '_wildcard_').replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
24
22
|
}
|
|
25
23
|
/**
|
|
26
|
-
* Load backoff entry from
|
|
24
|
+
* Load backoff entry from database (with in-memory cache)
|
|
27
25
|
*/
|
|
28
26
|
async loadBackoff(domain) {
|
|
29
27
|
const cached = this.backoffCache.get(domain);
|
|
30
28
|
if (cached)
|
|
31
29
|
return cached;
|
|
32
|
-
const
|
|
33
|
-
|
|
30
|
+
const sanitized = this.sanitizeDomain(domain);
|
|
31
|
+
const doc = await CertBackoffDoc.findByDomain(sanitized);
|
|
32
|
+
if (doc) {
|
|
33
|
+
const entry = {
|
|
34
|
+
failures: doc.failures,
|
|
35
|
+
lastFailure: doc.lastFailure,
|
|
36
|
+
retryAfter: doc.retryAfter,
|
|
37
|
+
lastError: doc.lastError,
|
|
38
|
+
};
|
|
34
39
|
this.backoffCache.set(domain, entry);
|
|
40
|
+
return entry;
|
|
35
41
|
}
|
|
36
|
-
return
|
|
42
|
+
return null;
|
|
37
43
|
}
|
|
38
44
|
/**
|
|
39
|
-
* Save backoff entry to both cache and
|
|
45
|
+
* Save backoff entry to both cache and database
|
|
40
46
|
*/
|
|
41
47
|
async saveBackoff(domain, entry) {
|
|
42
48
|
this.backoffCache.set(domain, entry);
|
|
43
|
-
|
|
49
|
+
const sanitized = this.sanitizeDomain(domain);
|
|
50
|
+
let doc = await CertBackoffDoc.findByDomain(sanitized);
|
|
51
|
+
if (!doc) {
|
|
52
|
+
doc = new CertBackoffDoc();
|
|
53
|
+
doc.domain = sanitized;
|
|
54
|
+
}
|
|
55
|
+
doc.failures = entry.failures;
|
|
56
|
+
doc.lastFailure = entry.lastFailure;
|
|
57
|
+
doc.retryAfter = entry.retryAfter;
|
|
58
|
+
doc.lastError = entry.lastError || '';
|
|
59
|
+
await doc.save();
|
|
44
60
|
}
|
|
45
61
|
/**
|
|
46
62
|
* Check if a domain is currently in backoff.
|
|
@@ -83,10 +99,14 @@ export class CertProvisionScheduler {
|
|
|
83
99
|
async clearBackoff(domain) {
|
|
84
100
|
this.backoffCache.delete(domain);
|
|
85
101
|
try {
|
|
86
|
-
|
|
102
|
+
const sanitized = this.sanitizeDomain(domain);
|
|
103
|
+
const doc = await CertBackoffDoc.findByDomain(sanitized);
|
|
104
|
+
if (doc) {
|
|
105
|
+
await doc.delete();
|
|
106
|
+
}
|
|
87
107
|
}
|
|
88
108
|
catch {
|
|
89
|
-
// Ignore delete errors (
|
|
109
|
+
// Ignore delete errors (doc may not exist)
|
|
90
110
|
}
|
|
91
111
|
}
|
|
92
112
|
/**
|
|
@@ -115,4 +135,4 @@ export class CertProvisionScheduler {
|
|
|
115
135
|
};
|
|
116
136
|
}
|
|
117
137
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jZXJ0LXByb3Zpc2lvbi1zY2hlZHVsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jbGFzc2VzLmNlcnQtcHJvdmlzaW9uLXNjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTL0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUN6QixlQUFlLENBQVM7SUFFaEMsNkRBQTZEO0lBQ3JELFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUV4RCxZQUNFLE9BQXNDO1FBRXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLE1BQWM7UUFDbkMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksR0FBRyxFQUFFLENBQUM7WUFDUixNQUFNLEtBQUssR0FBa0I7Z0JBQzNCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtn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
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
2
|
import * as paths from './paths.js';
|
|
3
3
|
import { UnifiedEmailServer, type IUnifiedEmailServerOptions, type IEmailRoute } from '@push.rocks/smartmta';
|
|
4
|
-
import { StorageManager, type IStorageConfig } from './storage/index.js';
|
|
5
4
|
import { CertProvisionScheduler } from './classes.cert-provision-scheduler.js';
|
|
6
|
-
import {
|
|
5
|
+
import { DcRouterDb, CacheCleaner } from './db/index.js';
|
|
7
6
|
import { OpsServer } from './opsserver/index.js';
|
|
8
7
|
import { MetricsManager } from './monitoring/index.js';
|
|
9
8
|
import { RadiusServer, type IRadiusServerConfig } from './radius/index.js';
|
|
@@ -94,36 +93,23 @@ export interface IDcRouterOptions {
|
|
|
94
93
|
/** Cloudflare API key for DNS challenges */
|
|
95
94
|
cloudflareApiKey?: string;
|
|
96
95
|
};
|
|
97
|
-
/** Storage configuration */
|
|
98
|
-
storage?: IStorageConfig;
|
|
99
96
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
97
|
+
* Unified database configuration.
|
|
98
|
+
* All persistent data (config, certs, VPN, cache, etc.) is stored via smartdata.
|
|
99
|
+
* If mongoDbUrl is provided, connects to external MongoDB.
|
|
100
|
+
* Otherwise, starts an embedded LocalSmartDb automatically.
|
|
102
101
|
*/
|
|
103
|
-
|
|
104
|
-
/** Enable
|
|
102
|
+
dbConfig?: {
|
|
103
|
+
/** Enable database (default: true). Set to false in tests to skip DB startup. */
|
|
105
104
|
enabled?: boolean;
|
|
106
|
-
/**
|
|
105
|
+
/** External MongoDB connection URL. If absent, uses embedded LocalSmartDb. */
|
|
106
|
+
mongoDbUrl?: string;
|
|
107
|
+
/** Storage path for embedded database data (default: ~/.serve.zone/dcrouter/tsmdb) */
|
|
107
108
|
storagePath?: string;
|
|
108
109
|
/** Database name (default: dcrouter) */
|
|
109
110
|
dbName?: string;
|
|
110
|
-
/**
|
|
111
|
-
defaultTTLDays?: number;
|
|
112
|
-
/** Cleanup interval in hours (default: 1) */
|
|
111
|
+
/** Cache cleanup interval in hours (default: 1) */
|
|
113
112
|
cleanupIntervalHours?: number;
|
|
114
|
-
/** TTL configuration per data type (in days) */
|
|
115
|
-
ttlConfig?: {
|
|
116
|
-
/** Email cache TTL (default: 30 days) */
|
|
117
|
-
emails?: number;
|
|
118
|
-
/** IP reputation cache TTL (default: 1 day) */
|
|
119
|
-
ipReputation?: number;
|
|
120
|
-
/** Bounce records TTL (default: 30 days) */
|
|
121
|
-
bounces?: number;
|
|
122
|
-
/** DKIM keys TTL (default: 90 days) */
|
|
123
|
-
dkimKeys?: number;
|
|
124
|
-
/** Suppression list TTL (default: 30 days, can be permanent) */
|
|
125
|
-
suppression?: number;
|
|
126
|
-
};
|
|
127
113
|
};
|
|
128
114
|
/**
|
|
129
115
|
* RADIUS server configuration for network authentication
|
|
@@ -187,6 +173,17 @@ export interface IDcRouterOptions {
|
|
|
187
173
|
allowList?: string[];
|
|
188
174
|
blockList?: string[];
|
|
189
175
|
};
|
|
176
|
+
/** Forwarding mode: 'socket' (default, userspace NAT), 'bridge' (L2 bridge to host LAN),
|
|
177
|
+
* or 'hybrid' (socket default, bridge for clients with useHostIp=true) */
|
|
178
|
+
forwardingMode?: 'socket' | 'bridge' | 'hybrid';
|
|
179
|
+
/** LAN subnet CIDR for bridge mode (e.g., '192.168.1.0/24') */
|
|
180
|
+
bridgeLanSubnet?: string;
|
|
181
|
+
/** Physical network interface for bridge mode (auto-detected if omitted) */
|
|
182
|
+
bridgePhysicalInterface?: string;
|
|
183
|
+
/** Start of VPN client IP range in LAN subnet (host offset, default: 200) */
|
|
184
|
+
bridgeIpRangeStart?: number;
|
|
185
|
+
/** End of VPN client IP range in LAN subnet (host offset, default: 250) */
|
|
186
|
+
bridgeIpRangeEnd?: number;
|
|
190
187
|
};
|
|
191
188
|
}
|
|
192
189
|
/**
|
|
@@ -210,10 +207,10 @@ export declare class DcRouter {
|
|
|
210
207
|
dnsServer?: plugins.smartdns.dnsServerMod.DnsServer;
|
|
211
208
|
emailServer?: UnifiedEmailServer;
|
|
212
209
|
radiusServer?: RadiusServer;
|
|
213
|
-
storageManager: StorageManager;
|
|
214
210
|
opsServer: OpsServer;
|
|
215
211
|
metricsManager?: MetricsManager;
|
|
216
|
-
|
|
212
|
+
storageManager: any;
|
|
213
|
+
dcRouterDb?: DcRouterDb;
|
|
217
214
|
cacheCleaner?: CacheCleaner;
|
|
218
215
|
remoteIngressManager?: RemoteIngressManager;
|
|
219
216
|
tunnelManager?: TunnelManager;
|
|
@@ -257,9 +254,9 @@ export declare class DcRouter {
|
|
|
257
254
|
*/
|
|
258
255
|
private logStartupSummary;
|
|
259
256
|
/**
|
|
260
|
-
* Set up the
|
|
257
|
+
* Set up the unified database (smartdata + LocalSmartDb or external MongoDB)
|
|
261
258
|
*/
|
|
262
|
-
private
|
|
259
|
+
private setupDcRouterDb;
|
|
263
260
|
/**
|
|
264
261
|
* Set up SmartProxy with direct configuration and automatic email routes
|
|
265
262
|
*/
|