update
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* NfTablesProxy implementation
|
||||
*/
|
||||
// Core NfTablesProxy will be added later:
|
||||
// export { NfTablesProxy } from './nftables-proxy.js';
|
||||
export * from './nftables-proxy.js';
|
||||
export * from './models/index.js';
|
||||
|
30
ts/proxies/nftables-proxy/models/errors.ts
Normal file
30
ts/proxies/nftables-proxy/models/errors.ts
Normal file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Custom error classes for better error handling
|
||||
*/
|
||||
export class NftBaseError extends Error {
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
this.name = 'NftBaseError';
|
||||
}
|
||||
}
|
||||
|
||||
export class NftValidationError extends NftBaseError {
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
this.name = 'NftValidationError';
|
||||
}
|
||||
}
|
||||
|
||||
export class NftExecutionError extends NftBaseError {
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
this.name = 'NftExecutionError';
|
||||
}
|
||||
}
|
||||
|
||||
export class NftResourceError extends NftBaseError {
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
this.name = 'NftResourceError';
|
||||
}
|
||||
}
|
5
ts/proxies/nftables-proxy/models/index.ts
Normal file
5
ts/proxies/nftables-proxy/models/index.ts
Normal file
@ -0,0 +1,5 @@
|
||||
/**
|
||||
* Export all models
|
||||
*/
|
||||
export * from './interfaces.js';
|
||||
export * from './errors.js';
|
94
ts/proxies/nftables-proxy/models/interfaces.ts
Normal file
94
ts/proxies/nftables-proxy/models/interfaces.ts
Normal file
@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Interfaces for NfTablesProxy
|
||||
*/
|
||||
|
||||
/**
|
||||
* Represents a port range for forwarding
|
||||
*/
|
||||
export interface PortRange {
|
||||
from: number;
|
||||
to: number;
|
||||
}
|
||||
|
||||
// Legacy interface name for backward compatibility
|
||||
export type IPortRange = PortRange;
|
||||
|
||||
/**
|
||||
* Settings for NfTablesProxy.
|
||||
*/
|
||||
export interface NfTableProxyOptions {
|
||||
// Basic settings
|
||||
fromPort: number | PortRange | Array<number | PortRange>; // Support single port, port range, or multiple ports/ranges
|
||||
toPort: number | PortRange | Array<number | PortRange>;
|
||||
toHost?: string; // Target host for proxying; defaults to 'localhost'
|
||||
|
||||
// Advanced settings
|
||||
preserveSourceIP?: boolean; // If true, the original source IP is preserved
|
||||
deleteOnExit?: boolean; // If true, clean up rules before process exit
|
||||
protocol?: 'tcp' | 'udp' | 'all'; // Protocol to forward, defaults to 'tcp'
|
||||
enableLogging?: boolean; // Enable detailed logging
|
||||
ipv6Support?: boolean; // Enable IPv6 support
|
||||
logFormat?: 'plain' | 'json'; // Format for logs
|
||||
|
||||
// Source filtering
|
||||
allowedSourceIPs?: string[]; // If provided, only these IPs are allowed
|
||||
bannedSourceIPs?: string[]; // If provided, these IPs are blocked
|
||||
useIPSets?: boolean; // Use nftables sets for efficient IP management
|
||||
|
||||
// Rule management
|
||||
forceCleanSlate?: boolean; // Clear all NfTablesProxy rules before starting
|
||||
tableName?: string; // Custom table name (defaults to 'portproxy')
|
||||
|
||||
// Connection management
|
||||
maxRetries?: number; // Maximum number of retries for failed commands
|
||||
retryDelayMs?: number; // Delay between retries in milliseconds
|
||||
useAdvancedNAT?: boolean; // Use connection tracking for stateful NAT
|
||||
|
||||
// Quality of Service
|
||||
qos?: {
|
||||
enabled: boolean;
|
||||
maxRate?: string; // e.g. "10mbps"
|
||||
priority?: number; // 1 (highest) to 10 (lowest)
|
||||
markConnections?: boolean; // Mark connections for easier management
|
||||
};
|
||||
|
||||
// Integration with PortProxy/NetworkProxy
|
||||
netProxyIntegration?: {
|
||||
enabled: boolean;
|
||||
redirectLocalhost?: boolean; // Redirect localhost traffic to NetworkProxy
|
||||
sslTerminationPort?: number; // Port where NetworkProxy handles SSL termination
|
||||
};
|
||||
}
|
||||
|
||||
// Legacy interface name for backward compatibility
|
||||
export type INfTableProxySettings = NfTableProxyOptions;
|
||||
|
||||
/**
|
||||
* Interface for status reporting
|
||||
*/
|
||||
export interface NfTablesStatus {
|
||||
active: boolean;
|
||||
ruleCount: {
|
||||
total: number;
|
||||
added: number;
|
||||
verified: number;
|
||||
};
|
||||
tablesConfigured: { family: string; tableName: string }[];
|
||||
metrics: {
|
||||
forwardedConnections?: number;
|
||||
activeConnections?: number;
|
||||
bytesForwarded?: {
|
||||
sent: number;
|
||||
received: number;
|
||||
};
|
||||
};
|
||||
qosEnabled?: boolean;
|
||||
ipSetsConfigured?: {
|
||||
name: string;
|
||||
elementCount: number;
|
||||
type: string;
|
||||
}[];
|
||||
}
|
||||
|
||||
// Legacy interface name for backward compatibility
|
||||
export type INfTablesStatus = NfTablesStatus;
|
1943
ts/proxies/nftables-proxy/nftables-proxy.ts
Normal file
1943
ts/proxies/nftables-proxy/nftables-proxy.ts
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user