add route-exclude-address setting (#319)

This commit is contained in:
yyhhyy 2024-11-07 20:23:36 +08:00 committed by GitHub
parent 700c5d26b9
commit c0d3adfe21
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 1 deletions

View File

@ -63,6 +63,7 @@ export const defaultControledMihomoConfig: Partial<IMihomoConfig> = {
'auto-redirect': false, 'auto-redirect': false,
'auto-detect-interface': true, 'auto-detect-interface': true,
'dns-hijack': ['any:53'], 'dns-hijack': ['any:53'],
'route-exclude-address': [],
mtu: 1500 mtu: 1500
}, },
dns: { dns: {

View File

@ -8,6 +8,7 @@ import { platform } from '@renderer/utils/init'
import React, { Key, useState } from 'react' import React, { Key, useState } from 'react'
import BasePasswordModal from '@renderer/components/base/base-password-modal' import BasePasswordModal from '@renderer/components/base/base-password-modal'
import { useAppConfig } from '@renderer/hooks/use-app-config' import { useAppConfig } from '@renderer/hooks/use-app-config'
import { MdDeleteForever } from 'react-icons/md'
const Tun: React.FC = () => { const Tun: React.FC = () => {
const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig() const { controledMihomoConfig, patchControledMihomoConfig } = useControledMihomoConfig()
@ -23,6 +24,7 @@ const Tun: React.FC = () => {
'auto-redirect': autoRedirect = false, 'auto-redirect': autoRedirect = false,
'auto-detect-interface': autoDetectInterface = true, 'auto-detect-interface': autoDetectInterface = true,
'dns-hijack': dnsHijack = ['any:53'], 'dns-hijack': dnsHijack = ['any:53'],
'route-exclude-address': routeExcludeAddress = [],
'strict-route': strictRoute = false, 'strict-route': strictRoute = false,
mtu = 1500 mtu = 1500
} = tun || {} } = tun || {}
@ -35,6 +37,7 @@ const Tun: React.FC = () => {
autoDetectInterface, autoDetectInterface,
dnsHijack, dnsHijack,
strictRoute, strictRoute,
routeExcludeAddress,
mtu mtu
}) })
const setValues = (v: typeof values): void => { const setValues = (v: typeof values): void => {
@ -42,6 +45,22 @@ const Tun: React.FC = () => {
setChanged(true) setChanged(true)
} }
const handleExcludeAddressChange = (value: string, index: number): void => {
const newExcludeAddresses = [...values.routeExcludeAddress]
if (index === newExcludeAddresses.length) {
if (value.trim() !== '') {
newExcludeAddresses.push(value)
}
} else {
if (value.trim() === '') {
newExcludeAddresses.splice(index, 1)
} else {
newExcludeAddresses[index] = value
}
}
setValues({ ...values, routeExcludeAddress: newExcludeAddresses })
}
const onSave = async (patch: Partial<IMihomoConfig>): Promise<void> => { const onSave = async (patch: Partial<IMihomoConfig>): Promise<void> => {
await patchControledMihomoConfig(patch) await patchControledMihomoConfig(patch)
await restartCore() await restartCore()
@ -83,6 +102,7 @@ const Tun: React.FC = () => {
'auto-detect-interface': values.autoDetectInterface, 'auto-detect-interface': values.autoDetectInterface,
'dns-hijack': values.dnsHijack, 'dns-hijack': values.dnsHijack,
'strict-route': values.strictRoute, 'strict-route': values.strictRoute,
'route-exclude-address': values.routeExcludeAddress,
mtu: values.mtu mtu: values.mtu
} }
}) })
@ -226,7 +246,7 @@ const Tun: React.FC = () => {
}} }}
/> />
</SettingItem> </SettingItem>
<SettingItem title="DNS 劫持"> <SettingItem title="DNS 劫持" divider>
<Input <Input
size="sm" size="sm"
className="w-[50%]" className="w-[50%]"
@ -237,6 +257,31 @@ const Tun: React.FC = () => {
}} }}
/> />
</SettingItem> </SettingItem>
<div className="flex flex-col items-stretch">
<h3 className="mb-2"></h3>
{[...values.routeExcludeAddress, ''].map((address, index) => (
<div key={index} className="mb-2 flex">
<Input
fullWidth
size="sm"
placeholder="例: 172.20.0.0/16"
value={address}
onValueChange={(v) => handleExcludeAddressChange(v, index)}
/>
{index < values.routeExcludeAddress.length && (
<Button
className="ml-2"
size="sm"
variant="flat"
color="warning"
onClick={() => handleExcludeAddressChange('', index)}
>
<MdDeleteForever className="text-lg" />
</Button>
)}
</div>
))}
</div>
</SettingCard> </SettingCard>
</BasePage> </BasePage>
</> </>