Pixiv - Ashima
1307 字
7 分钟
更新OpenClash至0.47.088后配置策略组和分流规则
前言
今天想给0.47.055的OpenClash添加额外的策略组,但在尝试添加策略组时,发现无法正确添加。
看到有0.47.088的更新,更新后没想到居然是个破坏性更新,直接取消了WebUI的一键配置和规则附加。于是翻了翻Issue,发现覆写脚本很好用👍,逻辑和Clash-Verge-Rev的全局覆写脚本差不多。
步骤
根据脚本内提供的示例添加如下内容
#!/bin/sh. /usr/share/openclash/ruby.sh. /usr/share/openclash/log.sh. /lib/functions.sh
# This script is called by /etc/init.d/openclash# Add your custom overwrite scripts here, they will be take effict after the OpenClash own srcipts
LOG_OUT "Tip: Start Running Custom Overwrite Scripts..."LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S"))LOG_FILE="/tmp/openclash.log"#Config PathCONFIG_FILE="$1"
## Custom settings### add new proxy-group ruby_arr_insert_hash "$CONFIG_FILE" "['proxy-groups']" "0" "{'name'=>'Claude', 'type'=>'select', 'interval'=>300, 'include-all-proxies'=>true, 'filter'=>'台湾|日本|美国', 'icon'=>'https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/claude.svg'}" ruby_arr_insert_hash "$CONFIG_FILE" "['proxy-groups']" "0" "{'name'=>'ChatGPT', 'type'=>'select', 'interval'=>300, 'include-all-proxies'=>true, 'filter'=>'台湾|日本|美国', 'icon'=>'https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/chatgpt.svg'}"
#Simple Demo: #Key Overwrite Demo #1--config path #2--key name #3--value #ruby_edit "$CONFIG_FILE" "['redir-port']" "7892" #ruby_edit "$CONFIG_FILE" "['secret']" "123456" #ruby_edit "$CONFIG_FILE" "['dns']['enable']" "true" #ruby_edit "$CONFIG_FILE" "['dns']['proxy-server-nameserver']" "['https://doh.pub/dns-query','https://223.5.5.5:443/dns-query']"
#Hash Overwrite Demo #1--config path #2--key name #3--hash type value #ruby_edit "$CONFIG_FILE" "['dns']['nameserver-policy']" "{'+.msftconnecttest.com'=>'114.114.114.114', '+.msftncsi.com'=>'114.114.114.114', 'geosite:gfw'=>['https://dns.cloudflare.com/dns-query', 'https://dns.google/dns-query#ecs=1.1.1.1/24&ecs-override=true'], 'geosite:cn'=>['114.114.114.114'], 'geosite:geolocation-!cn'=>['https://dns.cloudflare.com/dns-query', 'https://dns.google/dns-query#ecs=1.1.1.1/24&ecs-override=true']}" #ruby_edit "$CONFIG_FILE" "['sniffer']" "{'enable'=>true, 'parse-pure-ip'=>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'], 'sniff'=>{'TLS'=>nil, 'HTTP'=>{'ports'=>[80, '8080-8880'], 'override-destination'=>true}}}"
#Hash Merge Demo #1--config path #2--key name #3--hash #ruby_merge_hash "$CONFIG_FILE" "['proxy-providers']" "'TW'=>{'type'=>'http', 'path'=>'./proxy_provider/TW.yaml', 'url'=>'https://gist.githubusercontent.com/raw/tw_clash', 'interval'=>3600, 'health-check'=>{'enable'=>true, 'url'=>'http://cp.cloudflare.com/generate_204', 'interval'=>300}}" #ruby_merge_hash "$CONFIG_FILE" "['rule-providers']" "'Reject'=>{'type'=>'http', 'behavior'=>'classical', 'url'=>'https://testingcf.jsdelivr.net/gh/dler-io/Rules@main/Clash/Provider/Reject.yaml', 'path'=>'./rule_provider/Reject', 'interval'=>86400}"
#Array Insert Value Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--value #ruby_arr_insert "$CONFIG_FILE" "['dns']['nameserver']" "0" "114.114.114.114"
#Array Insert Hash Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--hash #ruby_arr_insert_hash "$CONFIG_FILE" "['proxy-groups']" "0" "{'name'=>'Disney', 'type'=>'select', 'disable-udp'=>false, 'use'=>['TW', 'SG', 'HK']}" #ruby_arr_insert_hash "$CONFIG_FILE" "['proxies']" "0" "{'name'=>'HKG 01', 'type'=>'ss', 'server'=>'cc.hd.abc', 'port'=>'12345', 'cipher'=>'aes-128-gcm', 'password'=>'123456', 'udp'=>true, 'plugin'=>'obfs', 'plugin-opts'=>{'mode'=>'http', 'host'=>'microsoft.com'}}" #ruby_arr_insert_hash "$CONFIG_FILE" "['listeners']" "0" "{'name'=>'name', 'type'=>'shadowsocks', 'port'=>'12345', 'listen'=>'0.0.0.0', 'rule'=>'sub-rule-1', 'proxy'=>'proxy'}"
#Array Insert Other Array Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--array #ruby_arr_insert_arr "$CONFIG_FILE" "['dns']['proxy-server-nameserver']" "0" "['https://doh.pub/dns-query','https://223.5.5.5:443/dns-query']"
#Array Insert From Yaml File Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--value file path #5--value key name in #4 file #ruby_arr_add_file "$CONFIG_FILE" "['dns']['fallback-filter']['ipcidr']" "0" "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "['fallback-filter']['ipcidr']"
#Delete Array Value Demo: #1--config path #2--key name #3--value #ruby_delete "$CONFIG_FILE" "['dns']['nameserver']" "114.114.114.114"
#Delete Key Demo: #1--config path #2--key name #3--key name #ruby_delete "$CONFIG_FILE" "['dns']" "nameserver" #ruby_delete "$CONFIG_FILE" "" "dns"
#Ruby Script Demo: #ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " # begin # Value = YAML.load_file('$CONFIG_FILE'); # rescue Exception => e # puts '${LOGTIME} Error: Load File Failed,【' + e.message + '】'; # end;
#General # begin # Thread.new{ # Value['redir-port']=7892; # Value['tproxy-port']=7895; # Value['port']=7890; # Value['socks-port']=7891; # Value['mixed-port']=7893; # }.join;
# rescue Exception => e # puts '${LOGTIME} Error: Set General Failed,【' + e.message + '】'; # ensure # File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)}; # end" 2>/dev/null >> $LOG_FILE
exit 0重载后确实有了对应策略组,但在覆写设置配置页下的规则设置内添加的配置不生效,内核日志显示无法找到对应策略组。
应该是那里的配置比覆写模块的脚本更早加载导致的。
把这部分规则过滤转移到覆写模块脚本内即可。
## Claude
#- DOMAIN-SUFFIX,claude.ai,Claude#- DOMAIN-SUFFIX,claude.com,Claude
## GPT#- DOMAIN-SUFFIX,chatgpt.com,ChatGPT#- DOMAIN-SUFFIX,openai.com,ChatGPT### add new rules ruby_arr_insert_arr "$CONFIG_FILE" "['rules']" "0" "['DOMAIN-SUFFIX,claude.ai,Claude', 'DOMAIN-SUFFIX,claude.com,Claude', 'DOMAIN-SUFFIX,chatgpt.com,ChatGPT', 'DOMAIN-SUFFIX,openai.com,ChatGPT']"最后添加其他需要的规则过滤到覆写脚本内以及覆写设置配置页下的规则设置
#!/bin/sh. /usr/share/openclash/ruby.sh. /usr/share/openclash/log.sh. /lib/functions.sh
# This script is called by /etc/init.d/openclash# Add your custom overwrite scripts here, they will be take effict after the OpenClash own srcipts
LOG_OUT "Tip: Start Running Custom Overwrite Scripts..."LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S"))LOG_FILE="/tmp/openclash.log"#Config PathCONFIG_FILE="$1"
## Custom settings### add new proxy-group ruby_arr_insert_hash "$CONFIG_FILE" "['proxy-groups']" "0" "{'name'=>'Claude', 'type'=>'select', 'interval'=>300, 'include-all-proxies'=>true, 'filter'=>'台湾|日本|美国', 'icon'=>'https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/claude.svg'}" ruby_arr_insert_hash "$CONFIG_FILE" "['proxy-groups']" "0" "{'name'=>'ChatGPT', 'type'=>'select', 'interval'=>300, 'include-all-proxies'=>true, 'filter'=>'台湾|日本|美国', 'icon'=>'https://fastly.jsdelivr.net/gh/clash-verge-rev/clash-verge-rev.github.io@main/docs/assets/icons/chatgpt.svg'}"
### add new rules ruby_arr_insert_arr "$CONFIG_FILE" "['rules']" "0" "['DOMAIN-SUFFIX,claude.ai,Claude', 'DOMAIN-SUFFIX,claude.com,Claude', 'DOMAIN-SUFFIX,chatgpt.com,ChatGPT', 'DOMAIN-SUFFIX,openai.com,ChatGPT']"
### add new rule-providers ruby_merge_hash "$CONFIG_FILE" "['rule-providers']" "'AdBlock'=>{'type'=>'http', 'behavior'=>'classical', 'url'=>'https://fastly.jsdelivr.net/gh/dler-io/Rules@main/Clash/Provider/AdBlock.yaml', 'path'=>'./rule_provider/AdBlock', 'interval'=>86400}"
#Simple Demo: #Key Overwrite Demo #1--config path #2--key name #3--value #ruby_edit "$CONFIG_FILE" "['redir-port']" "7892" #ruby_edit "$CONFIG_FILE" "['secret']" "123456" #ruby_edit "$CONFIG_FILE" "['dns']['enable']" "true" #ruby_edit "$CONFIG_FILE" "['dns']['proxy-server-nameserver']" "['https://doh.pub/dns-query','https://223.5.5.5:443/dns-query']"
#Hash Overwrite Demo #1--config path #2--key name #3--hash type value #ruby_edit "$CONFIG_FILE" "['dns']['nameserver-policy']" "{'+.msftconnecttest.com'=>'114.114.114.114', '+.msftncsi.com'=>'114.114.114.114', 'geosite:gfw'=>['https://dns.cloudflare.com/dns-query', 'https://dns.google/dns-query#ecs=1.1.1.1/24&ecs-override=true'], 'geosite:cn'=>['114.114.114.114'], 'geosite:geolocation-!cn'=>['https://dns.cloudflare.com/dns-query', 'https://dns.google/dns-query#ecs=1.1.1.1/24&ecs-override=true']}" #ruby_edit "$CONFIG_FILE" "['sniffer']" "{'enable'=>true, 'parse-pure-ip'=>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'], 'sniff'=>{'TLS'=>nil, 'HTTP'=>{'ports'=>[80, '8080-8880'], 'override-destination'=>true}}}"
#Hash Merge Demo #1--config path #2--key name #3--hash #ruby_merge_hash "$CONFIG_FILE" "['proxy-providers']" "'TW'=>{'type'=>'http', 'path'=>'./proxy_provider/TW.yaml', 'url'=>'https://gist.githubusercontent.com/raw/tw_clash', 'interval'=>3600, 'health-check'=>{'enable'=>true, 'url'=>'http://cp.cloudflare.com/generate_204', 'interval'=>300}}" #ruby_merge_hash "$CONFIG_FILE" "['rule-providers']" "'Reject'=>{'type'=>'http', 'behavior'=>'classical', 'url'=>'https://testingcf.jsdelivr.net/gh/dler-io/Rules@main/Clash/Provider/Reject.yaml', 'path'=>'./rule_provider/Reject', 'interval'=>86400}"
#Array Insert Value Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--value #ruby_arr_insert "$CONFIG_FILE" "['dns']['nameserver']" "0" "114.114.114.114"
#Array Insert Hash Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--hash #ruby_arr_insert_hash "$CONFIG_FILE" "['proxy-groups']" "0" "{'name'=>'Disney', 'type'=>'select', 'disable-udp'=>false, 'use'=>['TW', 'SG', 'HK']}" #ruby_arr_insert_hash "$CONFIG_FILE" "['proxies']" "0" "{'name'=>'HKG 01', 'type'=>'ss', 'server'=>'cc.hd.abc', 'port'=>'12345', 'cipher'=>'aes-128-gcm', 'password'=>'123456', 'udp'=>true, 'plugin'=>'obfs', 'plugin-opts'=>{'mode'=>'http', 'host'=>'microsoft.com'}}" #ruby_arr_insert_hash "$CONFIG_FILE" "['listeners']" "0" "{'name'=>'name', 'type'=>'shadowsocks', 'port'=>'12345', 'listen'=>'0.0.0.0', 'rule'=>'sub-rule-1', 'proxy'=>'proxy'}"
#Array Insert Other Array Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--array #ruby_arr_insert_arr "$CONFIG_FILE" "['dns']['proxy-server-nameserver']" "0" "['https://doh.pub/dns-query','https://223.5.5.5:443/dns-query']"
#Array Insert From Yaml File Demo: #1--config path #2--key name #3--position(start from 0, end with -1) #4--value file path #5--value key name in #4 file #ruby_arr_add_file "$CONFIG_FILE" "['dns']['fallback-filter']['ipcidr']" "0" "/etc/openclash/custom/openclash_custom_fallback_filter.yaml" "['fallback-filter']['ipcidr']"
#Delete Array Value Demo: #1--config path #2--key name #3--value #ruby_delete "$CONFIG_FILE" "['dns']['nameserver']" "114.114.114.114"
#Delete Key Demo: #1--config path #2--key name #3--key name #ruby_delete "$CONFIG_FILE" "['dns']" "nameserver" #ruby_delete "$CONFIG_FILE" "" "dns"
#Ruby Script Demo: #ruby -ryaml -rYAML -I "/usr/share/openclash" -E UTF-8 -e " # begin # Value = YAML.load_file('$CONFIG_FILE'); # rescue Exception => e # puts '${LOGTIME} Error: Load File Failed,【' + e.message + '】'; # end;
#General # begin # Thread.new{ # Value['redir-port']=7892; # Value['tproxy-port']=7895; # Value['port']=7890; # Value['socks-port']=7891; # Value['mixed-port']=7893; # }.join;
# rescue Exception => e # puts '${LOGTIME} Error: Set General Failed,【' + e.message + '】'; # ensure # File.open('$CONFIG_FILE','w') {|f| YAML.dump(Value, f)}; # end" 2>/dev/null >> $LOG_FILE
exit 0# Custom settings## AdBlock- RULE-SET,AdBlock,REJECT## BT- GEOSITE,category-public-tracker,DIRECT## - SRC-PORT,29290,DIRECT- SRC-IP-CIDR,192.168.3.100/32,DIRECT
## my domain- DOMAIN-SUFFIX,cedon.cn,DIRECT- DOMAIN-SUFFIX,cedon.org,DIRECT
### In openclash-custom-overwrite.sh## Claude#- DOMAIN-SUFFIX,claude.ai,Claude#- DOMAIN-SUFFIX,claude.com,Claude
## GPT#- DOMAIN-SUFFIX,chatgpt.com,ChatGPT#- DOMAIN-SUFFIX,openai.com,ChatGPT
## Steam- DOMAIN,cm.steampowered.com,DIRECT- DOMAIN,ol.epicgames.com,DIRECT- DOMAIN-SUFFIX,steamcontent.com,DIREC- DOMAIN-SUFFIX,steamserver.net,DIRECT
- DOMAIN-SUFFIX,steamchina.com,DIRECT
- DOMAIN,csgo.wmsj.cn,DIRECT- DOMAIN,dota2.wmsj.cn,DIRECT- DOMAIN,wmsjsteam.com,DIRECT
- DOMAIN,dl.steam.clngaa.com,DIRECT- DOMAIN,dl.steam.ksyna.com,DIRECT
- DOMAIN,gstore.val.manlaxy.com,DIRECT
- DOMAIN,st.dl.bscstorage.net,DIRECT- DOMAIN,st.dl.eccdnx.com,DIRECT- DOMAIN,st.dl.pinyuncloud.com,DIRECT
- DOMAIN,steampipe.steamcontent.tnkjmec.com,DIRECT
- DOMAIN,steampowered.com.8686c.com,DIRECT- DOMAIN,steamstatic.com.8686c.com,DIRECT
- DOMAIN,steambroadcast.akamaized.net,DIRECT- DOMAIN,steamcdn-a.akamaihd.net,DIRECT- DOMAIN,steamcommunity-a.akamaihd.net,DIRECT- DOMAIN,steamstore-a.akamaihd.net,DIRECT- DOMAIN,steamusercontent-a.akamaihd.net,DIRECT- DOMAIN,steamuserimages-a.akamaihd.net,DIRECT
## Private Tracker- DOMAIN-SUFFIX,audiences.me,DIRECT- DOMAIN-SUFFIX,awesome-hd.me,DIRECT- DOMAIN-SUFFIX,broadcasthe.net,DIRECT- DOMAIN-SUFFIX,chdbits.co,DIRECT- DOMAIN-SUFFIX,classix-unlimited.co.uk,DIRECT- DOMAIN-SUFFIX,dmhy.best,DIRECT- DOMAIN-SUFFIX,empornium.me,DIRECT- DOMAIN-SUFFIX,gazellegames.net,DIRECT- DOMAIN-SUFFIX,hdchina.org,DIRECT- DOMAIN-SUFFIX,hdsky.me,DIRECT- DOMAIN-SUFFIX,icetorrent.org,DIRECT- DOMAIN-SUFFIX,jpopsuki.eu,DIRECT- DOMAIN-SUFFIX,keepfrds.com,DIRECT- DOMAIN-SUFFIX,madsrevolution.net,DIRECT- DOMAIN-SUFFIX,m-team.cc,DIRECT- DOMAIN-SUFFIX,nanyangpt.com,DIRECT- DOMAIN-SUFFIX,ncore.cc,DIRECT- DOMAIN-SUFFIX,open.cd,DIRECT- DOMAIN-SUFFIX,ourbits.club,DIRECT- DOMAIN-SUFFIX,passthepopcorn.me,DIRECT- DOMAIN-SUFFIX,privatehd.to,DIRECT- DOMAIN-SUFFIX,redacted.ch,DIRECT- DOMAIN-SUFFIX,sandai.net,DIRECT- DOMAIN-SUFFIX,springsunday.net,DIRECT- DOMAIN-SUFFIX,tjupt.org,DIRECT- DOMAIN-SUFFIX,totheglory.im,DIRECT- DOMAIN-SUFFIX,audiences.me,DIRECT
- DOMAIN-KEYWORD,announce,DIRECT- DOMAIN-KEYWORD,torrent,DIRECT- DOMAIN-SUFFIX,smtp,DIRECTReferences
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
更新OpenClash至0.47.088后配置策略组和分流规则
https://blog.cedon.cn/posts/system-ops/reconfigure-openclash/