Clash - выборочный обход блокировок

В предыдущей публикации вы уже познакомились со списками с правилами в формате Clash. Теперь хотел бы более подробно ознакомить вас с Clash и привести пример конфигурации. Данный инструмент для построения туннелей на основе правил практически не упоминается в русскоязычном сегменте сети Интернет. При этом Clash очень активно используется в Китае. Поддерживает протоколы VMess/Shadowsocks/Trojan/Snell и SOCKS 5.

Приложение мультиплатформенное, ядро написано на Go. При этом под macOS, Windows и Android есть версии с удобным GUI.

Clash Core & Premium core: https://github.com/Dreamacro/clash
ClashX for macOS: https://github.com/yichengchen/clashX
ClashX Pro for macOS (Premium core – бесплатно навсегда, но с закрытым исходным кодом): https://install.appcenter.ms/users/clashx/apps/clashx-pro/distribution_groups/public
Clash for Windows: https://github.com/Fndroid/clash_for_windows_pkg/releases
Clash for Android: https://play.google.com/store/apps/details?id=com.github.kr328.clash

Нам интересна версия с premium core, поддерживающая Rule Providers, именно эти правила будут подтягиваться с clash-antifilter-lists. Под Windows и Android premium core идет по умолчанию. Под macOS версии разделены.

Открываем каталог с конфигурацией: ConfigOpen config folder. Создаем свою конфигурацию в формате yaml. Под Windows: ProfilesImport.

Пример конфигуарации zerolab.yaml:

# (HTTP and SOCKS5 in one port)
mixed-port: 7890
# RESTful API for clash
# external-controller: 127.0.0.1:9090
allow-lan: false
mode: rule
log-level: warning

proxies:
  # Shadowsocks
  # The supported ciphers (encryption methods):
  #   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
  - name: "NL-shadowsocks"
    type: ss
    server: server_address
    port: 28305
    cipher: chacha20-ietf-poly1305
    password: "password"
    # udp: true

  # vmess
  # cipher support auto/aes-128-gcm/chacha20-poly1305/none
  - name: "UK-sitename.net"
    type: vmess
    server: sitename.net
    port: 443
    uuid: 01a961d0-fed4-48ff-83e9-4f31b2a878ab
    alterId: 0
    cipher: auto
    udp: true
    tls: true
    # skip-cert-verify: true
    servername: sitename.net # priority over wss host
    network: ws
    ws-opts:
      path: /secret-path
      # headers:
      #   Host: sitename.net

  # socks5
  - name: "Tor"
    type: socks5
    server: 192.168.1.3
    port: 9150
    # username: username
    # password: password
    # tls: true
    # skip-cert-verify: true
    # udp: true

proxy-groups:
  # 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
    # disable-udp: true
    proxies:
      - NL-shadowsocks
      - UK-sitename.net
      - Tor

# Premium core only (domain, ipcidr or classical)
rule-providers:
  1st_of_all:
    behavior: classical
    type: http
    url: "http://YOUR_IP:8080/1st_of_all.yaml"
    interval: 3600
    path: ./ruleset/1st_of_all.yaml
  antifilter:
    behavior: classical
    type: http
    url: "http://YOUR_IP:8080/antifilter.yaml"
    interval: 43200
    path: ./ruleset/antifilter.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
  telegram_resolve:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Telegram/Telegram_Resolve.yaml"
    interval: 86400
    path: ./ruleset/telegram_resolve.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
  twitter_resolve:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Twitter/Twitter_Resolve.yaml"
    interval: 86400
    path: ./ruleset/twitter_resolve.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
  facebook_resolve:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/Facebook/Facebook_Resolve.yaml"
    interval: 86400
    path: ./ruleset/facebook_resolve.yaml
  youtube:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/YouTube/YouTube.yaml"
    interval: 86400
    path: ./ruleset/youtube.yaml
  youtube_resolve:
    behavior: classical
    type: http
    url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/YouTube/YouTube_Resolve.yaml"
    interval: 86400
    path: ./ruleset/youtube_resolve.yaml

rules:
  - RULE-SET,1st_of_all,PROXY
  - RULE-SET,antifilter,PROXY
  - RULE-SET,telegram,PROXY
  - RULE-SET,telegram_resolve,PROXY
  - RULE-SET,twitter,PROXY
  - RULE-SET,twitter_resolve,PROXY
  - RULE-SET,instagram,PROXY
  - RULE-SET,facebook,PROXY
  - RULE-SET,facebook_resolve,PROXY
  # - RULE-SET,youtube,PROXY
  # - RULE-SET,youtube_resolve,PROXY
  - MATCH,DIRECT

В примере используются как списки из clash-antifilter-lists, так и заботливо собранные китайским пользователем blackmatrix7 на GitHub автообновляемые списки правил для всевозможных популярных сервисов. Пригодится вам, если не будете пользоваться antifilter правилами (в нем тысячи адресов и мобильные устройства могут плохо переваривать такое количество). Это наиболее полные списки, агрегируемые с нескольких источников (если вам известны другие полезные списки, не покрываемые этими, то напишите в комментариях). Пользуйтесь, при необходимости.

Правила можно прописать и напрямую в конфигурацию. Это приемлемо, если у вас небольшое количество ресурсов, доступ к которым необходимо предоставить через прокси. Использование Rule Providers позволяет не трогать основную конфигурацию, это удобно при использовании Clash на нескольких устройствах, а особенно это удобно при централизованном использовании Clash на вашем роутере (об этом поговорим в следующей статье). Интервал автоматического обновления прописывается в каждом правиле (interval: в секундах), для своих правил его целесообразно выставить в минимальное значение. Так же вручную запросить обновление правил всегда оперативно можно в Dashboard, идущего с приложением.

Выбираем режим работы – Proxy ModeRule, включаем Set as system proxy, выбираем через какой прокси пойдет трафик. На этом все, трафик на ресурсы, прописанные в правилах, пойдет через выбранный прокси-сервер.

Без дополнительных вложений прокси можно организовать с помощью tor-bridges-proxy. Docker-контейнер можно поднять одной командой на любом устройстве в вашей локальной сети, подключенном к сети Интернет. Будет поднят Tor и опубликован SOCKS 5 на порту 9150, остается прописать его в конфигурации для Clash и трафик через SOCKS 5 в вашей локальной сети будет заворачиваться в Tor. У меня это работает на миниатюрном домашнем сервере. Если есть возможность приобрести VPS сервер вне российской юрисдикции, то я бы посоветовал настроить V2Ray (VMess + WebSocket  + TLS + nginx + website). Но это тема для отдельной статьи.