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 версии разделены.
Открываем каталог с конфигурацией: Config
– Open config folder
. Создаем свою конфигурацию в формате yaml. Под Windows: Profiles
– Import
.
Пример конфигуарации 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: error
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 Mode
– Rule
, включаем Set as system proxy
, выбираем через какой прокси пойдет трафик. На этом все, трафик на ресурсы, прописанные в правилах, пойдет через выбранный прокси-сервер.
Без дополнительных вложений прокси можно организовать с помощью tor-bridges-proxy. Docker-контейнер можно поднять одной командой на любом устройстве в вашей локальной сети, подключенном к сети Интернет. Будет поднят Tor и опубликован SOCKS 5 на порту 9150
, остается прописать его в конфигурации для Clash и трафик через SOCKS 5 в вашей локальной сети будет заворачиваться в Tor. У меня это работает на миниатюрном домашнем сервере. Если есть возможность приобрести VPS сервер вне российской юрисдикции, то я бы посоветовал настроить V2Ray (VMess + WebSocket + TLS + nginx + website). Но это тема для отдельной статьи.