新增支持隧道和转发选择出口ip

This commit is contained in:
qaq
2025-08-07 13:50:17 +08:00
parent e158e6a0bc
commit 791cde3eb2
19 changed files with 203 additions and 50 deletions
+1 -1
View File
@@ -4,7 +4,7 @@ export type SiteConfig = typeof siteConfig;
// 缓存相关常量
const CACHE_PREFIX = 'vite_config_';
const VERSION = "1.2.3";
const VERSION = "1.2.4";
// 缓存策略:
// - 长期有效,不设置过期时间
+18
View File
@@ -54,6 +54,7 @@ interface Forward {
inIp: string;
inPort: number;
remoteAddr: string;
interfaceName?: string;
strategy: string;
status: number;
inFlow: number;
@@ -79,6 +80,7 @@ interface ForwardForm {
tunnelId: number | null;
inPort: number | null;
remoteAddr: string;
interfaceName?: string;
strategy: string;
}
@@ -188,6 +190,7 @@ export default function ForwardPage() {
tunnelId: null,
inPort: null,
remoteAddr: '',
interfaceName: '',
strategy: 'fifo'
});
@@ -440,6 +443,7 @@ export default function ForwardPage() {
tunnelId: null,
inPort: null,
remoteAddr: '',
interfaceName: '',
strategy: 'fifo'
});
setSelectedTunnel(null);
@@ -457,6 +461,7 @@ export default function ForwardPage() {
tunnelId: forward.tunnelId,
inPort: forward.inPort,
remoteAddr: forward.remoteAddr.split(',').join('\n'),
interfaceName: forward.interfaceName || '',
strategy: forward.strategy || 'fifo'
});
const tunnel = tunnels.find(t => t.id === forward.tunnelId);
@@ -535,6 +540,7 @@ export default function ForwardPage() {
tunnelId: form.tunnelId,
inPort: form.inPort,
remoteAddr: processedRemoteAddr,
interfaceName: form.interfaceName,
strategy: addressCount > 1 ? form.strategy : 'fifo'
};
res = await updateForward(updateData);
@@ -545,6 +551,7 @@ export default function ForwardPage() {
tunnelId: form.tunnelId,
inPort: form.inPort,
remoteAddr: processedRemoteAddr,
interfaceName: form.interfaceName,
strategy: addressCount > 1 ? form.strategy : 'fifo'
};
res = await createForward(createData);
@@ -1620,6 +1627,17 @@ export default function ForwardPage() {
maxRows={6}
/>
<Input
label="出口网卡名或IP"
placeholder="请输入出口网卡名或IP"
value={form.interfaceName}
onChange={(e) => setForm(prev => ({ ...prev, interfaceName: e.target.value }))}
isInvalid={!!errors.interfaceName}
errorMessage={errors.interfaceName}
variant="bordered"
description="用于多IP服务器指定使用那个IP请求远程地址,不懂的默认为空就行"
/>
{getAddressCount(form.remoteAddr) > 1 && (
<Select
label="负载策略"
+25
View File
@@ -31,6 +31,7 @@ interface Tunnel {
protocol?: string;
tcpListenAddr: string;
udpListenAddr: string;
interfaceName?: string;
flow: number; // 1: 单向, 2: 双向
trafficRatio: number;
status: number;
@@ -52,6 +53,7 @@ interface TunnelForm {
protocol: string;
tcpListenAddr: string;
udpListenAddr: string;
interfaceName?: string;
flow: number;
trafficRatio: number;
status: number;
@@ -100,6 +102,7 @@ export default function TunnelPage() {
protocol: 'tls',
tcpListenAddr: '0.0.0.0',
udpListenAddr: '0.0.0.0',
interfaceName: '',
flow: 1,
trafficRatio: 1.0,
status: 1
@@ -194,6 +197,7 @@ export default function TunnelPage() {
protocol: 'tls',
tcpListenAddr: '0.0.0.0',
udpListenAddr: '0.0.0.0',
interfaceName: '',
flow: 1,
trafficRatio: 1.0,
status: 1
@@ -214,6 +218,7 @@ export default function TunnelPage() {
protocol: tunnel.protocol || 'tls',
tcpListenAddr: tunnel.tcpListenAddr || '0.0.0.0',
udpListenAddr: tunnel.udpListenAddr || '0.0.0.0',
interfaceName: tunnel.interfaceName || '',
flow: tunnel.flow,
trafficRatio: tunnel.trafficRatio,
status: tunnel.status
@@ -751,6 +756,19 @@ export default function TunnelPage() {
/>
</div>
{/* 隧道转发时显示出口网卡配置 */}
{form.type === 2 && (
<Input
label="出口网卡名或IP"
placeholder="请输入出口网卡名或IP"
value={form.interfaceName}
onChange={(e) => setForm(prev => ({ ...prev, interfaceName: e.target.value }))}
isInvalid={!!errors.interfaceName}
errorMessage={errors.interfaceName}
variant="bordered"
/>
)}
{/* 隧道转发时显示出口配置 */}
{form.type === 2 && (
<>
@@ -830,6 +848,13 @@ export default function TunnelPage() {
description="V6或者双栈填写[::],V4填写0.0.0.0。不懂的就去看文档网站内的说明"
className="mt-4"
/>
<Alert
color="primary"
variant="flat"
title="出口网卡名或IP"
description="用于多IP服务器指定使用那个IP和出口服务器通讯,不懂的默认为空就行"
className="mt-4"
/>
</div>
</ModalBody>
<ModalFooter>