logo

Clash

Clash - это прокси-сервер написанный на Go, который использует правила для проксирования запросов. Основная область применения - это выборочный обход блокировок, вместо заворачивания всего трафика в прокси. Плюс такого подхода в том, что если правительство начинает целенаправленно бороться с впн/прокси (Китай, Туркменистан), то клиент постоянно подключенный к одному айпи, который находится за пределами страны вызывает подозрения, а айпи банится. Для РФ это не особо актуально, но раз смог Туркменистан, то возможно сможет и РКН. Так же, часть сайтов сознательно отгородились от РФ (Dell, Oracle, Microsoft, Spotify и т.д.). Главные плюсы Clash - это невероятная гибкость, так как можно писать правила основанные на доменах, суффиксах, вайлдкардах, пространствах айпи, можно редактировать запросы скриптами, перенаправлять запросы с помощью политик. При этом само написание правил понятно любому человеку. Так же есть встроенный днс-сервер и поддержка DoH/DoT.

Clash имеет несколько версий, а именно:

  • Clash
    • Опенсорс, отсутствует часть функций, таких как Rule Providers, Скрипты, Поддержка TUN
    • Билд с закрытым исходным кодом, который компилируется на макбуке автора. Те же фичи, что и в опенсорс версии, плюс поддержка скриптов, tun, rule providers.
  • Clash.Meta Core
    • Опенсорс, поддержка дополнительных протоколов (например Hysteria) и еще несколько своих уникальных фич

Так как смысла в использовании оригинальной версии не много, то рекомендую Clash.Meta Core, к тому же практически все клиенты для ШINDOШС его поддерживают, например Clash Verge и clashN.

Сам конфиг минималистичен, это файл в формате yaml (как и все, что касается конфигов и правил Clash). Условно весь конфиг можно разбить на 3 блока. А именно:

  • Базовые настройки (порт для прокси, днс, tun-режим)
  • Список прокси с их данными, группы прокси
  • Правила для проксификации

В качестве примера, я буду использовать свой конфиг:

Основные настройки

mixed-port: 7890 # http/socks на одном порту

allow-lan: false # разрешать lan-соединения, к примеру при использовании виртуального роутера               
bind-address: # функция нужна при включении allow-lan, для привязки к определенному айпи                 
  '*'                             

mode: rule # режим работы, rule - использовать правила, так же можно использовать global и direct              

log-level: debug # уровень информативности лога, так же есть info / warning / error / silent         

ipv6: false # отключение ipv6          

profile: # кэширование настроек в файл cache.db             
  store-fake-ip: true #кэширование фейковых айпи, Clash умеет в rfc3089, так же как Proxifier, а именно брать родной днс от прокси

dns: # настройки днс-сервера Clash
  enable: true                
  listen: 0.0.0.0:53           

  default-nameserver: # днс-сервер используемый по-умолчанию      
    - 1.1.1.1

  enhanced-mode: fake-ip  # режим работы с днс-серверами, fake-ip/redirect       

  fake-ip-range: 198.18.0.1/16 # диапазон айпи для режима fake-ip       

  nameserver: # еще один днс                       
    -  8.8.8.8

  fallback: # и еще, если вдруг остальные умерли                         
    - 1.0.0.1

geodata-mode: true  # позволяет использовать файл геодаты v2ray      
tcp-concurrent: true  # если домен находится на нескольких айпи, то будет выбран айпи с самым быстрым хендшейком    

Настройки прокси

proxies:
    #Hysteria
  - name: "hysteria"
    type: hysteria
    server: 1.2.3.4
    port: 1234
    auth_str: 123456
    obfs: 123456
    alpn: h3
    protocol: wechat-video        
    up: '500 Mbps'          
    down: '500 Mbps'       
    sni: aws.lol
    skip-cert-verify: false
    recv_window_conn: 15728640
    recv_window: 67108864

  #Vless
  - name: "vless-xtls"
    type: vless
    server: webgame.aws.art
    port: 443
    uuid: 123456
    network: tcp
    servername: webgame.aws.art 
    flow: xtls-rprx-direct 

  #Vless   
  - name: "vless-ws"
    type: vless
    server: aws.art
    port: 443
    uuid 123456
    udp: true
    tls: true
    network: ws
    servername: aws.art 
    # skip-cert-verify: true
    ws-opts:
      path: "/vless"
      headers:
        Host: aws.art

  # Shadowsocks
  #   aes-128-gcm aes-192-gcm aes-256-gcm
  #   aes-128-cfb aes-192-cfb aes-256-cfb
  #   aes-128-ctr aes-192-ctr aes-256-ctr
  #   rc4-md5 chacha20-ietf xchacha20
  #   chacha20-ietf-poly1305 xchacha20-ietf-poly1305
  #   2022-blake3-aes-128-gcm
  #   2022-blake3-aes-256-gcm
  #   2022-blake3-chacha20-poly1305
  - name: "ss"
    type: ss
    server: 1.2.3.4
    port: 8080
    cipher: 2022-blake3-chacha20-poly1305 
    password: "123456"
    udp: true

  # vmess
  # auto/aes-128-gcm/chacha20-poly1305/none
  - name: "vmess-cf"
    type: vmess
    server: aws.art
    port: 443
    uuid: 123456
    alterId: 0
    cipher: chacha20-poly1305
    tls: true
    network: ws
    ws-opts:
       path: /vmess
       headers:
         Host: aws.art

  # Snell
  - name: "snell"
    type: snell
    server: 1.2.3.4
    port: 32681
    psk: 123456
    obfs-opts:
      mode: tls # or tls
      host: kremlin.ru

  - name: trojan-tls
    server: 1.2.3.4
    port: 20003
    type: trojan
    password: 123456
    network: tcp
    sni: webgame2.aws.art
    udp: true
    servername: webgame2.aws.art 
    flow: xtls-rprx-direct 

Группы прокси

все прокси можно объединять в группы, как для удобства так и для более гибкого проксирования

proxy-groups:
  # url-test select which proxy will be used by benchmarking speed to a URL.
  - name: "auto"
    type: url-test
    proxies:
      - hysteria
      - vless-xtls
      - vless-ws
      - ss
      - vmess-cf
      - snell
      - trojan-tls
    url: 'http://www.gstatic.com/generate_204'
    interval: 300

  # fallback selects an available policy by priority. The availability is tested by accessing an URL, just like an auto url-test group.
  - name: "fallback-auto"
    type: fallback
    proxies:
      - hysteria
      - vless-xtls
      - vless-ws
      - ss
      - vmess-cf
      - snell
      - trojan-tls
    url: 'http://www.gstatic.com/generate_204'
    interval: 300

  # load-balance: The request of the same eTLD+1 will be dial to the same proxy.
  - name: "load-balance"
    type: load-balance
    proxies:
      - hysteria
      - vless-xtls
      - vless-ws
      - ss
      - vmess-cf
      - snell
      - trojan-tls
    url: 'http://www.gstatic.com/generate_204'
    interval: 300
    strategy: round-robin # or consistent-hashing

  # select is used for selecting proxy or proxy group
  # you can use RESTful API to switch proxy is recommended for use in GUI.
  - name: PROXY
    type: select
    proxies:
      - auto

Rule Providers

Rule Providers это файлы в yaml формате, в которых указаны домены/суффиксы/пространства айпи адресов для проксификации.

rule-providers:
  antifilter:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/cornoctopus/vault/main/antifilter.yaml"
    path: ./ruleset/antifilter.yaml

  nhentai:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/cornoctopus/vault/main/nhentai.yaml"
    path: ./ruleset/nhentai.yaml  

  oracle:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/cornoctopus/vault/main/oracle.yaml"
    path: ./ruleset/oracle.yaml

  vk:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/VK/VK.yaml"
    interval: 86400
    path: ./ruleset/vk.yaml

  protonmail:
    behavior: classical
    type: http
    url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Protonmail/Protonmail.yaml"
    interval: 86400
    path: ./ruleset/protonmail.yaml

  intel:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Intel/Intel.yaml"
    interval: 86400
    path: ./ruleset/intel.yaml

  microsoft:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Microsoft/Microsoft.yaml"
    interval: 86400
    path: ./ruleset/microsoft.yaml

  xbox:
    behavior: classical
    type: http
    url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Xbox/Xbox.yaml"
    interval: 86400
    path: ./ruleset/xbox.yaml

  advertising:
    behavior: classical
    type: http
    url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Advertising/Advertising.yaml"
    interval: 86400
    path: ./ruleset/advertising.yaml    

  advertising_domain:
    behavior: domain
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Advertising/Advertising_Domain.yaml"
    interval: 86400
    path: ./ruleset/advertising_domain.yaml

  privacy:
    behavior: classical
    type: http
    url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Privacy/Privacy.yaml"
    interval: 86400
    path: ./ruleset/privacy.yaml    

  privacy_domain:
    behavior: domain
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Privacy/Privacy_Domain.yaml"
    interval: 86400
    path: ./ruleset/privacy_domain.yaml

  telegram:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Telegram/Telegram.yaml"
    interval: 86400
    path: ./ruleset/telegram.yaml

  twitter:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Twitter/Twitter.yaml"
    interval: 86400
    path: ./ruleset/twitter.yaml

  instagram:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Instagram/Instagram.yaml"
    interval: 86400
    path: ./ruleset/instagram.yaml

  facebook:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Facebook/Facebook.yaml"
    interval: 86400
    path: ./ruleset/facebook.yaml    

  deezer:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Deezer/Deezer.yaml"
    interval: 86400
    path: ./ruleset/deezer.yaml    

  spotify:
    behavior: classical
    type: http
    url: "https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/Spotify/Spotify.yaml"
    interval: 86400
    path: ./ruleset/spotify.yaml

  tidal:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/TIDAL/TIDAL.yaml"
    interval: 86400
    path: ./ruleset/tidal.yaml

  antifilter_ip:
    behavior: ipcidr
    type: http
    url: "https://raw.githubusercontent.com/cornoctopus/vault/main/antifilter_ip.yaml"
    interval: 86400
    path: ./ruleset/antifilter_ip

То, как именно Clash должен обрабатывать списки ресурсов из файлов rule providers

rules:
  - RULE-SET,antifilter_ip,PROXY
  - RULE-SET,nhentai,PROXY
  - RULE-SET,deezer,PROXY
  - RULE-SET,spotify,PROXY
  - RULE-SET,tidal,PROXY
  - RULE-SET,antifilter,PROXY
  - RULE-SET,oracle,PROXY  
  - RULE-SET,vk,PROXY
  - RULE-SET,antifilter,PROXY
  - RULE-SET,oracle,PROXY
  - RULE-SET,telegram,PROXY
  - RULE-SET,twitter,PROXY
  - RULE-SET,instagram,PROXY
  - RULE-SET,facebook,PROXY
  - RULE-SET,protonmail,PROXY
  - RULE-SET,intel,PROXY
  - RULE-SET,microsoft,PROXY
  - RULE-SET,xbox,PROXY
  - RULE-SET,advertising,REJECT
  - RULE-SET,advertising_domain,REJECT
  - RULE-SET,privacy,REJECT
  - RULE-SET,privacy_domain,REJECT
  - GEOSITE,category-ads-all,REJECT
  - MATCH,DIRECT

Теоретически в данном конфиге не нужно менять ничего, кроме:

  • DNS
  • Данных прокси
  • Логично, что отредактировав прокси, нужно отредактировать и блок proxy groups
  • Блоки Rule Providers/Rules. Если убираете провайдера twitter, то соответственно его нужно убрать и из блока rules

Мониторить состояние Clash можно в:

  • Терминале
  • Клиентах, например Clash Verge и clashN
  • Веб-интерфейсе, например для Clash и для Clash.Meta. Для этого нужно будет либо запустить дашборд в докере, либо собрать его из исходников (сам дашборд написан на js). После чего добавить в конфиг:
    external-controller: 127.0.0.1:9090 # айпи и порт дашборда
    external-ui: folder # папка куда вы положили файлы дашборда, например d:\files\dashboard
    

Выглядит это примерно так

Более подробно о настройке Clash можно найти здесь, для Clash.Meta здесь.

Дополнительные правила для огромного количества сайтов от Blackmatrix7 здесь и мои правила в основном для РКН, antifilter содержит доменные имена, а аntifilter_ip - IP CIDR.

Правила созданы на основе community-списка от antifilter.download.

В качестве бэкенда используется Xray-core

Клиенты для Clash

Windows
Mac
OpenWRT
Merlin
Android
iOS
Edit
Pub: 03 Sep 2022 01:51 UTC
Edit: 04 Sep 2022 13:35 UTC
Views: 1193