Fix clash template

This commit is contained in:
problematicconsumer
2023-08-20 23:50:13 +03:30
parent 9d63ae0cb1
commit 85efdbb5ff
4 changed files with 132 additions and 166 deletions

View File

@@ -12,8 +12,6 @@ import (
var box *BoxService
var templateOptions = shared.ConfigTemplateOptions{IncludeTunInbound: false, IncludeMixedInbound: true, IncludeLogOutput: true}
//export setup
func setup(baseDir *C.char, workingDir *C.char, tempDir *C.char) {
Setup(C.GoString(baseDir), C.GoString(workingDir), C.GoString(tempDir))

127
shared/config.json.template Normal file
View File

@@ -0,0 +1,127 @@
{
"log": {},
"dns": {
"servers": [
{
"tag": "remote",
"address_resolver": "local",
"address": "tcp://1.1.1.1",
"strategy": "prefer_ipv4",
"detour": "select"
},
{
"tag": "local",
"address": "local",
"detour": "direct"
}
],
"rules": [
{
"clash_mode": "global",
"server": "remote"
},
{
"clash_mode": "direct",
"server": "local"
},
{
"outbound": [
"any"
],
"server": "local"
},
{
"geosite": "ir",
"server": "local"
}
],
"strategy": "ipv4_only"
},
"inbounds": [
{
"type": "tun",
"inet4_address": "172.19.0.1/30",
"sniff": true,
"sniff_override_destination": true,
"domain_strategy": "ipv4_only",
"strict_route": true,
"mtu": 9000,
"endpoint_independent_nat": true,
"auto_route": true
},
{
"type": "socks",
"tag": "socks-in",
"listen": "127.0.0.1",
"sniff": true,
"sniff_override_destination": true,
"domain_strategy": "ipv4_only",
"listen_port": 2333,
"users": []
},
{
"type": "mixed",
"tag": "mixed-in",
"sniff": true,
"sniff_override_destination": true,
"domain_strategy": "ipv4_only",
"listen": "127.0.0.1",
"listen_port": 2334,
"set_system_proxy": true,
"users": []
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "block",
"tag": "block"
},
{
"type": "dns",
"tag": "dns-out"
}
],
"route": {
"rules": [
{
"geosite": "category-ads-all",
"outbound": "block"
},
{
"protocol": "dns",
"outbound": "dns-out"
},
{
"clash_mode": "direct",
"outbound": "direct"
},
{
"clash_mode": "global",
"outbound": "select"
},
{
"geoip": [
"ir",
"private"
],
"outbound": "direct"
},
{
"geosite": "ir",
"outbound": "direct"
}
],
"auto_detect_interface": true
},
"experimental": {
"clash_api": {
"external_controller": "127.0.0.1:9090",
"store_selected": true,
"secret": ""
}
}
}

View File

@@ -1,6 +1,7 @@
package shared
import (
_ "embed"
"fmt"
"os"
@@ -10,6 +11,9 @@ import (
"gopkg.in/yaml.v3"
)
//go:embed config.json.template
var configByte []byte
func ParseConfig(path string) error {
content, err := os.ReadFile(path)
if err != nil {
@@ -43,7 +47,7 @@ func parseClash(content []byte) ([]byte, error) {
return nil, err
}
output := defaultTemplate(ConfigTemplateOptions{})
output := configByte
output, err = convert.Patch(output, sbConfig, "", "", nil)
if err != nil {
fmt.Printf("patch error %s", err)

View File

@@ -1,163 +0,0 @@
package shared
import (
"bytes"
"text/template"
)
const base = `
{
"log": {
{{if .IncludeLogOutput}}
"disabled": false,
"level": "info",
"output": "box.log",
{{end}}
},
"dns": {
"servers": [
{
"tag": "remote",
"address_resolver": "local",
"address": "tcp://1.1.1.1",
"strategy": "prefer_ipv4",
"detour": "select"
},
{
"tag": "local",
"address": "local",
"detour": "direct"
}
],
"rules": [
{
"clash_mode": "global",
"server": "remote"
},
{
"clash_mode": "direct",
"server": "local"
},
{
"outbound": [
"any"
],
"server": "local"
},
{
"geosite": "ir",
"server": "local"
}
],
"strategy": "ipv4_only"
},
"inbounds": [
{{if .IncludeTunInbound}}
{
"type": "tun",
"inet4_address": "172.19.0.1/30",
"sniff": true,
"sniff_override_destination": true,
"domain_strategy": "ipv4_only",
"strict_route": true,
"mtu": 9000,
"endpoint_independent_nat": true,
"auto_route": true
},
{{end}}
{
"type": "socks",
"tag": "socks-in",
"listen": "127.0.0.1",
"sniff": true,
"sniff_override_destination": true,
"domain_strategy": "ipv4_only",
"listen_port": 2333,
"users": []
}
{{if .IncludeMixedInbound}}
,{
"type": "mixed",
"tag": "mixed-in",
"sniff": true,
"sniff_override_destination": true,
"domain_strategy": "ipv4_only",
"listen": "127.0.0.1",
"listen_port": 2334,
"set_system_proxy": true,
"users": []
}
{{end}}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "block",
"tag": "block"
},
{
"type": "dns",
"tag": "dns-out"
}
],
"route": {
"rules": [
{
"geosite": "category-ads-all",
"outbound": "block"
},
{
"protocol": "dns",
"outbound": "dns-out"
},
{
"clash_mode": "direct",
"outbound": "direct"
},
{
"clash_mode": "global",
"outbound": "select"
},
{
"geoip": [
"ir",
"private"
],
"outbound": "direct"
},
// {
// "geosite": "geolocation-!ir",
// "outbound": "select"
// },
{
"geosite": "ir",
"outbound": "direct"
}
],
"auto_detect_interface": true
},
"experimental": {
"clash_api": {
"external_controller": "127.0.0.1:9090",
"store_selected": true,
"secret": ""
}
}
}`
type ConfigTemplateOptions struct {
IncludeTunInbound bool
IncludeMixedInbound bool
IncludeLogOutput bool
}
func defaultTemplate(options ConfigTemplateOptions) []byte {
var buffer bytes.Buffer
t := template.New("baseConfig")
t, _ = t.Parse(base)
t.Execute(&buffer, options)
return buffer.Bytes()
}