#################################
# DNS — 解决 .lan 在 Stash TUN 下解析失败
#
# 家里 .lan 由主路由 OpenWrt（192.168.123.1 dnsmasq）解析。
# 日志 dial udp 192.168.123.1:53: i/o timeout = 知道问 OpenWrt，但 DNS
# 默认直连、没经 Home-TS → 蜂窝摸不到家。必须用 IP#代理 强制经 TS。
#
# 跳过列表须已移除：192.168.123.0/24、192.168.0.0/16、100.64.0.0/10
#################################
dns:
  enable: true
  ipv6: false
  follow-rule: true              # Stash 官方：DNS 走 rules
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '+.lan'
    - '+.local'
    - 'localhost'
    - '*.localhost'
    - '192.168.123.0/24'
    - '100.64.0.0/10'
  default-nameserver:
    - 8.8.8.8
    - 1.1.1.1
  nameserver:
    - 8.8.8.8
    - 1.1.1.1
  nameserver-policy:
    '+.lan':
      - 192.168.123.1            # OpenWrt；无 #代理
    'lan':
      - 192.168.123.1

#################################
# Static proxies (Stash-only: type tailscale / ssid-policy)
# 非 Stash 客户端通常不识别这些字段
#################################
proxies:
  # 访问家庭局域网时使用；不要配置 exit-node（避免全局流量绕回家）
  # 认证二选一：
  #   1) 填写 auth-key（Tailscale 后台生成，多设备请勾选 Reusable）
  #   2) 不填 auth-key → Stash 节点菜单「Tailscale 认证」里登录
  - name: 🏠 Home-TS
    type: tailscale
    # auth-key: "{{TS_AUTH_KEY}}"
    hostname: stash-device
    control-url: https://controlplane.tailscale.com
    ephemeral: false

#################################
# Proxy Providers
#################################
proxy-providers:
  mysub:
    type: http
    url: "https://is.domainforsub.work/sub/7e64cdcb53d34b02"
    interval: 3600
    path: ./providers/mysub.yaml
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 600

proxy-groups:
  # 家庭网段出口：在家 O2_5G → DIRECT；在外 → Home-TS（经家里 subnet router）
  # macOS 需给 Stash「定位服务」权限才能读 SSID
  - name: 🏠 家庭网络
    type: select
    proxies:
      - 🏠 Home-TS
      - DIRECT
    ssid-policy:
      O2_5G: DIRECT
      # 若家中还有其它 SSID，一并写 DIRECT，例如：
      O2: DIRECT
      # O2_2.4G: DIRECT
      cellular: 🏠 Home-TS
      default: 🏠 Home-TS

  - name: 🚀 节点选择
    type: select
    use:
      - mysub
    proxies:
      - 🇭🇰 香港
      - 🇭🇰 香港手动
      - 🇯🇵 日本
      - 🇯🇵 日本手动
      - 🇹🇼 台湾
      - 🇹🇼 台湾手动
      - 🇸🇬 新加坡
      - 🇸🇬 新加坡手动
      - 🇰🇷 韩国
      - 🇺🇸 美国
      - 🇩🇪 德国
      - 🇨🇦 加拿大
      - 🇮🇳 印度
      - 🇫🇷 法国
      - 🇦🇺 澳大利亚
      - 🇬🇧 英国
      - DIRECT

  - name: 🐟 漏网之鱼
    type: select
    proxies:
      - 🚀 节点选择
      - DIRECT
  - name: 💬 Ai平台
    type: select
    proxies:
      - 🚀 节点选择
      - 🇯🇵 日本
      - 🇯🇵 日本手动
      - 🇹🇼 台湾
      - 🇹🇼 台湾手动
      - 🇸🇬 新加坡
      - 🇸🇬 新加坡手动
      - 🇰🇷 韩国
      - 🇺🇸 美国
      - 🇩🇪 德国
      - 🇨🇦 加拿大
      - 🇮🇳 印度
      - 🇫🇷 法国
      - 🇦🇺 澳大利亚
      - 🇬🇧 英国
  - name: 📹 油管视频
    type: select
    proxies:
      - 🚀 节点选择
      - 🇭🇰 香港
      - 🇭🇰 香港手动
      - 🇯🇵 日本
      - 🇯🇵 日本手动
      - 🇹🇼 台湾
      - 🇹🇼 台湾手动
      - 🇸🇬 新加坡
      - 🇸🇬 新加坡手动
      - 🇰🇷 韩国
      - 🇺🇸 美国
      - 🇩🇪 德国
      - 🇨🇦 加拿大
      - 🇮🇳 印度
      - 🇫🇷 法国
      - 🇦🇺 澳大利亚
      - 🇬🇧 英国
  - name: 🌍 国外媒体
    type: select
    proxies:
      - 🚀 节点选择
      - 🇭🇰 香港
      - 🇭🇰 香港手动
      - 🇯🇵 日本
      - 🇯🇵 日本手动
      - 🇹🇼 台湾
      - 🇹🇼 台湾手动
      - 🇸🇬 新加坡
      - 🇸🇬 新加坡手动
      - 🇰🇷 韩国
      - 🇺🇸 美国
      - 🇩🇪 德国
      - 🇨🇦 加拿大
      - 🇮🇳 印度
      - 🇫🇷 法国
      - 🇦🇺 澳大利亚
      - 🇬🇧 英国

  - name: 📲 电报信息
    type: select
    proxies:
      - 🚀 节点选择
      - 🇭🇰 香港
      - 🇭🇰 香港手动
      - 🇯🇵 日本
      - 🇯🇵 日本手动
      - 🇹🇼 台湾
      - 🇹🇼 台湾手动
      - 🇸🇬 新加坡
      - 🇸🇬 新加坡手动
      - 🇰🇷 韩国
      - 🇺🇸 美国
      - 🇩🇪 德国
      - 🇨🇦 加拿大
      - 🇮🇳 印度
      - 🇫🇷 法国
      - 🇦🇺 澳大利亚
      - 🇬🇧 英国

  - name: 📁 GitHub
    type: select
    proxies:
      - 🚀 节点选择
      - 🇭🇰 香港
      - 🇭🇰 香港手动
      - 🇯🇵 日本
      - 🇯🇵 日本手动
      - 🇹🇼 台湾
      - 🇹🇼 台湾手动
      - 🇸🇬 新加坡
      - 🇸🇬 新加坡手动
      - 🇰🇷 韩国
      - 🇺🇸 美国
      - 🇩🇪 德国
      - 🇨🇦 加拿大
      - 🇮🇳 印度
      - 🇫🇷 法国
      - 🇦🇺 澳大利亚
      - 🇬🇧 英国
      - DIRECT

  - name: Ⓜ️ 微软服务
    type: select
    proxies:
      - DIRECT
      - 🚀 节点选择

  - name: 🍎 苹果服务
    type: select
    proxies:
      - DIRECT
      - 🚀 节点选择

  - name: 🇭🇰 香港
    type: url-test
    use:
      - mysub
    filter: "(?i)hk|hongkong|香港"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇭🇰 香港手动
    type: select
    use:
      - mysub
    filter: "(?i)hk|hongkong|香港"

  - name: 🇯🇵 日本
    type: url-test
    use:
      - mysub
    filter: "(?i)jp|japan|日本"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇯🇵 日本手动
    type: select
    use:
      - mysub
    filter: "(?i)jp|japan|日本"

  - name: 🇹🇼 台湾
    type: url-test
    use:
      - mysub
    filter: "(?i)tw|taiwan|台湾"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇹🇼 台湾手动
    type: select
    use:
      - mysub
    filter: "(?i)tw|taiwan|台湾"

  - name: 🇸🇬 新加坡
    type: url-test
    use:
      - mysub
    filter: "(?i)sg|singapore|新加坡"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇸🇬 新加坡手动
    type: select
    use:
      - mysub
    filter: "(?i)sg|singapore|新加坡"

  - name: 🇰🇷 韩国
    type: url-test
    use:
      - mysub
    filter: "(?i)kr|korea|southkorea|韩国"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇺🇸 美国
    type: url-test
    use:
      - mysub
    filter: "(?i)us|unitedstates|美国"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇩🇪 德国
    type: url-test
    use:
      - mysub
    filter: "(?i)de|germany|德国"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇨🇦 加拿大
    type: url-test
    use:
      - mysub
    filter: "(?i)ca|canada|加拿大"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50
  - name: 🇮🇳 印度
    type: url-test
    use:
      - mysub
    filter: "(?i)india|印度"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇫🇷 法国
    type: url-test
    use:
      - mysub
    filter: "(?i)fr|france|法国"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇦🇺 澳大利亚
    type: url-test
    use:
      - mysub
    filter: "(?i)au|australia|澳大利亚"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

  - name: 🇬🇧 英国
    type: url-test
    use:
      - mysub
    filter: "(?i)uk|gb|unitedkingdom|英国"
    url: http://www.gstatic.com/generate_204
    interval: 600
    tolerance: 50

#################################
# Rule Providers ACL4SSR
#################################
rule-providers:
  lan:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/LocalAreaNetwork.list
    path: ./ruleset/lan.yaml
    interval: 86400

  banad:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanAD.list
    path: ./ruleset/banad.yaml
    interval: 86400

  banprogram:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/BanProgramAD.list
    path: ./ruleset/banprogram.yaml
    interval: 86400

  googlecn:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/GoogleCN.list
    path: ./ruleset/googlecn.yaml
    interval: 86400

  steamcn:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/SteamCN.list
    path: ./ruleset/steamcn.yaml
    interval: 86400

  microsoft:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Microsoft.list
    path: ./ruleset/microsoft.yaml
    interval: 86400

  apple:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Apple.list
    path: ./ruleset/apple.yaml
    interval: 86400

  proxymedia:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ProxyMedia.list
    path: ./ruleset/proxymedia.yaml
    interval: 86400

  telegram:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Telegram.list
    path: ./ruleset/telegram.yaml
    interval: 86400

  github:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/Github.list
    path: ./ruleset/github.yaml
    interval: 86400

  proxylite:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ProxyLite.list
    path: ./ruleset/proxylite.yaml
    interval: 86400

  chinadomain:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaDomain.list
    path: ./ruleset/chinadomain.yaml
    interval: 86400

  chinacompanyip:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/ChinaCompanyIp.list
    path: ./ruleset/chinacompanyip.yaml
    interval: 86400

  youtube:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/YouTube.list
    path: ./ruleset/youtube.yaml
    interval: 86400
  ai:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/AI.list
    path: ./ruleset/ai.yaml
    interval: 86400
  openai:
    type: http
    behavior: classical
    format: text
    url: https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Ruleset/OpenAi.list
    path: ./ruleset/openai.yaml
    interval: 86400
  customdirect:
    type: http
    behavior: classical
    format: text
    url: https://gist.githubusercontent.com/sudowanderer/d120cf60a3e3d1193cd7954f28e161f2/raw/custom_direct.list
    path: ./ruleset/customdirect.yaml
    interval: 86400


#################################
# Rules
#################################
rules:
  # 家庭名 / 家庭网段必须放在通用 lan 规则之前
  # 在家 O2_5G → DIRECT；在外 → Home-TS（须已从跳过列表移除 192.168/100.64）
  # .lan 解析依赖上方 dns.nameserver-policy → 192.168.123.1
  - DOMAIN-SUFFIX,lan,🏠 家庭网络
  - IP-CIDR,192.168.123.0/24,🏠 家庭网络,no-resolve
  - IP-CIDR,100.64.0.0/10,🏠 Home-TS,no-resolve
  - DOMAIN-SUFFIX,ts.net,🏠 Home-TS

  - RULE-SET,lan,DIRECT
  - RULE-SET,banad,REJECT
  - RULE-SET,banprogram,REJECT
  - RULE-SET,googlecn,DIRECT
  - RULE-SET,steamcn,DIRECT
  - RULE-SET,customdirect,DIRECT
  - RULE-SET,microsoft,Ⓜ️ 微软服务
  - RULE-SET,apple,🍎 苹果服务
  - RULE-SET,youtube,📹 油管视频
  - RULE-SET,telegram,📲 电报信息
  - RULE-SET,ai,💬 Ai平台
  - RULE-SET,openai,💬 Ai平台
  - RULE-SET,proxymedia,🌍 国外媒体

  - RULE-SET,proxylite,🚀 节点选择
  - RULE-SET,chinadomain,DIRECT
  - RULE-SET,chinacompanyip,DIRECT
  - GEOIP,CN,DIRECT
  - GEOSITE,CN,DIRECT
  - MATCH,🐟 漏网之鱼