From 765eab043a923d158bd04feab2c040286007f25e Mon Sep 17 00:00:00 2001 From: DaTekShaman Date: Tue, 10 Jun 2025 23:59:23 +0300 Subject: [PATCH] Updates (var) --- config/dts-pontifex.yaml | 457 ++++++++------- config/{solar-p.yaml => solar-clash-mix.yaml} | 191 +++--- config/solar-clash-tun.yaml | 551 ++++++++++++++++++ icons/png/discord.png | Bin 0 -> 17849 bytes icons/png/openai.png | Bin 0 -> 28732 bytes icons/svg/discord.svg | 8 + icons/svg/openai.svg | 2 + 7 files changed, 904 insertions(+), 305 deletions(-) rename config/{solar-p.yaml => solar-clash-mix.yaml} (83%) create mode 100644 config/solar-clash-tun.yaml create mode 100644 icons/png/discord.png create mode 100644 icons/png/openai.png create mode 100644 icons/svg/discord.svg create mode 100644 icons/svg/openai.svg diff --git a/config/dts-pontifex.yaml b/config/dts-pontifex.yaml index 92c206e..fc25fcc 100644 --- a/config/dts-pontifex.yaml +++ b/config/dts-pontifex.yaml @@ -3,20 +3,18 @@ port: 7890 socks-port: 7891 redir-port: 7892 tproxy-port: 7893 -mixed-port: 7893 +mixed-port: 7894 allow-lan: true bind-address: "*" # authentication of local SOCKS5/HTTP(S) server # authentication: # - "user1:pass1" -# - "user2:pass2" # —————————————————————————————— external controller ————————————————————————————— -external-controller: 0.0.0.0:9090 +external-controller: 127.0.0.1:9090 secret: '314159271828' external-ui: "/usr/share/openclash/ui" -authentication: -- dts-pontifex-clash:314159271828 + # ———————————————————————————————————— general ——————————————————————————————————— mode: rule @@ -38,15 +36,43 @@ profile: sniffer: enable: true parse-pure-ip: true + override-destination: true + sniff: + QUIC: + ports: + - 443 + TLS: + ports: + - 443 + - 8443 + HTTP: + ports: + - 80 + - 8080-8880 + override-destination: true + force-domain: + - "+.netflix.com" + - "+.nflxvideo.net" + - "+.amazonaws.com" + - "+.media.dssott.com" + skip-domain: + - "+.apple.com" + - Mijia Cloud + - dlg.io.mi.com + - "+.oray.com" + - "+.sunlogin.net" + - "+.push.apple.com" # —————————————————————————————————————— dns ————————————————————————————————————— dns: enable: true + ipv6: false listen: 0.0.0.0:53 default-nameserver: - 114.114.114.114 - 8.8.8.8 enhanced-mode: fake-ip + use-hosts: false fake-ip-range: 198.18.0.1/16 fake-ip-filter-mode: blacklist fake-ip-filter: @@ -87,6 +113,7 @@ dns: # 'www.baidu.com': '114.114.114.114' # '+.internal.crop.com': '10.0.0.1' +# —————————————————————————————————————— tun ————————————————————————————————————— # ————————————————————————————————————— macro ———————————————————————————————————— health-check-for-providers: &health_check_for_providers enable: true @@ -106,25 +133,25 @@ dns: behavior: classical interval: 86400 - private-vpn-list: &private_vpn_list - - vless-estonia - - vless-serbia - p-vpn-list_balancer: &p_vpn_list_balancer type: load-balance strategy: sticky-sessions - proxies: - - vless-estonia - - vless-serbia - + use: + - own + p-vpn-list_selector: &p_vpn_list_selector type: select - proxies: - - vless-estonia - - vless-serbia use: - own + np-vpn-list_url_test: &np_vpn_list_url_test + type: url-test + tolerance: 50 + use: + - xfizz + - arza-1 + - Un1c4d3 + np-vpn-list_balancer: &np_vpn_list_balancer type: load-balance strategy: sticky-sessions @@ -132,7 +159,7 @@ dns: - xfizz - arza-1 - Un1c4d3 - + np-vpn-list_selector: &np_vpn_list_selector type: select use: @@ -143,8 +170,6 @@ dns: default-private-proxies-lb-selector: &default_private_proxies_lb_selector type: select proxies: - - vless-estonia - - vless-serbia - ⚖️ Personal VPN # ————————————————————————————————— proxies list ————————————————————————————————— @@ -160,42 +185,14 @@ proxies: udp: true ip-version: ipv4 interface-name: eth2 - - name: "WAN C [Mobile]" - type: direct - udp: true - ip-version: ipv4 - interface-name: eth2 + #- name: "WAN C [Mobile]" + # type: direct + # udp: true + # ip-version: ipv4 + # interface-name: eth2 - # ——————————————————— private vpn services ——————————————————— - - name: vless-serbia - type: vless - server: 38.180.101.70 - port: 443 - uuid: e31308a8-f7d3-4007-b077-6fd21e9c7310 - udp: true - tls: true - client-fingerprint: chrome - servername: kingnews.rs - network: tcp - flow: xtls-rprx-vision - reality-opts: - public-key: xBnrKijFwmka88VI1xWYzUS9jT1SyA5UdJQ8vg5BZzw - short-id: a9a07155 +# ——————————————————— private vpn services ——————————————————— - - name: vless-estonia - type: vless - server: 37.252.4.126 - port: 443 - uuid: '028c65fd-9192-4adc-af68-e01fe5881cdd' - udp: true - tls: true - client-fingerprint: chrome - servername: yahoo.com - network: tcp - flow: xtls-rprx-vision - reality-opts: - public-key: HwuNN-BUkUm1acVf0POkJHyfSj9puyATJDIxcR_OfE4 - short-id: '58024220' # ———————————————————————————————— proxy providers ——————————————————————————————— @@ -208,9 +205,9 @@ proxy-providers: interval: 3600 proxy: DIRECT path: "./proxy_provider/own-1.txt" - exclude-filter: "" + exclude-filter: "(?i)xhttp" override: - additional-prefix: "[O] " + additional-prefix: "🔆 " additional-suffix: "" health-check: <<: *health_check_for_providers @@ -219,42 +216,42 @@ proxy-providers: #https://xfizz.cc/sublink/XzU0rRmBeOZtIPprW46f2ieNFcF8PJw9?name=1Y:2213 xfizz: type: http - url: "https://gitea.shamanlanding.org/DaTekShaman/arcadia/raw/branch/main/CLASH%20RULES/proxy-providers/gofinn-test-account-full" + url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/fizz-vpn.txt" interval: 3600 - proxy: DIRECT + proxy: 🔢 Personal VPN path: "./proxy_provider/fizz-vpn.txt" - exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" override: - additional-prefix: "[F] " - additional-suffix: "" + additional-prefix: "" + additional-suffix: "•𝓯" health-check: <<: *health_check_for_providers #https://arza.top/sub/dGZjNHVlLDE3MzIzMDQ2MTYowA-efEYOh arza-1: type: http - url: "https://gitea.shamanlanding.org/DaTekShaman/arcadia/raw/branch/main/CLASH%20RULES/proxy-providers/arza" + url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/arza.txt" interval: 3600 - proxy: DIRECT + proxy: 🔢 Personal VPN path: "./proxy_provider/arza.txt" - exclude-filter: "(?i)Наш TG|Истекает|UNAVAILABLE" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" override: - additional-prefix: "[A] " - additional-suffix: "" + additional-prefix: "" + additional-suffix: "•𝓪" health-check: <<: *health_check_for_providers #https://subs.un1c4d3.ru:52478/sub/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJQTF9WTFNTX0FMTDIxMCIsImFjY2VzcyI6InN1YnNjcmlwdGlvbiIsImlhdCI6MTczNzgwMDQwOH0.mPr4BSMMpo1mrlZPvB34IRGcn2mHOZetHXaZyebirT4 Un1c4d3: type: http - url: "https://gitea.shamanlanding.org/DaTekShaman/arcadia/raw/branch/main/CLASH%20RULES/proxy-providers/Un1c4d3" + url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/Un1c4d3.txt" interval: 3600 proxy: DIRECT path: "./proxy_provider/Un1c4d3.txt" - exclude-filter: "(?i)Наш TG|Истекает|EXPIRE|TELEGRAM|UNAVAILABLE" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" override: - additional-prefix: "[U] " - additional-suffix: "" + additional-prefix: "" + additional-suffix: "•𝓾" health-check: <<: *health_check_for_providers # ————————————————————————————————— proxy groups ————————————————————————————————— @@ -277,14 +274,14 @@ proxy-groups: - WAN B [РосТелеКом] hidden: true - - name: ⚖️ ABC - type: load-balance - disable-udp: false - proxies: - - WAN A [Мегафон] - - WAN B [РосТелеКом] - - WAN C [Mobile] - hidden: true + # - name: ⚖️ ABC + # type: load-balance + # disable-udp: false + # proxies: + # - WAN A [Мегафон] + # - WAN B [РосТелеКом] + # - WAN C [Mobile] + # hidden: true # ————————————————————— direct selectors ————————————————————— - name: 🖥️ LAN Clients @@ -292,10 +289,10 @@ proxy-groups: disable-udp: false proxies: - ⚖️ AB - - ⚖️ ABC + # - ⚖️ ABC - WAN A [Мегафон] - WAN B [РосТелеКом] - - WAN C [Mobile] + # - WAN C [Mobile] - name: 🛋️ IOT Clients type: select @@ -303,10 +300,10 @@ proxy-groups: proxies: - 🖥️ LAN Clients - ⚖️ AB - - ⚖️ ABC + # - ⚖️ ABC - WAN A [Мегафон] - WAN B [РосТелеКом] - - WAN C [Mobile] + # - WAN C [Mobile] - name: 👾 Unprivileged Webway type: select @@ -314,10 +311,10 @@ proxy-groups: proxies: - 🖥️ LAN Clients - ⚖️ AB - - ⚖️ ABC + # - ⚖️ ABC - WAN A [Мегафон] - WAN B [РосТелеКом] - - WAN C [Mobile] + # - WAN C [Mobile] - name: 🌟 Privileged Webway type: select @@ -325,201 +322,211 @@ proxy-groups: proxies: - 🖥️ LAN Clients - ⚖️ AB - - ⚖️ ABC + # - ⚖️ ABC - WAN A [Мегафон] - WAN B [РосТелеКом] - - WAN C [Mobile] + # - WAN C [Mobile] # —————————————— load balancers for personal vpn ————————————— - name: ⚖️ Personal VPN - <<: *p_vpn_list_balancer - <<: *health_check_for_load_balancers - - # ———————————— load balancers for non-personal vpn ——————————— - - name: ⚖️ Russian - <<: *np_vpn_list_balancer disable-udp: false - filter: "(?i)Russia" - <<: *health_check_for_load_balancers - - - name: ⚖️ Europe - <<: *np_vpn_list_balancer + <<: [*p_vpn_list_balancer, *health_check_for_load_balancers] + + # —————————————— url tested for non-personal vpn ————————————— + - name: ⌚ Europe 🌍 disable-udp: false filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland" - <<: *health_check_for_load_balancers + <<: [*np_vpn_list_url_test, *health_check_for_load_balancers] - - name: ⚖️ USA - <<: *np_vpn_list_balancer - disable-udp: false - filter: "(?i)USA|Canada" - <<: *health_check_for_load_balancers - - - name: ⚖️ Asia - <<: *np_vpn_list_balancer + # ———————————— load balancers for non-personal vpn ——————————— + - name: ⚖️ Asia 🌍 disable-udp: false filter: "(?i)Hong Kong|China|Malaysia|Philippines|Japan|Singapore" - <<: *health_check_for_load_balancers + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + hidden: true + + - name: ⚖️ Europe 🌍 + disable-udp: false + filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + hidden: true + + - name: ⚖️ USA 🌍 + disable-udp: false + filter: "(?i)USA|Canada" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + hidden: true - name: ⚖️ High Bandwidth - <<: *np_vpn_list_balancer disable-udp: false filter: "(?i)10 Gbit" - <<: *health_check_for_load_balancers + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + hidden: true - - name: ⚖️ Fast Servers - <<: *np_vpn_list_balancer - disable-udp: false - filter: "(?i)Low Ping" - <<: *health_check_for_load_balancers - - # ————————————— global selectors for personal vpn ———————————— - - name: 🔢 Personal VPN - <<: *p_vpn_list_selector - disable-udp: false - <<: *health_check_for_selectors - - # ——————————— global selectors for non-personal vpn —————————— - - name: 🔢 Russian - <<: *np_vpn_list_selector + - name: ⚖️ Russian 🌍 disable-udp: false filter: "(?i)Russia" - <<: *health_check_for_selectors - - - name: 🔢 Europe - <<: *np_vpn_list_selector - disable-udp: false - filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland|Moldova" - <<: *health_check_for_selectors + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + hidden: true - - name: 🔢 USA - <<: *np_vpn_list_selector + - name: ⚖️ Fast Servers disable-udp: false - filter: "(?i)USA|Canada" - <<: *health_check_for_selectors + filter: "(?i)Low Ping" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + hidden: true - - name: 🔢 Asia - <<: *np_vpn_list_selector + # ————————————— global selectors for personal vpn ———————————— + - name: 🔢 Personal VPN + disable-udp: false + <<: [*p_vpn_list_selector, *health_check_for_selectors] + + # ——————————— global selectors for non-personal vpn —————————— + - name: 🔢 Asia 🌍 disable-udp: false filter: "(?i)Hong Kong|China|Malaysia|Philippines|Japan|Singapore" - <<: *health_check_for_selectors + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Europe 🌍 + disable-udp: false + filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland|Moldova" + <<: [*np_vpn_list_selector, *health_check_for_selectors] - - name: 🔢 Kazakhstan - <<: *np_vpn_list_selector + - name: 🔢 Kazakhstan 🌍 disable-udp: false filter: "(?i)Kazakhstan|KZ" - <<: *health_check_for_selectors + <<: [*np_vpn_list_selector, *health_check_for_selectors] + - name: 🔢 Russian 🌍 + disable-udp: false + filter: "(?i)Russia" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 USA 🌍 + disable-udp: false + filter: "(?i)USA|Canada" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + - name: 🔢 All non-personal - <<: *np_vpn_list_selector disable-udp: false filter: "" - <<: *health_check_for_selectors - - - name: 🔢 Gaming - <<: *np_vpn_list_selector - disable-udp: false - filter: "(?i)game" - <<: *health_check_for_selectors + <<: [*np_vpn_list_selector, *health_check_for_selectors] - - name: 🔢 Torrent Compliant - <<: *np_vpn_list_selector - disable-udp: false - filter: "(?i)torrent" - <<: *health_check_for_selectors - - - name: 🔢 TOR Compliant - <<: *np_vpn_list_selector - disable-udp: false - filter: "(?i)TOR✅" - <<: *health_check_for_selectors - - name: 🔢 Fast Servers - <<: *np_vpn_list_selector disable-udp: false filter: "(?i)10 Gbit|10Gbit" - <<: *health_check_for_selectors + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Gaming + disable-udp: false + filter: "(?i)game" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Torrent Compliant + disable-udp: false + filter: "(?i)torrent" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 TOR Compliant + disable-udp: false + filter: "(?i)TOR✅" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + - # —————————— selectors for unprivileged webway rules ————————— - - # ——————— selectors for local & privileged webway rules —————— - - name: YouTube [LAN] + # ——————— selectors for local rules —————— + - name: ✳️ YouTube type: select proxies: - - 🔢 Russian + - 🔢 Russian 🌍 - 🔢 Personal VPN - - 🔢 Europe - - ⚖️ Europe - - ⚖️ Russian + - 🔢 Europe 🌍 + - ⌚ Europe 🌍 + - ⚖️ Europe 🌍 + - ⚖️ Russian 🌍 - ⚖️ Personal VPN <<: *health_check_for_selectors - - name: Adaptaion + - name: ✳️ Adaptaion type: select proxies: - 🔢 Fast Servers - 🔢 Personal VPN - - 🔢 Europe + - 🔢 Europe 🌍 + - ⌚ Europe 🌍 - ⚖️ Fast Servers - ⚖️ Personal VPN - - ⚖️ Europe + - ⚖️ Europe 🌍 <<: *health_check_for_selectors - - name: Antifilter + - name: ✳️ Antifilter type: select proxies: - 🔢 Fast Servers - 🔢 Personal VPN - - 🔢 Europe + - 🔢 Europe 🌍 + - ⌚ Europe 🌍 - ⚖️ Fast Servers - ⚖️ Personal VPN - - ⚖️ Europe + - ⚖️ Europe 🌍 <<: *health_check_for_selectors - - name: Discord + - name: ✳️ Discord type: select disable-udp: false proxies: - 🔢 Fast Servers - 🔢 Personal VPN - - 🔢 Europe + - 🔢 Europe 🌍 + - ⌚ Europe 🌍 - ⚖️ Fast Servers - ⚖️ Personal VPN - - ⚖️ Europe + - ⚖️ Europe 🌍 <<: *health_check_for_selectors - - name: USA Services + - name: ✳️ USA Services type: select disable-udp: false proxies: - - 🔢 USA + - 🔢 USA 🌍 - 🔢 Personal VPN - - ⚖️ USA + - ⚖️ USA 🌍 - ⚖️ Personal VPN <<: *health_check_for_selectors - - name: Notion + - name: ✳️ Notion type: select proxies: - 🔢 Personal VPN - - 🔢 Europe + - 🔢 Europe 🌍 + - ⌚ Europe 🌍 - ⚖️ Personal VPN - - vless-estonia - - vless-serbia + - ⚖️ Europe 🌍 <<: *health_check_for_selectors - - name: Testzone A + - name: ✳️ AI Stuff (Western) + type: select + proxies: + - 🔢 Personal VPN + - 🔢 Europe 🌍 + - ⌚ Europe 🌍 + - ⚖️ Personal VPN + - ⚖️ Europe 🌍 + <<: *health_check_for_selectors + + - name: ✳️ Testzone A type: select proxies: - 🔢 All non-personal - - 🔢 Russian - - 🔢 Europe - - 🔢 USA - - 🔢 Asia - - 🔢 Kazakhstan + - 🔢 Russian 🌍 + - 🔢 Europe 🌍 + - 🔢 USA 🌍 + - 🔢 Asia 🌍 + - 🔢 Kazakhstan 🌍 - 🔢 Personal VPN - - ⚖️ Europe - - ⚖️ USA - - ⚖️ Asia + - ⌚ Europe 🌍 + - ⚖️ Russian 🌍 + - ⚖️ Europe 🌍 + - ⚖️ USA 🌍 + - ⚖️ Asia 🌍 - ⚖️ Fast Servers - ⚖️ Personal VPN <<: *health_check_for_selectors @@ -529,88 +536,88 @@ rule-providers: # ———————————————————————— gitea lists ——————————————————————— AI Stuff (Western): - url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/2005-lpu-ai-stuff-western.yaml # AI Stuff - path: "./rule_provider/2005-lpu-ai-stuff-western.yaml" + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/ai-stuff-western.yaml # AI Stuff + path: "./rule_provider/ai-stuff-western.yaml" <<: *default_rule_provider_config Discord: - url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/2005-lpu-ai-stuff-western.yaml # AI Stuff + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/discord.yaml # AI Stuff path: "./rule_provider/discord.yaml" <<: *default_rule_provider_config Notion: - url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/2000-lpu-notion.yaml # Notion - path: "./rule_provider/2000-lpu-notion.yaml" + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/notion.yaml # Notion + path: "./rule_provider/notion.yaml" <<: *default_rule_provider_config Youtube: - url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/1003-lpx-youtube.yaml # Youtube - path: "./rule_provider/1003-lpx-youtube.yaml" + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/youtube.yaml # Youtube + path: "./rule_provider/youtube.yaml" <<: *default_rule_provider_config Testzone A: - url: https://gitea.shamanlanding.org/DaTekShaman/arcadia/raw/branch/main/CLASH%20RULES/rule-providers/ip-test.yaml - path: "./rule_provider/0000-lpx-testzone-a.yaml" + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/testzone-a.yaml + path: "./rule_provider/testzone-a.yaml" <<: *default_rule_provider_config USA Services: - url: https://gitea.shamanlanding.org/DaTekShaman/arcadia/raw/branch/main/CLASH%20RULES/rule-providers/usa-services.yaml + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/usa-services.yaml path: "./rule_provider/usa-services.yaml" <<: *default_rule_provider_config # —————————————————————— adaptaion lists ————————————————————— General Direct Domain List: url: http://purpose.shamanlanding.org:9999/direct-domain.yaml - path: "./ruleset/0001-lpu-direct-domain.yaml" + path: "./rule_provider/direct-domain.yaml" <<: *default_rule_provider_config General Direct IP List: url: http://purpose.shamanlanding.org:9999/direct-ip.yaml - path: "./ruleset/0001-lpu-direct-ip.yaml" + path: "./rule_provider/direct-ip.yaml" <<: *default_rule_provider_config General Proxy Domain List: url: http://purpose.shamanlanding.org:9999/proxy-domain.yaml - path: "./ruleset/0002-lpx-adaptation-domain-proxy.yaml" + path: "./rule_provider/adaptation-domain-proxy.yaml" <<: *default_rule_provider_config General Proxy IP List: url: http://purpose.shamanlanding.org:9999/proxy-ip.yaml - path: "./ruleset/0002-lpx-adaptation-ip-proxy.yaml" + path: "./rule_provider/adaptation-ip-proxy.yaml" <<: *default_rule_provider_config # ————————————————— antifilter community list ———————————————— Antifilter IP List: url: http://purpose.shamanlanding.org:9999/antifilter-ip.yaml - path: "./ruleset/9998-lpx-antifilter-ip-proxy.yaml" + path: "./rule_provider/antifilter-ip-proxy.yaml" <<: *default_rule_provider_config Antifilter Community IP List: url: http://purpose.shamanlanding.org:9999/antifilter-community-ip.yaml - path: "./ruleset/9999-lpx-antifilter-community-ip-proxy.yaml" + path: "./rule_provider/antifilter-community-ip-proxy.yaml" <<: *default_rule_provider_config Antifilter Community Domain List: url: http://purpose.shamanlanding.org:9999/antifilter-community-domain.yaml - path: "./ruleset/9998-lpx-antifilter-domain-proxy.yaml" + path: "./rule_provider/antifilter-domain-proxy.yaml" <<: *default_rule_provider_config # ————————————————————————————————————— rules ———————————————————————————————————— rules: # —————————————————————— by application —————————————————————— -- RULE-SET,Youtube,YouTube [LAN] -- RULE-SET,Notion,Notion -- RULE-SET,Testzone A,Testzone A -- RULE-SET,AI Stuff (Western),Testzone A -- RULE-SET,Discord,Discord -- RULE-SET,USA Services,USA Services +- RULE-SET,Youtube,✳️ YouTube +- RULE-SET,Notion,✳️ Notion +- RULE-SET,Testzone A,✳️ Testzone A +- RULE-SET,AI Stuff (Western),✳️ Testzone A +- RULE-SET,Discord,✳️ Discord +- RULE-SET,USA Services,✳️ USA Services # —————————————————————— adaptaion lists ————————————————————— -- RULE-SET,General Direct Domain List,🖥️ LAN Clients -- RULE-SET,General Direct IP List,🖥️ LAN Clients -- RULE-SET,General Proxy Domain List,Adaptaion -- RULE-SET,General Proxy IP List,Adaptaion -- RULE-SET,Antifilter IP List,Antifilter -- RULE-SET,Antifilter Community IP List,Antifilter -- RULE-SET,Antifilter Community Domain List,Antifilter +- RULE-SET,General Direct Domain List,DIRECT +- RULE-SET,General Direct IP List,DIRECT +- RULE-SET,General Proxy Domain List,✳️ Adaptaion +- RULE-SET,General Proxy IP List,✳️ Adaptaion +- RULE-SET,Antifilter IP List,✳️ Antifilter +- RULE-SET,Antifilter Community IP List,✳️ Antifilter +- RULE-SET,Antifilter Community Domain List,✳️ Antifilter - MATCH,🖥️ LAN Clients \ No newline at end of file diff --git a/config/solar-p.yaml b/config/solar-clash-mix.yaml similarity index 83% rename from config/solar-p.yaml rename to config/solar-clash-mix.yaml index 1323eff..6a5f376 100644 --- a/config/solar-p.yaml +++ b/config/solar-clash-mix.yaml @@ -3,26 +3,27 @@ port: 7890 socks-port: 7891 redir-port: 7892 tproxy-port: 7893 -mixed-port: 7893 +mixed-port: 7894 allow-lan: true bind-address: "*" -authentication: - - "xuser:xuser" +# authentication of local SOCKS5/HTTP(S) server +# authentication: +# - "user1:pass1" # —————————————————————————————— external controller ————————————————————————————— external-controller: 0.0.0.0:9090 secret: '314159271828' external-ui: "/etc/clash/ui/" -# authentication: -# - dts-solar-clash-p:314159271828 # ———————————————————————————————————— general ——————————————————————————————————— mode: rule -ipv6: false +ipv6: true unified-delay: true log-level: info disable-keep-alive: true -# interface-name: en0 # Outbound interface name +interface-name: eth0 +keep-alive-interval: 15 +keep-alive-idle: 600 # ————————————————————————————————————— hosts ———————————————————————————————————— hosts: @@ -36,17 +37,44 @@ profile: sniffer: enable: true parse-pure-ip: true + override-destination: true + sniff: + QUIC: + ports: + - 443 + TLS: + ports: + - 443 + - 8443 + HTTP: + ports: + - 80 + - 8080-8880 + override-destination: true + force-domain: + - "+.netflix.com" + - "+.nflxvideo.net" + - "+.amazonaws.com" + - "+.media.dssott.com" + skip-domain: + - "+.apple.com" + - Mijia Cloud + - dlg.io.mi.com + - "+.oray.com" + - "+.sunlogin.net" + - "+.push.apple.com" # —————————————————————————————————————— dns ————————————————————————————————————— dns: enable: true - ipv6: false + prefer-h3: true + ipv6: true listen: 0.0.0.0:53 default-nameserver: - 114.114.114.114 - 8.8.8.8 enhanced-mode: fake-ip - use-hosts: true + use-hosts: false fake-ip-range: 198.18.0.1/16 fake-ip-filter-mode: blacklist fake-ip-filter: @@ -91,7 +119,7 @@ dns: # —————————————————————————————————————— tun ————————————————————————————————————— tun: enable: true - stack: system + stack: mixed device: utun auto-route: true auto-detect-interface: true @@ -138,6 +166,14 @@ tun: use: - own + np-vpn-list_url_test: &np_vpn_list_url_test + type: url-test + tolerance: 50 + use: + - xfizz + - arza-1 + - Un1c4d3 + np-vpn-list_balancer: &np_vpn_list_balancer type: load-balance strategy: sticky-sessions @@ -145,7 +181,7 @@ tun: - xfizz - arza-1 - Un1c4d3 - + np-vpn-list_selector: &np_vpn_list_selector type: select use: @@ -162,36 +198,8 @@ tun: # ————————————————————————————————— proxies list ————————————————————————————————— proxies: - # ——————————————————— private vpn services ——————————————————— - - name: vless-serbia - type: vless - server: 38.180.101.70 - port: 443 - uuid: e31308a8-f7d3-4007-b077-6fd21e9c7310 - udp: true - tls: true - client-fingerprint: chrome - servername: kingnews.rs - network: tcp - flow: xtls-rprx-vision - reality-opts: - public-key: xBnrKijFwmka88VI1xWYzUS9jT1SyA5UdJQ8vg5BZzw - short-id: a9a07155 +# ——————————————————— private vpn services ——————————————————— - - name: vless-estonia - type: vless - server: 37.252.4.126 - port: 443 - uuid: '028c65fd-9192-4adc-af68-e01fe5881cdd' - udp: true - tls: true - client-fingerprint: chrome - servername: yahoo.com - network: tcp - flow: xtls-rprx-vision - reality-opts: - public-key: HwuNN-BUkUm1acVf0POkJHyfSj9puyATJDIxcR_OfE4 - short-id: '58024220' # ———————————————————————————————— proxy providers ——————————————————————————————— @@ -204,9 +212,9 @@ proxy-providers: interval: 3600 proxy: DIRECT path: "./proxy_provider/own-1.txt" - exclude-filter: "" + exclude-filter: "(?i)xhttp" override: - additional-prefix: "[O] " + additional-prefix: "🔆 " additional-suffix: "" health-check: <<: *health_check_for_providers @@ -217,12 +225,12 @@ proxy-providers: type: http url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/fizz-vpn.txt" interval: 3600 - proxy: DIRECT + proxy: 🔢 Personal VPN path: "./proxy_provider/fizz-vpn.txt" - exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" override: - additional-prefix: "[F] " - additional-suffix: "" + additional-prefix: "" + additional-suffix: "•𝓯" health-check: <<: *health_check_for_providers @@ -231,12 +239,12 @@ proxy-providers: type: http url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/arza.txt" interval: 3600 - proxy: DIRECT + proxy: 🔢 Personal VPN path: "./proxy_provider/arza.txt" - exclude-filter: "(?i)Наш TG|Истекает|UNAVAILABLE" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" override: - additional-prefix: "[A] " - additional-suffix: "" + additional-prefix: "" + additional-suffix: "•𝓪" health-check: <<: *health_check_for_providers @@ -247,10 +255,10 @@ proxy-providers: interval: 3600 proxy: DIRECT path: "./proxy_provider/Un1c4d3.txt" - exclude-filter: "(?i)Наш TG|Истекает|EXPIRE|TELEGRAM|UNAVAILABLE" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" override: - additional-prefix: "[U] " - additional-suffix: "" + additional-prefix: "" + additional-suffix: "•𝓾" health-check: <<: *health_check_for_providers # ————————————————————————————————— proxy groups ————————————————————————————————— @@ -266,8 +274,15 @@ proxy-groups: # —————————————— load balancers for personal vpn ————————————— - name: ⚖️ Personal VPN + disable-udp: false <<: [*p_vpn_list_balancer, *health_check_for_load_balancers] + # —————————————— url tested for non-personal vpn ————————————— + - name: ⌚ Europe + disable-udp: false + filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland" + <<: [*np_vpn_list_url_test, *health_check_for_load_balancers] + # ———————————— load balancers for non-personal vpn ——————————— - name: ⚖️ Russian disable-udp: false @@ -356,52 +371,56 @@ proxy-groups: <<: [*np_vpn_list_selector, *health_check_for_selectors] # ——————— selectors for local rules —————— - - name: YouTube + - name: ✳️ YouTube type: select proxies: - 🔢 Russian - 🔢 Personal VPN - 🔢 Europe + - ⌚ Europe - ⚖️ Europe - ⚖️ Russian - ⚖️ Personal VPN <<: *health_check_for_selectors - - name: Adaptaion + - name: ✳️ Adaptaion type: select proxies: - 🔢 Fast Servers - 🔢 Personal VPN - 🔢 Europe + - ⌚ Europe - ⚖️ Fast Servers - ⚖️ Personal VPN - ⚖️ Europe <<: *health_check_for_selectors - - name: Antifilter + - name: ✳️ Antifilter type: select proxies: - 🔢 Fast Servers - 🔢 Personal VPN - 🔢 Europe + - ⌚ Europe - ⚖️ Fast Servers - ⚖️ Personal VPN - ⚖️ Europe <<: *health_check_for_selectors - - name: Discord + - name: ✳️ Discord type: select disable-udp: false proxies: - 🔢 Fast Servers - 🔢 Personal VPN - 🔢 Europe + - ⌚ Europe - ⚖️ Fast Servers - ⚖️ Personal VPN - ⚖️ Europe <<: *health_check_for_selectors - - name: USA Services + - name: ✳️ USA Services type: select disable-udp: false proxies: @@ -411,16 +430,27 @@ proxy-groups: - ⚖️ Personal VPN <<: *health_check_for_selectors - - name: Notion + - name: ✳️ Notion type: select proxies: - 🔢 Personal VPN - 🔢 Europe + - ⌚ Europe - ⚖️ Personal VPN - ⚖️ Europe <<: *health_check_for_selectors - - name: Testzone A + - name: ✳️ AI Stuff (Western) + type: select + proxies: + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Personal VPN + - ⚖️ Europe + <<: *health_check_for_selectors + + - name: ✳️ Testzone A type: select proxies: - 🔢 All non-personal @@ -430,6 +460,7 @@ proxy-groups: - 🔢 Asia - 🔢 Kazakhstan - 🔢 Personal VPN + - ⌚ Europe - ⚖️ Russian - ⚖️ Europe - ⚖️ USA @@ -463,68 +494,68 @@ rule-providers: <<: *default_rule_provider_config Testzone A: - url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-providers/ip-test.yaml + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/testzone-a.yaml path: "./rule_provider/testzone-a.yaml" <<: *default_rule_provider_config USA Services: - url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-providers/usa-services.yaml + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/usa-services.yaml path: "./rule_provider/usa-services.yaml" <<: *default_rule_provider_config # —————————————————————— adaptaion lists ————————————————————— General Direct Domain List: url: http://purpose.shamanlanding.org:9999/direct-domain.yaml - path: "./ruleset/direct-domain.yaml" + path: "./rule_provider/direct-domain.yaml" <<: *default_rule_provider_config General Direct IP List: url: http://purpose.shamanlanding.org:9999/direct-ip.yaml - path: "./ruleset/direct-ip.yaml" + path: "./rule_provider/direct-ip.yaml" <<: *default_rule_provider_config General Proxy Domain List: url: http://purpose.shamanlanding.org:9999/proxy-domain.yaml - path: "./ruleset/adaptation-domain-proxy.yaml" + path: "./rule_provider/adaptation-domain-proxy.yaml" <<: *default_rule_provider_config General Proxy IP List: url: http://purpose.shamanlanding.org:9999/proxy-ip.yaml - path: "./ruleset/adaptation-ip-proxy.yaml" + path: "./rule_provider/adaptation-ip-proxy.yaml" <<: *default_rule_provider_config # ————————————————— antifilter community list ———————————————— Antifilter IP List: url: http://purpose.shamanlanding.org:9999/antifilter-ip.yaml - path: "./ruleset/antifilter-ip-proxy.yaml" + path: "./rule_provider/antifilter-ip-proxy.yaml" <<: *default_rule_provider_config Antifilter Community IP List: url: http://purpose.shamanlanding.org:9999/antifilter-community-ip.yaml - path: "./ruleset/antifilter-community-ip-proxy.yaml" + path: "./rule_provider/antifilter-community-ip-proxy.yaml" <<: *default_rule_provider_config Antifilter Community Domain List: url: http://purpose.shamanlanding.org:9999/antifilter-community-domain.yaml - path: "./ruleset/antifilter-domain-proxy.yaml" + path: "./rule_provider/antifilter-domain-proxy.yaml" <<: *default_rule_provider_config # ————————————————————————————————————— rules ———————————————————————————————————— rules: # —————————————————————— by application —————————————————————— -- RULE-SET,Youtube,YouTube -- RULE-SET,Notion,Notion -- RULE-SET,Testzone A,Testzone A -- RULE-SET,AI Stuff (Western),Testzone A -- RULE-SET,Discord,Discord -- RULE-SET,USA Services,USA Services +- RULE-SET,Youtube,✳️ YouTube +- RULE-SET,Notion,✳️ Notion +- RULE-SET,Testzone A,✳️ Testzone A +- RULE-SET,AI Stuff (Western),✳️ Testzone A +- RULE-SET,Discord,✳️ Discord +- RULE-SET,USA Services,✳️ USA Services # —————————————————————— adaptaion lists ————————————————————— - RULE-SET,General Direct Domain List,DIRECT - RULE-SET,General Direct IP List,DIRECT -- RULE-SET,General Proxy Domain List,Adaptaion -- RULE-SET,General Proxy IP List,Adaptaion -- RULE-SET,Antifilter IP List,Antifilter -- RULE-SET,Antifilter Community IP List,Antifilter -- RULE-SET,Antifilter Community Domain List,Antifilter +- RULE-SET,General Proxy Domain List,✳️ Adaptaion +- RULE-SET,General Proxy IP List,✳️ Adaptaion +- RULE-SET,Antifilter IP List,✳️ Antifilter +- RULE-SET,Antifilter Community IP List,✳️ Antifilter +- RULE-SET,Antifilter Community Domain List,✳️ Antifilter - MATCH,DIRECT \ No newline at end of file diff --git a/config/solar-clash-tun.yaml b/config/solar-clash-tun.yaml new file mode 100644 index 0000000..c16b617 --- /dev/null +++ b/config/solar-clash-tun.yaml @@ -0,0 +1,551 @@ +# —————————————————————————————————— local proxy ————————————————————————————————— +port: 7890 +socks-port: 7891 +redir-port: 7892 +tproxy-port: 7893 +mixed-port: 7894 +allow-lan: true +bind-address: "*" +# authentication of local SOCKS5/HTTP(S) server +# authentication: +# - "user1:pass1" + +# —————————————————————————————— external controller ————————————————————————————— +external-controller: 0.0.0.0:9090 +secret: '314159271828' +external-ui: "/etc/clash/ui/" + +# ———————————————————————————————————— general ——————————————————————————————————— +mode: rule +ipv6: true +unified-delay: true +log-level: info +disable-keep-alive: true +interface-name: eth0 +keep-alive-interval: 15 +keep-alive-idle: 600 + +# ————————————————————————————————————— hosts ———————————————————————————————————— +hosts: + +# ———————————————————————————————————— profile ——————————————————————————————————— +profile: + store-selected: true + store-fake-ip: true + +# ———————————————————————————————————— sniffer ——————————————————————————————————— +sniffer: + enable: true + parse-pure-ip: true + override-destination: true + sniff: + QUIC: + ports: + - 443 + TLS: + ports: + - 443 + - 8443 + HTTP: + ports: + - 80 + - 8080-8880 + override-destination: true + force-domain: + - "+.netflix.com" + - "+.nflxvideo.net" + - "+.amazonaws.com" + - "+.media.dssott.com" + skip-domain: + - "+.apple.com" + - Mijia Cloud + - dlg.io.mi.com + - "+.oray.com" + - "+.sunlogin.net" + - "+.push.apple.com" + +# —————————————————————————————————————— dns ————————————————————————————————————— +dns: + enable: true + prefer-h3: true + ipv6: true + listen: 0.0.0.0:53 + default-nameserver: + - 114.114.114.114 + - 8.8.8.8 + enhanced-mode: fake-ip + use-hosts: false + fake-ip-range: 198.18.0.1/16 + fake-ip-filter-mode: blacklist + fake-ip-filter: + # ———————————————————— self-hosted domains ——————————————————— + - '*.lan' + - '+.dts' + - '+.webway.dts' + - '+.netbird.selfhosted' + - '+.shamanlanding.org' + nameserver: + - https://purpose.shamanlanding.org/dns-query/dts-pontifex + - https://d.adguard-dns.com/dns-query/5ffb7de2 + fallback: + - https://dns.google/dns-query + - https://cloudflare-dns.com/dns-query + + # If IP addresses resolved with servers in `nameservers` are in the specified + # subnets below, they are considered invalid and results from `fallback` + # servers are used instead. + # + # IP address resolved with servers in `nameserver` is used when + # `fallback-filter.geoip` is true and when GEOIP of the IP address is `CN`. + # + # If `fallback-filter.geoip` is false, results from `nameserver` nameservers + # are always used if not match `fallback-filter.ipcidr`. + # + # This is a countermeasure against DNS pollution attacks. + # fallback-filter: + # geoip: true + # geoip-code: CN + # ipcidr: + # - 240.0.0.0/4 + # domain: + # - '+.google.com' + # - '+.facebook.com' + # - '+.youtube.com' + # Lookup domains via specific nameservers + # nameserver-policy: + # 'www.baidu.com': '114.114.114.114' + # '+.internal.crop.com': '10.0.0.1' + +# —————————————————————————————————————— tun ————————————————————————————————————— +tun: + enable: true + stack: mixed + device: utun + auto-route: true + auto-detect-interface: true + dns-hijack: + - any:53 + +# ————————————————————————————————————— macro ———————————————————————————————————— + health-check-for-providers: &health_check_for_providers + enable: true + interval: 600 + url: http://www.gstatic.com/generate_204 + + health-check-for-selectors: &health_check_for_selectors + url: https://cp.cloudflare.com/generate_204 + interval: 300 + + health-check-for-load-balancers: &health_check_for_load_balancers + url: https://cp.cloudflare.com/generate_204 + interval: 300 + + default-rule-provider-config: &default_rule_provider_config + type: http + behavior: classical + interval: 86400 + + p-vpn-list_balancer: &p_vpn_list_balancer + type: load-balance + strategy: sticky-sessions + use: + - own + + p-vpn-list_selector: &p_vpn_list_selector + type: select + use: + - own + + np-vpn-list_url_test: &np_vpn_list_url_test + type: url-test + tolerance: 50 + use: + - xfizz + - arza-1 + - Un1c4d3 + + np-vpn-list_balancer: &np_vpn_list_balancer + type: load-balance + strategy: sticky-sessions + use: + - xfizz + - arza-1 + - Un1c4d3 + + np-vpn-list_selector: &np_vpn_list_selector + type: select + use: + - xfizz + - arza-1 + - Un1c4d3 + + default-private-proxies-lb-selector: &default_private_proxies_lb_selector + type: select + proxies: + - ⚖️ Personal VPN + +# ————————————————————————————————— proxies list ————————————————————————————————— +proxies: +# ——————————————————— private vpn services ——————————————————— + + + +# ———————————————————————————————— proxy providers ——————————————————————————————— +proxy-providers: + # ——————————————————— private vpn services ——————————————————— + #https://dexterity.shamanlanding.org/M4eh2gd/first + own: + type: http + url: "https://dexterity.shamanlanding.org/M4eh2gd/first" + interval: 3600 + proxy: DIRECT + path: "./proxy_provider/own-1.txt" + exclude-filter: "(?i)xhttp" + override: + additional-prefix: "🔆 " + additional-suffix: "" + health-check: + <<: *health_check_for_providers + + # ——————————————————— non-personal services —————————————————— + #https://xfizz.cc/sublink/XzU0rRmBeOZtIPprW46f2ieNFcF8PJw9?name=1Y:2213 + xfizz: + type: http + url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/fizz-vpn.txt" + interval: 3600 + proxy: 🔢 Personal VPN + path: "./proxy_provider/fizz-vpn.txt" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" + override: + additional-prefix: "" + additional-suffix: "•𝓯" + health-check: + <<: *health_check_for_providers + + #https://arza.top/sub/dGZjNHVlLDE3MzIzMDQ2MTYowA-efEYOh + arza-1: + type: http + url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/arza.txt" + interval: 3600 + proxy: 🔢 Personal VPN + path: "./proxy_provider/arza.txt" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" + override: + additional-prefix: "" + additional-suffix: "•𝓪" + health-check: + <<: *health_check_for_providers + + #https://subs.un1c4d3.ru:52478/sub/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJQTF9WTFNTX0FMTDIxMCIsImFjY2VzcyI6InN1YnNjcmlwdGlvbiIsImlhdCI6MTczNzgwMDQwOH0.mPr4BSMMpo1mrlZPvB34IRGcn2mHOZetHXaZyebirT4 + Un1c4d3: + type: http + url: "https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/proxy-provider/Un1c4d3.txt" + interval: 3600 + proxy: DIRECT + path: "./proxy_provider/Un1c4d3.txt" + exclude-filter: "(?i)Наш TG|Истекает|@FizzVPN|UNAVAILABLE|EXPIRE|TELEGRAM|USERNAME:" + override: + additional-prefix: "" + additional-suffix: "•𝓾" + health-check: + <<: *health_check_for_providers +# ————————————————————————————————— proxy groups ————————————————————————————————— +proxy-groups: + # ————————————————————————— fallback ————————————————————————— + - name: "Automatic Fallback Route" + type: fallback + proxies: + - DIRECT + hidden: true + url: 'https://cp.cloudflare.com/generate_204' + interval: 300 + + # —————————————— load balancers for personal vpn ————————————— + - name: ⚖️ Personal VPN + disable-udp: false + <<: [*p_vpn_list_balancer, *health_check_for_load_balancers] + + # —————————————— url tested for non-personal vpn ————————————— + - name: ⌚ Europe + disable-udp: false + filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland" + <<: [*np_vpn_list_url_test, *health_check_for_load_balancers] + + # ———————————— load balancers for non-personal vpn ——————————— + - name: ⚖️ Russian + disable-udp: false + filter: "(?i)Russia" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + + - name: ⚖️ Europe + disable-udp: false + filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + + - name: ⚖️ USA + disable-udp: false + filter: "(?i)USA|Canada" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + + - name: ⚖️ Asia + disable-udp: false + filter: "(?i)Hong Kong|China|Malaysia|Philippines|Japan|Singapore" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + + - name: ⚖️ High Bandwidth + disable-udp: false + filter: "(?i)10 Gbit" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + + - name: ⚖️ Fast Servers + disable-udp: false + filter: "(?i)Low Ping" + <<: [*np_vpn_list_balancer, *health_check_for_load_balancers] + + # ————————————— global selectors for personal vpn ———————————— + - name: 🔢 Personal VPN + disable-udp: false + <<: [*p_vpn_list_selector, *health_check_for_selectors] + + # ——————————— global selectors for non-personal vpn —————————— + - name: 🔢 Russian + disable-udp: false + filter: "(?i)Russia" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Europe + disable-udp: false + filter: "(?i)NL|Finland|Estonia|France|Germany|Sweden|Ireland|Moldova" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 USA + disable-udp: false + filter: "(?i)USA|Canada" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Asia + disable-udp: false + filter: "(?i)Hong Kong|China|Malaysia|Philippines|Japan|Singapore" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Kazakhstan + disable-udp: false + filter: "(?i)Kazakhstan|KZ" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 All non-personal + disable-udp: false + filter: "" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Gaming + disable-udp: false + filter: "(?i)game" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Torrent Compliant + disable-udp: false + filter: "(?i)torrent" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 TOR Compliant + disable-udp: false + filter: "(?i)TOR✅" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + - name: 🔢 Fast Servers + disable-udp: false + filter: "(?i)10 Gbit|10Gbit" + <<: [*np_vpn_list_selector, *health_check_for_selectors] + + # ——————— selectors for local rules —————— + - name: ✳️ YouTube + type: select + proxies: + - 🔢 Russian + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Europe + - ⚖️ Russian + - ⚖️ Personal VPN + <<: *health_check_for_selectors + + - name: ✳️ Adaptaion + type: select + proxies: + - 🔢 Fast Servers + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Fast Servers + - ⚖️ Personal VPN + - ⚖️ Europe + <<: *health_check_for_selectors + + - name: ✳️ Antifilter + type: select + proxies: + - 🔢 Fast Servers + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Fast Servers + - ⚖️ Personal VPN + - ⚖️ Europe + <<: *health_check_for_selectors + + - name: ✳️ Discord + icon: ./icon/png/discord.png + type: select + disable-udp: false + proxies: + - 🔢 Fast Servers + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Fast Servers + - ⚖️ Personal VPN + - ⚖️ Europe + <<: *health_check_for_selectors + + - name: ✳️ USA Services + type: select + disable-udp: false + proxies: + - 🔢 USA + - 🔢 Personal VPN + - ⚖️ USA + - ⚖️ Personal VPN + <<: *health_check_for_selectors + + - name: ✳️ Notion + type: select + proxies: + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Personal VPN + - ⚖️ Europe + <<: *health_check_for_selectors + + - name: ✳️ AI Stuff (Western) + icon: ./icon/png/openai.png + type: select + proxies: + - 🔢 Personal VPN + - 🔢 Europe + - ⌚ Europe + - ⚖️ Personal VPN + - ⚖️ Europe + <<: *health_check_for_selectors + + - name: ✳️ Testzone A + type: select + proxies: + - 🔢 All non-personal + - 🔢 Russian + - 🔢 Europe + - 🔢 USA + - 🔢 Asia + - 🔢 Kazakhstan + - 🔢 Personal VPN + - ⌚ Europe + - ⚖️ Russian + - ⚖️ Europe + - ⚖️ USA + - ⚖️ Asia + - ⚖️ Fast Servers + - ⚖️ Personal VPN + <<: *health_check_for_selectors + +# ———————————————————————————————— rule providers ———————————————————————————————— +rule-providers: + + # ———————————————————————— gitea lists ——————————————————————— + AI Stuff (Western): + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/ai-stuff-western.yaml # AI Stuff + path: "./rule_provider/ai-stuff-western.yaml" + <<: *default_rule_provider_config + + Discord: + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/discord.yaml # AI Stuff + path: "./rule_provider/discord.yaml" + <<: *default_rule_provider_config + + Notion: + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/notion.yaml # Notion + path: "./rule_provider/notion.yaml" + <<: *default_rule_provider_config + + Youtube: + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/youtube.yaml # Youtube + path: "./rule_provider/youtube.yaml" + <<: *default_rule_provider_config + + Testzone A: + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/testzone-a.yaml + path: "./rule_provider/testzone-a.yaml" + <<: *default_rule_provider_config + + USA Services: + url: https://gitea.shamanlanding.org/DaTekShaman/clash-rules/raw/branch/main/rule-provider/usa-services.yaml + path: "./rule_provider/usa-services.yaml" + <<: *default_rule_provider_config + + # —————————————————————— adaptaion lists ————————————————————— + General Direct Domain List: + url: http://purpose.shamanlanding.org:9999/direct-domain.yaml + path: "./rule_provider/direct-domain.yaml" + <<: *default_rule_provider_config + + General Direct IP List: + url: http://purpose.shamanlanding.org:9999/direct-ip.yaml + path: "./rule_provider/direct-ip.yaml" + <<: *default_rule_provider_config + + General Proxy Domain List: + url: http://purpose.shamanlanding.org:9999/proxy-domain.yaml + path: "./rule_provider/adaptation-domain-proxy.yaml" + <<: *default_rule_provider_config + + General Proxy IP List: + url: http://purpose.shamanlanding.org:9999/proxy-ip.yaml + path: "./rule_provider/adaptation-ip-proxy.yaml" + <<: *default_rule_provider_config + + # ————————————————— antifilter community list ———————————————— + Antifilter IP List: + url: http://purpose.shamanlanding.org:9999/antifilter-ip.yaml + path: "./rule_provider/antifilter-ip-proxy.yaml" + <<: *default_rule_provider_config + Antifilter Community IP List: + url: http://purpose.shamanlanding.org:9999/antifilter-community-ip.yaml + path: "./rule_provider/antifilter-community-ip-proxy.yaml" + <<: *default_rule_provider_config + Antifilter Community Domain List: + url: http://purpose.shamanlanding.org:9999/antifilter-community-domain.yaml + path: "./rule_provider/antifilter-domain-proxy.yaml" + <<: *default_rule_provider_config + +# ————————————————————————————————————— rules ———————————————————————————————————— +rules: + +# —————————————————————— by application —————————————————————— +- RULE-SET,Youtube,✳️ YouTube +- RULE-SET,Notion,✳️ Notion +- RULE-SET,Testzone A,✳️ Testzone A +- RULE-SET,AI Stuff (Western),✳️ Testzone A +- RULE-SET,Discord,✳️ Discord +- RULE-SET,USA Services,✳️ USA Services + +# —————————————————————— adaptaion lists ————————————————————— +- RULE-SET,General Direct Domain List,DIRECT +- RULE-SET,General Direct IP List,DIRECT +- RULE-SET,General Proxy Domain List,✳️ Adaptaion +- RULE-SET,General Proxy IP List,✳️ Adaptaion +- RULE-SET,Antifilter IP List,✳️ Antifilter +- RULE-SET,Antifilter Community IP List,✳️ Antifilter +- RULE-SET,Antifilter Community Domain List,✳️ Antifilter + +- MATCH,DIRECT \ No newline at end of file diff --git a/icons/png/discord.png b/icons/png/discord.png new file mode 100644 index 0000000000000000000000000000000000000000..f4109b9f0dc789834c9daddbbcb236d21b808749 GIT binary patch literal 17849 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 literal 0 HcmV?d00001 diff --git a/icons/png/openai.png b/icons/png/openai.png new file mode 100644 index 0000000000000000000000000000000000000000..27ed72ee245aa420b8c2cd30d4ce7afbc5548cfe GIT binary patch literal 28732 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 cJFtV$mp#4u{?!GL + + + + + + + \ No newline at end of file diff --git a/icons/svg/openai.svg b/icons/svg/openai.svg new file mode 100644 index 0000000..3b4eff9 --- /dev/null +++ b/icons/svg/openai.svg @@ -0,0 +1,2 @@ + +OpenAI icon \ No newline at end of file