diff --git a/LICENSE b/LICENSE index cd2becfb04..b130363c31 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2019 vernesong - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2019 vernesong + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 6e82fe7932..6f97ba633e 100644 --- a/README.md +++ b/README.md @@ -1,142 +1,142 @@ -

- Clash -
OpenClash
- -

- -

- - - - - - - - - -

- - -

-本插件是一个可运行在 OpenWrt 上的 Clash 客户端 -

-

-兼容 Shadowsocks、Vmess 等协议,根据灵活的规则配置实现策略代理 -

-

-- 感谢 frainzy1477 ,本插件基于 Luci For Clash 进行二次开发 - -

- -使用手册 ---- - - -* [Wiki](https://github.com/vernesong/OpenClash/wiki) - - -下载地址 ---- - - -* IPK [前往下载](https://github.com/vernesong/OpenClash/releases) - - -依赖 ---- - -* luci -* luci-base -* iptables -* dnsmasq-full -* coreutils -* coreutils-nohup -* bash -* wget - - -编译 ---- - - -从 OpenWrt 的 [SDK](http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk) 编译 -```bash -# 解压下载好的 SDK -tar xjf OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 -cd OpenWrt-SDK-ar71xx-* - -# Clone 项目 -mkdir package/luci-app-openclash -cd package/luci-app-openclash -git init -git remote add -f origin https://github.com/vernesong/OpenClash.git -git config core.sparsecheckout true -echo "luci-app-openclash" >> .git/info/sparse-checkout -git pull origin master -git branch --set-upstream-to=origin/master master - -# 编译 po2lmo (如果有po2lmo可跳过) -pushd package/luci-app-openclash/luci-app-openclash/tools/po2lmo -make && sudo make install -popd - -# 选择要编译的包 LuCI -> Applications -> luci-app-openclash -make menuconfig - -# 开始编译 -make package/luci-app-openclash/luci-app-openclash/compile V=99 - -# 您也可以直接拷贝 `luci-app-openclash` 文件夹至其他 `OpenWrt` 项目的 `Package` 目录下随固件编译 -``` - - -许可 ---- - - -* [MIT License](https://github.com/vernesong/OpenClash/blob/master/LICENSE) -* 内核 [clash](https://github.com/Dreamacro/clash) by [Dreamacro](https://github.com/Dreamacro) -* 本项目代码基于 [Luci For Clash](https://github.com/frainzy1477/luci-app-clash) by [frainzy1477](https://github.com/frainzy1477) -* GEOIP数据库 [GeoLite2](https://dev.maxmind.com/geoip/geoip2/geolite2/) by [MaxMind](https://www.maxmind.com) -* IP检查 [MyIP](https://github.com/SukkaW/MyIP) by [SukkaW](https://github.com/SukkaW) -* 控制面板 [clash-dashboard](https://github.com/Dreamacro/clash-dashboard) by [Dreamacro](https://github.com/Dreamacro) -* 控制面板 [yacd](https://github.com/haishanh/yacd) by [haishanh](https://github.com/haishanh) - - -请作者喝杯咖啡 ---- - -* 比特币-BTC -

- -

- -* 以太币-ETH -

- -

- - -预览 ---- - - -* 运行状态 -

- -

- -* 接管设置 -

- -

- -* 配置文件 -

- -

- -* 运行日志 -

- -

- +

+ Clash +
OpenClash
+ +

+ +

+ + + + + + + + + +

+ + +

+本插件是一个可运行在 OpenWrt 上的 Clash 客户端 +

+

+兼容 Shadowsocks、Vmess 等协议,根据灵活的规则配置实现策略代理 +

+

+- 感谢 frainzy1477 ,本插件基于 Luci For Clash 进行二次开发 - +

+ +使用手册 +--- + + +* [Wiki](https://github.com/vernesong/OpenClash/wiki) + + +下载地址 +--- + + +* IPK [前往下载](https://github.com/vernesong/OpenClash/releases) + + +依赖 +--- + +* luci +* luci-base +* iptables +* dnsmasq-full +* coreutils +* coreutils-nohup +* bash +* wget + + +编译 +--- + + +从 OpenWrt 的 [SDK](http://wiki.openwrt.org/doc/howto/obtain.firmware.sdk) 编译 +```bash +# 解压下载好的 SDK +tar xjf OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 +cd OpenWrt-SDK-ar71xx-* + +# Clone 项目 +mkdir package/luci-app-openclash +cd package/luci-app-openclash +git init +git remote add -f origin https://github.com/vernesong/OpenClash.git +git config core.sparsecheckout true +echo "luci-app-openclash" >> .git/info/sparse-checkout +git pull origin master +git branch --set-upstream-to=origin/master master + +# 编译 po2lmo (如果有po2lmo可跳过) +pushd package/luci-app-openclash/luci-app-openclash/tools/po2lmo +make && sudo make install +popd + +# 选择要编译的包 LuCI -> Applications -> luci-app-openclash +make menuconfig + +# 开始编译 +make package/luci-app-openclash/luci-app-openclash/compile V=99 + +# 您也可以直接拷贝 `luci-app-openclash` 文件夹至其他 `OpenWrt` 项目的 `Package` 目录下随固件编译 +``` + + +许可 +--- + + +* [MIT License](https://github.com/vernesong/OpenClash/blob/master/LICENSE) +* 内核 [clash](https://github.com/Dreamacro/clash) by [Dreamacro](https://github.com/Dreamacro) +* 本项目代码基于 [Luci For Clash](https://github.com/frainzy1477/luci-app-clash) by [frainzy1477](https://github.com/frainzy1477) +* GEOIP数据库 [GeoLite2](https://dev.maxmind.com/geoip/geoip2/geolite2/) by [MaxMind](https://www.maxmind.com) +* IP检查 [MyIP](https://github.com/SukkaW/MyIP) by [SukkaW](https://github.com/SukkaW) +* 控制面板 [clash-dashboard](https://github.com/Dreamacro/clash-dashboard) by [Dreamacro](https://github.com/Dreamacro) +* 控制面板 [yacd](https://github.com/haishanh/yacd) by [haishanh](https://github.com/haishanh) + + +请作者喝杯咖啡 +--- + +* 比特币-BTC +

+ +

+ +* 以太币-ETH +

+ +

+ + +预览 +--- + + +* 运行状态 +

+ +

+ +* 接管设置 +

+ +

+ +* 配置文件 +

+ +

+ +* 运行日志 +

+ +

+ diff --git a/core_version b/core_version index 4e23fb3c97..c133dbcf4b 100644 --- a/core_version +++ b/core_version @@ -1 +1 @@ -v0.15.0-32-g0d51877 +v0.15.0-32-g0d51877 diff --git a/luci-app-openclash/Makefile b/luci-app-openclash/Makefile index 7b20031ad0..363815cda5 100644 --- a/luci-app-openclash/Makefile +++ b/luci-app-openclash/Makefile @@ -1,120 +1,120 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.34.3 -PKG_RELEASE:=beta -PKG_MAINTAINER:=vernesong - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) - -include $(INCLUDE_DIR)/package.mk - -define Package/$(PKG_NAME) - CATEGORY:=LuCI - SUBMENU:=3. Applications - TITLE:=LuCI support for clash - PKGARCH:=all - DEPENDS:=+iptables +dnsmasq-full +coreutils +coreutils-nohup +bash +wget - MAINTAINER:=vernesong -endef - -define Package/$(PKG_NAME)/description - A LuCI support for clash -endef - -define Package/$(PKG_NAME)/postinst -endef - -define Build/Prepare - $(foreach po,$(wildcard ${CURDIR}/i18n/zh-cn/*.po), \ - po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) - chmod 0755 ${CURDIR}/files/etc/init.d/openclash - chmod -R 0755 ${CURDIR}/files/usr/share/openclash/ -endef - -define Build/Configure -endef - -define Build/Compile -endef - -define Package/$(PKG_NAME)/preinst -#!/bin/sh -if [ -f "/etc/config/openclash" ]; then - cp "/etc/config/openclash" "/tmp/openclash.bak" 2>/dev/null - cp "/etc/config/openclash_custom_rules.list" "/tmp/openclash_custom_rules.list.bak" 2>/dev/null - cp "/etc/config/openclash_custom_hosts.list" "/tmp/openclash_custom_hosts.list.bak" 2>/dev/null - cp "/etc/config/openclash_custom_fake_black.conf" "/tmp/openclash_custom_fake_black.conf.bak" 2>/dev/null -fi -endef - -define Package/$(PKG_NAME)/postinst -#!/bin/sh -uci delete ucitrack.@openclash[-1] >/dev/null 2>&1 -uci add ucitrack openclash >/dev/null 2>&1 -uci set ucitrack.@openclash[-1].init=openclash >/dev/null 2>&1 -uci commit ucitrack >/dev/null 2>&1 -uci delete firewall.openclash >/dev/null 2>&1 -uci set firewall.openclash=include >/dev/null 2>&1 -uci set firewall.openclash.type=script >/dev/null 2>&1 -uci set firewall.openclash.path=/var/etc/openclash.include >/dev/null 2>&1 -uci set firewall.openclash.reload=1 >/dev/null 2>&1 -uci commit firewall >/dev/null 2>&1 -if [ -f "/tmp/openclash.bak" ]; then - mv "/tmp/openclash.bak" "/etc/config/openclash" 2>/dev/null - mv "/tmp/openclash_custom_rules.list.bak" "/etc/config/openclash_custom_rules.list" 2>/dev/null - mv "/tmp/openclash_custom_hosts.list.bak" "/etc/config/openclash_custom_hosts.list" 2>/dev/null - mv "/tmp/openclash_custom_fake_black.conf.bak" "/etc/config/openclash_custom_fake_black.conf" 2>/dev/null -fi -if [ -f "/tmp/config.yaml" ]; then - mv "/tmp/config.yaml" "/etc/openclash/config.yaml" 2>/dev/null -elif [ -f "/tmp/config.yml" ]; then - mv "/tmp/config.yml" "/etc/openclash/config.yaml" 2>/dev/null -fi -uci set openclash.config.enable=0 2>/dev/null && uci commit openclash 2>/dev/null -chmod 0755 /etc/init.d/openclash 2>/dev/null -chmod -R 0755 /usr/share/openclash/ 2>/dev/null -rm -rf /tmp/luci* -endef - -define Package/$(PKG_NAME)/prerm -#!/bin/sh -if [ ! -f "/tmp/openclash_update.sh" ]; then - rm -rf /etc/openclash/clash 2>/dev/null -fi - cp "/etc/config/openclash" "/tmp/openclash.bak" 2>/dev/null - cp "/etc/config/openclash_custom_rules.list" "/tmp/openclash_custom_rules.list.bak" 2>/dev/null - cp "/etc/config/openclash_custom_hosts.list" "/tmp/openclash_custom_hosts.list.bak" 2>/dev/null - cp "/etc/config/openclash_custom_fake_black.conf" "/tmp/openclash_custom_fake_black.conf.bak" 2>/dev/null -endef - -define Package/$(PKG_NAME)/postrm -#!/bin/sh -if [ -f "/etc/openclash/config.yaml" ]; then - mv "/etc/openclash/config.yaml" "/tmp/config.yaml" -fi -if [ -f "/etc/openclash/clash" ]; then - rm -rf /etc/openclash/config.* 2>/dev/null -else - rm -rf /etc/openclash 2>/dev/null -fi - rm -rf /tmp/openclash.log 2>/dev/null - rm -rf /tmp/openclash_start.log 2>/dev/null - rm -rf /tmp/Proxy_Group 2>/dev/null - rm -rf /tmp/openclash_last_version 2>/dev/null - rm -rf /tmp/clash_last_version 2>/dev/null - rm -rf /etc/openclash/dnsmasq_fake_block.conf 2>/dev/null - uci delete firewall.openclash >/dev/null 2>&1 - uci commit firewall >/dev/null 2>&1 - uci delete ucitrack.@openclash[-1] >/dev/null 2>&1 - uci commit ucitrack >/dev/null 2>&1 -rm -rf /tmp/luci* -endef - -define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - $(INSTALL_DATA) $(PKG_BUILD_DIR)/*.*.lmo $(1)/usr/lib/lua/luci/i18n/ - $(CP) ./files/* $(1)/ -endef - -$(eval $(call BuildPackage,$(PKG_NAME))) +include $(TOPDIR)/rules.mk + +PKG_NAME:=luci-app-openclash +PKG_VERSION:=0.34.3 +PKG_RELEASE:=beta +PKG_MAINTAINER:=vernesong + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) + CATEGORY:=LuCI + SUBMENU:=3. Applications + TITLE:=LuCI support for clash + PKGARCH:=all + DEPENDS:=+iptables +dnsmasq-full +coreutils +coreutils-nohup +bash +wget + MAINTAINER:=vernesong +endef + +define Package/$(PKG_NAME)/description + A LuCI support for clash +endef + +define Package/$(PKG_NAME)/postinst +endef + +define Build/Prepare + $(foreach po,$(wildcard ${CURDIR}/i18n/zh-cn/*.po), \ + po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));) + chmod 0755 ${CURDIR}/files/etc/init.d/openclash + chmod -R 0755 ${CURDIR}/files/usr/share/openclash/ +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/$(PKG_NAME)/preinst +#!/bin/sh +if [ -f "/etc/config/openclash" ]; then + cp "/etc/config/openclash" "/tmp/openclash.bak" 2>/dev/null + cp "/etc/config/openclash_custom_rules.list" "/tmp/openclash_custom_rules.list.bak" 2>/dev/null + cp "/etc/config/openclash_custom_hosts.list" "/tmp/openclash_custom_hosts.list.bak" 2>/dev/null + cp "/etc/config/openclash_custom_fake_black.conf" "/tmp/openclash_custom_fake_black.conf.bak" 2>/dev/null +fi +endef + +define Package/$(PKG_NAME)/postinst +#!/bin/sh +uci delete ucitrack.@openclash[-1] >/dev/null 2>&1 +uci add ucitrack openclash >/dev/null 2>&1 +uci set ucitrack.@openclash[-1].init=openclash >/dev/null 2>&1 +uci commit ucitrack >/dev/null 2>&1 +uci delete firewall.openclash >/dev/null 2>&1 +uci set firewall.openclash=include >/dev/null 2>&1 +uci set firewall.openclash.type=script >/dev/null 2>&1 +uci set firewall.openclash.path=/var/etc/openclash.include >/dev/null 2>&1 +uci set firewall.openclash.reload=1 >/dev/null 2>&1 +uci commit firewall >/dev/null 2>&1 +if [ -f "/tmp/openclash.bak" ]; then + mv "/tmp/openclash.bak" "/etc/config/openclash" 2>/dev/null + mv "/tmp/openclash_custom_rules.list.bak" "/etc/config/openclash_custom_rules.list" 2>/dev/null + mv "/tmp/openclash_custom_hosts.list.bak" "/etc/config/openclash_custom_hosts.list" 2>/dev/null + mv "/tmp/openclash_custom_fake_black.conf.bak" "/etc/config/openclash_custom_fake_black.conf" 2>/dev/null +fi +if [ -f "/tmp/config.yaml" ]; then + mv "/tmp/config.yaml" "/etc/openclash/config.yaml" 2>/dev/null +elif [ -f "/tmp/config.yml" ]; then + mv "/tmp/config.yml" "/etc/openclash/config.yaml" 2>/dev/null +fi +uci set openclash.config.enable=0 2>/dev/null && uci commit openclash 2>/dev/null +chmod 0755 /etc/init.d/openclash 2>/dev/null +chmod -R 0755 /usr/share/openclash/ 2>/dev/null +rm -rf /tmp/luci* +endef + +define Package/$(PKG_NAME)/prerm +#!/bin/sh +if [ ! -f "/tmp/openclash_update.sh" ]; then + rm -rf /etc/openclash/clash 2>/dev/null +fi + cp "/etc/config/openclash" "/tmp/openclash.bak" 2>/dev/null + cp "/etc/config/openclash_custom_rules.list" "/tmp/openclash_custom_rules.list.bak" 2>/dev/null + cp "/etc/config/openclash_custom_hosts.list" "/tmp/openclash_custom_hosts.list.bak" 2>/dev/null + cp "/etc/config/openclash_custom_fake_black.conf" "/tmp/openclash_custom_fake_black.conf.bak" 2>/dev/null +endef + +define Package/$(PKG_NAME)/postrm +#!/bin/sh +if [ -f "/etc/openclash/config.yaml" ]; then + mv "/etc/openclash/config.yaml" "/tmp/config.yaml" +fi +if [ -f "/etc/openclash/clash" ]; then + rm -rf /etc/openclash/config.* 2>/dev/null +else + rm -rf /etc/openclash 2>/dev/null +fi + rm -rf /tmp/openclash.log 2>/dev/null + rm -rf /tmp/openclash_start.log 2>/dev/null + rm -rf /tmp/Proxy_Group 2>/dev/null + rm -rf /tmp/openclash_last_version 2>/dev/null + rm -rf /tmp/clash_last_version 2>/dev/null + rm -rf /etc/openclash/dnsmasq_fake_block.conf 2>/dev/null + uci delete firewall.openclash >/dev/null 2>&1 + uci commit firewall >/dev/null 2>&1 + uci delete ucitrack.@openclash[-1] >/dev/null 2>&1 + uci commit ucitrack >/dev/null 2>&1 +rm -rf /tmp/luci* +endef + +define Package/$(PKG_NAME)/install + $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n + $(INSTALL_DATA) $(PKG_BUILD_DIR)/*.*.lmo $(1)/usr/lib/lua/luci/i18n/ + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/luci-app-openclash/files/etc/config/openclash b/luci-app-openclash/files/etc/config/openclash index 90f2569237..a91f8d05af 100644 --- a/luci-app-openclash/files/etc/config/openclash +++ b/luci-app-openclash/files/etc/config/openclash @@ -1,52 +1,52 @@ - -config openclash 'config' - option proxy_port '7892' - option enable '0' - option update '0' - option en_mode '0' - option auto_update '0' - option auto_update_time '0' - option cn_port '9090' - option dashboard_password '123456' - option rule_source '0' - option enable_custom_dns '0' - option ipv6_enable '0' - option enable_custom_clash_rules '0' - option other_rule_auto_update '0' - option core_version '0' - option en_mode 'redir-host' - option enable_redirect_dns '1' - option dns_advanced_setting '0' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '114.114.114.114' - option enabled '0' - -config dns_servers - option group 'nameserver' - option type 'udp' - option ip '119.29.29.29' - option enabled '0' - -config dns_servers - option ip '8.8.8.8' - option port '853' - option type 'tls' - option enabled '0' - option group 'fallback' - -config dns_servers - option ip '1.1.1.1/dns-query' - option type 'https' - option port '443' - option enabled '0' - option group 'fallback' - -config dns_servers - option ip '1.1.1.1' - option port '853' - option type 'tls' - option enabled '0' - option group 'fallback' + +config openclash 'config' + option proxy_port '7892' + option enable '0' + option update '0' + option en_mode '0' + option auto_update '0' + option auto_update_time '0' + option cn_port '9090' + option dashboard_password '123456' + option rule_source '0' + option enable_custom_dns '0' + option ipv6_enable '0' + option enable_custom_clash_rules '0' + option other_rule_auto_update '0' + option core_version '0' + option en_mode 'redir-host' + option enable_redirect_dns '1' + option dns_advanced_setting '0' + +config dns_servers + option group 'nameserver' + option type 'udp' + option ip '114.114.114.114' + option enabled '0' + +config dns_servers + option group 'nameserver' + option type 'udp' + option ip '119.29.29.29' + option enabled '0' + +config dns_servers + option ip '8.8.8.8' + option port '853' + option type 'tls' + option enabled '0' + option group 'fallback' + +config dns_servers + option ip '1.1.1.1/dns-query' + option type 'https' + option port '443' + option enabled '0' + option group 'fallback' + +config dns_servers + option ip '1.1.1.1' + option port '853' + option type 'tls' + option enabled '0' + option group 'fallback' diff --git a/luci-app-openclash/files/etc/config/openclash_custom_fake_black.conf b/luci-app-openclash/files/etc/config/openclash_custom_fake_black.conf index d0686fc6a7..236e32de41 100644 --- a/luci-app-openclash/files/etc/config/openclash_custom_fake_black.conf +++ b/luci-app-openclash/files/etc/config/openclash_custom_fake_black.conf @@ -1,57 +1,57 @@ -#放行NTP服务 -time.windows.com -time.nist.gov -time.apple.com -time.asia.apple.com -cn.ntp.org.cn -edu.ntp.org.cn -hk.ntp.org.cn -tw.ntp.org.cn -us.ntp.org.cn -sgp.ntp.org.cn -kr.ntp.org.cn -jp.ntp.org.cn -de.ntp.org.cn -ina.ntp.org.cn -0.openwrt.pool.ntp.org -1.openwrt.pool.ntp.org -2.openwrt.pool.ntp.org -3.openwrt.pool.ntp.org -ntp.aliyun.com -ntp1.aliyun.com -ntp2.aliyun.com -ntp3.aliyun.com -ntp4.aliyun.com -ntp5.aliyun.com -ntp6.aliyun.com -ntp7.aliyun.com -time1.aliyun.com -time2.aliyun.com -time3.aliyun.com -time4.aliyun.com -time5.aliyun.com -time6.aliyun.com -time7.aliyun.com -s1c.time.edu.cn -s2m.time.edu.cn -s1b.time.edu.cn -s1e.time.edu.cn -s2a.time.edu.cn -s2b.time.edu.cn -time1.apple.com -time2.apple.com -time3.apple.com -time4.apple.com -time5.apple.com -time6.apple.com -time7.apple.com -time1.google.com -time2.google.com -time3.google.com -time4.google.com -#放行网易云音乐 -.music.163.com -interface.music.163.com -#win10本地连接检测 -msftconnecttest.com -msftncsi.com +#放行NTP服务 +time.windows.com +time.nist.gov +time.apple.com +time.asia.apple.com +cn.ntp.org.cn +edu.ntp.org.cn +hk.ntp.org.cn +tw.ntp.org.cn +us.ntp.org.cn +sgp.ntp.org.cn +kr.ntp.org.cn +jp.ntp.org.cn +de.ntp.org.cn +ina.ntp.org.cn +0.openwrt.pool.ntp.org +1.openwrt.pool.ntp.org +2.openwrt.pool.ntp.org +3.openwrt.pool.ntp.org +ntp.aliyun.com +ntp1.aliyun.com +ntp2.aliyun.com +ntp3.aliyun.com +ntp4.aliyun.com +ntp5.aliyun.com +ntp6.aliyun.com +ntp7.aliyun.com +time1.aliyun.com +time2.aliyun.com +time3.aliyun.com +time4.aliyun.com +time5.aliyun.com +time6.aliyun.com +time7.aliyun.com +s1c.time.edu.cn +s2m.time.edu.cn +s1b.time.edu.cn +s1e.time.edu.cn +s2a.time.edu.cn +s2b.time.edu.cn +time1.apple.com +time2.apple.com +time3.apple.com +time4.apple.com +time5.apple.com +time6.apple.com +time7.apple.com +time1.google.com +time2.google.com +time3.google.com +time4.google.com +#放行网易云音乐 +.music.163.com +interface.music.163.com +#win10本地连接检测 +msftconnecttest.com +msftncsi.com diff --git a/luci-app-openclash/files/etc/config/openclash_custom_hosts.list b/luci-app-openclash/files/etc/config/openclash_custom_hosts.list index de57f39733..1180bb5f65 100644 --- a/luci-app-openclash/files/etc/config/openclash_custom_hosts.list +++ b/luci-app-openclash/files/etc/config/openclash_custom_hosts.list @@ -1,6 +1,6 @@ -# experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com) -# static domain has a higher priority than wildcard domain (foo.example.com > *.example.com) -# NOTE: hosts don't work with `fake-ip` - -# '*.clash.dev': 127.0.0.1 -# 'alpha.clash.dev': '::1' +# experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com) +# static domain has a higher priority than wildcard domain (foo.example.com > *.example.com) +# NOTE: hosts don't work with `fake-ip` + +# '*.clash.dev': 127.0.0.1 +# 'alpha.clash.dev': '::1' diff --git a/luci-app-openclash/files/etc/config/openclash_custom_rules.list b/luci-app-openclash/files/etc/config/openclash_custom_rules.list index f941f858fb..e687ad9183 100644 --- a/luci-app-openclash/files/etc/config/openclash_custom_rules.list +++ b/luci-app-openclash/files/etc/config/openclash_custom_rules.list @@ -1,30 +1,30 @@ -##- DOMAIN-SUFFIX,google.com,Proxy 匹配域名后缀(交由Proxy代理服务器组) -##- DOMAIN-KEYWORD,google,Proxy 匹配域名关键字(交由Proxy代理服务器组) -##- DOMAIN,google.com,Proxy 匹配域名(交由Proxy代理服务器组) -##- DOMAIN-SUFFIX,ad.com,REJECT 匹配域名后缀(拒绝) -##- IP-CIDR,127.0.0.0/8,DIRECT 匹配数据目标IP(直连) -##- SRC-IP-CIDR,192.168.1.201/32,DIRECT 匹配数据发起IP(直连) -##- DST-PORT,80,DIRECT 匹配数据目标端口(直连) -##- SRC-PORT,7777,DIRECT 匹配数据源端口(直连) - -##排序在上的规则优先生效,如添加(去除规则前的#号): -##IP段:192.168.1.2-192.168.1.200 直连 -##- SRC-IP-CIDR,192.168.1.2/31,DIRECT -##- SRC-IP-CIDR,192.168.1.4/30,DIRECT -##- SRC-IP-CIDR,192.168.1.8/29,DIRECT -##- SRC-IP-CIDR,192.168.1.16/28,DIRECT -##- SRC-IP-CIDR,192.168.1.32/27,DIRECT -##- SRC-IP-CIDR,192.168.1.64/26,DIRECT -##- SRC-IP-CIDR,192.168.1.128/26,DIRECT -##- SRC-IP-CIDR,192.168.1.192/29,DIRECT -##- SRC-IP-CIDR,192.168.1.200/32,DIRECT - -##IP段:192.168.1.202-192.168.1.255 直连 -##- SRC-IP-CIDR,192.168.1.202/31,DIRECT -##- SRC-IP-CIDR,192.168.1.204/30,DIRECT -##- SRC-IP-CIDR,192.168.1.208/28,DIRECT -##- SRC-IP-CIDR,192.168.1.224/27,DIRECT - -##此时IP为192.168.1.1和192.168.1.201的客户端流量走代理(策略),其余客户端不走代理 -##因为Fake-IP模式下,IP地址为192.168.1.1的路由器自身流量可走代理(策略),所以需要排除 +##- DOMAIN-SUFFIX,google.com,Proxy 匹配域名后缀(交由Proxy代理服务器组) +##- DOMAIN-KEYWORD,google,Proxy 匹配域名关键字(交由Proxy代理服务器组) +##- DOMAIN,google.com,Proxy 匹配域名(交由Proxy代理服务器组) +##- DOMAIN-SUFFIX,ad.com,REJECT 匹配域名后缀(拒绝) +##- IP-CIDR,127.0.0.0/8,DIRECT 匹配数据目标IP(直连) +##- SRC-IP-CIDR,192.168.1.201/32,DIRECT 匹配数据发起IP(直连) +##- DST-PORT,80,DIRECT 匹配数据目标端口(直连) +##- SRC-PORT,7777,DIRECT 匹配数据源端口(直连) + +##排序在上的规则优先生效,如添加(去除规则前的#号): +##IP段:192.168.1.2-192.168.1.200 直连 +##- SRC-IP-CIDR,192.168.1.2/31,DIRECT +##- SRC-IP-CIDR,192.168.1.4/30,DIRECT +##- SRC-IP-CIDR,192.168.1.8/29,DIRECT +##- SRC-IP-CIDR,192.168.1.16/28,DIRECT +##- SRC-IP-CIDR,192.168.1.32/27,DIRECT +##- SRC-IP-CIDR,192.168.1.64/26,DIRECT +##- SRC-IP-CIDR,192.168.1.128/26,DIRECT +##- SRC-IP-CIDR,192.168.1.192/29,DIRECT +##- SRC-IP-CIDR,192.168.1.200/32,DIRECT + +##IP段:192.168.1.202-192.168.1.255 直连 +##- SRC-IP-CIDR,192.168.1.202/31,DIRECT +##- SRC-IP-CIDR,192.168.1.204/30,DIRECT +##- SRC-IP-CIDR,192.168.1.208/28,DIRECT +##- SRC-IP-CIDR,192.168.1.224/27,DIRECT + +##此时IP为192.168.1.1和192.168.1.201的客户端流量走代理(策略),其余客户端不走代理 +##因为Fake-IP模式下,IP地址为192.168.1.1的路由器自身流量可走代理(策略),所以需要排除 ##在线IP段转CIDR地址:http://ip2cidr.com \ No newline at end of file diff --git a/luci-app-openclash/files/etc/init.d/openclash b/luci-app-openclash/files/etc/init.d/openclash index c4119f499d..9a340f5a0a 100644 --- a/luci-app-openclash/files/etc/init.d/openclash +++ b/luci-app-openclash/files/etc/init.d/openclash @@ -1,561 +1,561 @@ -#!/bin/sh /etc/rc.common -# Copyright (c) 2019 vernesong - -START=99 -STOP=15 - - -CLASH="/etc/openclash/clash" -CLASH_CONFIG="/etc/openclash" -CRON_FILE="/etc/crontabs/root" -CONFIG_FILE="/etc/openclash/config.yaml" -LOG_FILE="/tmp/openclash.log" -START_LOG="/tmp/openclash_start.log" -BACKUP_FILE="/etc/openclash/config.bak" -START_BACKUP="/tmp/config.sbak" -CHANGE_FILE="/tmp/yaml_change.yaml" -RULE_FILE="/tmp/yaml_rules.yaml" -DNS_FILE="/tmp/yaml_dns.yaml" -PROXY_FILE="/tmp/yaml_proxy.yaml" -HOSTS_FILE="/etc/config/openclash_custom_hosts.list" - -add_cron() -{ - [ -z "$(grep "openclash.sh" "$CRON_FILE")" ] && { - [ "$(uci get openclash.config.auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.auto_update_time 2>/dev/null) * * $(uci get openclash.config.config_update_week_time 2>/dev/null) /usr/share/openclash/openclash.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_rule.sh" "$CRON_FILE")" ] && { - [ "$(uci get openclash.config.other_rule_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.other_rule_update_day_time 2>/dev/null) * * $(uci get openclash.config.other_rule_update_week_time 2>/dev/null) /usr/share/openclash/openclash_rule.sh" >> $CRON_FILE - } - [ -z "$(grep "openclash_ipdb.sh" "$CRON_FILE")" ] && { - [ "$(uci get openclash.config.geo_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.geo_update_day_time 2>/dev/null) * * $(uci get openclash.config.geo_update_week_time 2>/dev/null) /usr/share/openclash/openclash_ipdb.sh" >> $CRON_FILE - } - crontab $CRON_FILE - nohup /usr/share/openclash/openclash_watchdog.sh & -} - -del_cron() -{ - sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_rule.sh/d' $CRON_FILE 2>/dev/null - sed -i '/openclash_ipdb.sh/d' $CRON_FILE 2>/dev/null - /etc/init.d/cron restart -} - -change_dns() { - uci add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" - uci delete dhcp.@dnsmasq[0].resolvfile - uci set dhcp.@dnsmasq[0].noresolv=1 - uci commit dhcp -} - -revert_dns() { - dns_port=$(uci get openclash.config.dns_port 2>/dev/null) - uci del_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" >/dev/null 2>&1 - uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto - uci set dhcp.@dnsmasq[0].noresolv=0 - uci commit dhcp - rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1 -} - -fake_block() { - if [ "$1" = "fake-ip" ]; then - if [ ! -f /etc/openclash/dnsmasq_fake_block.conf ]; then - sh /usr/share/openclash/openclash_fake_block.sh - elif [ "$(awk -F '/' '{print $3}' /etc/openclash/dnsmasq_fake_block.conf |head -1)" != "$2" ] && [ ! -z "$2" ]; then - sh /usr/share/openclash/openclash_fake_block.sh - fi - mkdir -p /tmp/dnsmasq.d - ln -s /etc/openclash/dnsmasq_fake_block.conf /tmp/dnsmasq.d/dnsmasq_openclash.conf - fi -} - -yml_check() -{ - #创建启动备份 - cp "$3" "$5" - - #创建原始备份 - if [ ! -f "$4" ]; then - cp "$3" "$4" - fi - - #自定义DNS还原 - if [ "$(grep -c '##Custom DNS##' "$3")" -gt 0 ] && [ "$2" = 0 ] && [ -f "$4" ]; then - awk '/^ {0,}nameserver:/,/Proxy:/{print}' "$4" | sed '/^Proxy:/d' >/tmp/bakdns.config 2>/dev/null - sed -i '/OpenClash-General-Settings/i\Custom DNS End' "$3" 2>/dev/null - sed -i '/^ \{0,\}nameserver:/,/^Custom DNS End$/d' "$3" 2>/dev/null - sed -i '/##Custom DNS##/r/tmp/bakdns.config' "$3" 2>/dev/null - rm -rf /tmp/bakdns.config 2>/dev/null - fi - - yml_dns_check - - #检查行首空格避免后续操作出错 - [ ! -z "$(grep "^ \{1,\}Proxy:" $3)" ] && { - sed -i "/^ \{1,\}Proxy:/c\Proxy:" "$3" - } - - [ ! -z "$(grep "^ \{1,\}Proxy Group:" $3)" ] && { - sed -i "/^ \{1,\}Proxy Group:/c\Proxy Group:" "$3" - } - - [ ! -z "$(grep "^ \{1,\}Rule:" $3)" ] && { - sed -i "/^ \{1,\}Rule:/c\Rule:" "$3" - } - - [ ! -z "$(grep "^ \{1,\}dns:" $3)" ] && { - sed -i "/^ \{1,\}dns:/c\dns:" "$3" - } - - if [ ! -z "$(grep "^ \{1,\}port:" $3)" ] || [ ! -z "$(grep "^ \{1,\}mode:" $3)" ] || [ ! -z "$(grep "^ \{1,\}log-level:" $3)" ]; then - cp "$3" /tmp/config.check 2>/dev/null - sed -i '/^dns:/,$d' /tmp/config.check 2>/dev/null - sed -i 's/^[ \t]*//' /tmp/config.check 2>/dev/null - sed -n '/^dns:/,$p' "$3" >> /tmp/config.check 2>/dev/null - mv /tmp/config.check "$3" 2>/dev/null - fi - - #添加标识 - sed -i '/OpenClash-General/d' "$3" 2>/dev/null - sed -i '/^Proxy:/i\#===================== OpenClash-General-Settings =====================#' "$3" 2>/dev/null -} - -#检查DNS设置 -yml_dns_check() -{ - - [ -z "$(grep '^dns:' $CONFIG_FILE)" ] && { - sed -i '/^Proxy:/i\dns:' "$CONFIG_FILE" 2>/dev/null - } - - [ -z "$(grep '^ \{0,\}nameserver:' $CONFIG_FILE)" ] && { - sed -i '/^Proxy:/i\ nameserver:' "$CONFIG_FILE" 2>/dev/null - sed -i "/nameserver:/a\ - tls://8.8.8.8:853" "$CONFIG_FILE" 2>/dev/null - sed -i "/nameserver:/a\ - 114.114.114.114" "$CONFIG_FILE" 2>/dev/null - } - - dns_port=$(grep "^ \{0,\}listen:" $CONFIG_FILE |awk -F ':' '{print $3}' |awk -F '#' '{print $1}' |tr -cd "[0-9]" 2>/dev/null) - if [ -z "$dns_port" ] || [ "$dns_port" -eq 53 ]; then - dns_port=7874 - fi - - if [ ! -z "$(grep "^ \{0,\}listen:" "$CONFIG_FILE")" ]; then - sed -i "/^ \{0,\}listen:/c\ listen: 0.0.0.0:${dns_port}" "$CONFIG_FILE" 2>/dev/null - else - sed -i "/^dns:/a\ listen: 0.0.0.0:${dns_port}" "$CONFIG_FILE" 2>/dev/null - fi - - uci set openclash.config.dns_port="$dns_port" && uci commit openclash - -} - -#切割配置文件以分开处理 -yml_cut() -{ - cp "$4" "$1" - sed -i '/^Rule:/,$d' "$1" - sed -n '/^ \{0,\}nameserver:/,$p' "$1" >"$3" - sed -n '/^ \{0,\}Proxy:/,$p' "$3" >"$5" - sed -i '/^ \{0,\}nameserver:/,$d' "$1" - sed -i '/^ \{0,\}Proxy:/,$d' "$3" - sed -n '/^Rule:/,$p' "$4" >"$2" - -} - -#获取自定义DNS设置 -yml_dns_get() -{ - - local section="$1" - local dns_type="" - local dns_address="" - config_get_bool "enabled" "$section" "enabled" "1" - config_get "port" "$section" "port" "" - config_get "type" "$section" "type" "" - config_get "ip" "$section" "ip" "" - config_get "group" "$section" "group" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$ip" ]; then - return - fi - - if [ "$type" = "tcp" ]; then - dns_type="- tcp://" - elif [ "$type" = "tls" ]; then - dns_type="- tls://" - elif [ "$type" = "udp" ]; then - dns_type="- " - elif [ "$type" = "https" ]; then - dns_type="- https://" - fi - - if [ ! -z "$port" ] && [ ! -z "$ip" ]; then - dns_address="$ip:$port" - elif [ -z "$port" ] && [ ! -z "$ip" ]; then - dns_address="$ip" - else - return - fi - - if [ ! -z "$group" ]; then - if [ "$group" = "nameserver" ]; then - echo " $dns_type$dns_address" >>/etc/openclash/config.namedns - else - if [ -z "$(grep "fallback:$" /etc/openclash/config.falldns 2>/dev/null)" ]; then - echo " fallback:" >/etc/openclash/config.falldns - fi - echo " $dns_type$dns_address" >>/etc/openclash/config.falldns - fi - else - return - fi - -} - -#添加自定义DNS设置 -yml_dns_custom() -{ - if [ "$1" = 1 ]; then - echo " nameserver:" >/etc/openclash/config.namedns - config_load "openclash" - config_foreach yml_dns_get "dns_servers" - sed -i '/^ \{0,\}nameserver:/i\##Custom DNS##' "$2" 2>/dev/null - sed -i '/OpenClash-General-Settings/i\Custom DNS End' "$2" 2>/dev/null - sed -i '/^ \{0,\}nameserver:/,/^Custom DNS End$/d' "$2" 2>/dev/null - sed -i '/##Custom DNS##/r/etc/openclash/config.falldns' "$2" 2>/dev/null - sed -i '/##Custom DNS##/r/etc/openclash/config.namedns' "$2" 2>/dev/null - rm -rf /etc/openclash/config.namedns 2>/dev/null - rm -rf /etc/openclash/config.falldns 2>/dev/null - else - sed -i "/^ \{0,\}nameserver:/c\ nameserver:" "$2" 2>/dev/null - sed -i "/^ \{0,\}fallback:/c\ fallback:" "$2" 2>/dev/null - fi - - if [ -z "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then - sed -i '/OpenClash-General-Settings/i\ fallback-filter:' "$2" 2>/dev/null - sed -i '/OpenClash-General-Settings/i\ geoip: true' "$2" 2>/dev/null - sed -i '/OpenClash-General-Settings/i\ ipcidr:' "$2" 2>/dev/null - sed -i '/OpenClash-General-Settings/i\ - 240.0.0.0/4' "$2" 2>/dev/null - else - if [ -z "$(grep '^ fallback-filter:' $2)" ]; then - sed -i "/fallback-filter:/c\ fallback-filter:" "$2" 2>/dev/null - fi - if [ -z "$(grep '^ geoip: true' $2)" ]; then - sed -i "/geoip: true/c\ geoip: true" "$2" 2>/dev/null - fi - if [ -z "$(grep '^ ipcidr:' $2)" ]; then - sed -i "/ipcidr:/c\ ipcidr:" "$2" 2>/dev/null - fi - fi - - if [ -z "$(grep "^ - " $2)" ]; then - sed -i '/^ \{0,\}nameserver:/,/^ \{0,\}fallback-filter:/ {s/^ \{0,\}- / - /}' "$2" 2>/dev/null #修改参数空格 - fi - if [ -z "$(grep "^ - " $2)" ]; then - sed -i '/^ \{0,\}ipcidr:/,/OpenClash-General-Settings/ {s/^ \{0,\}- / - /}' "$2" 2>/dev/null #修改参数空格 - fi -} - -#添加自定义Hosts设置 -yml_hosts_custom() -{ - if [ "$en_mode" = "redir-host" ]; then - if [ -z "$(grep '^ \{0,\}hosts:' $1)" ]; then - sed -i '/^dns:/i\hosts:' "$1" 2>/dev/null - else - if [ ! -z "$(grep '^ \{1,\}hosts:' $1)" ]; then - sed -i '/^ \{1,\}hosts:/d' "$1" 2>/dev/null - sed -i '/^dns:/i\hosts:' "$1" 2>/dev/null - fi - fi - sed -i "s/^ \{0,\}/ /" "$2" 2>/dev/null #修改参数空格 - sed -i "1i\##Custom HOSTS##" "$2" 2>/dev/null - echo "##Custom HOSTS END##" >>"$2" 2>/dev/null - sed -i '/##Custom HOSTS##/,/##Custom HOSTS END##/d' "$1" 2>/dev/null - sed -i '/^hosts:/r/etc/config/openclash_custom_hosts.list' "$1" 2>/dev/null - sed -i '/##Custom HOSTS##/d' "$2" 2>/dev/null - sed -i '/##Custom HOSTS END##/d' "$2" 2>/dev/null - else - sed -i '/##Custom HOSTS##/,/##Custom HOSTS END##/d' "$1" 2>/dev/null - sed -i '/^ *$/d' "$1" 2>/dev/null #删除空行 - hostlen=$(sed -n '/hosts:/=' "$1" 2>/dev/null) - lasthlen=$(sed -n '$=' "$1" 2>/dev/null) - dnslen=$(sed -n '/dns:/=' "$1" 2>/dev/null) - if [ "$hostlen" = "$lasthlen" ] && [ ! -z "$hostlen" ]; then - sed -i '/^ \{0,\}hosts:/d' "$1" 2>/dev/null - fi - if [ "$hostlen" = "$(expr $dnslen - 1)" ] && [ ! -z "$hostlen" ]; then - sed -i '/^ \{0,\}hosts:/d' "$1" 2>/dev/null - fi - fi -} - -#获取认证信息 -yml_auth_get() -{ - local section="$1" - config_get_bool "enabled" "$section" "enabled" "1" - config_get "username" "$section" "username" "" - config_get "password" "$section" "password" "" - - if [ "$enabled" = "0" ]; then - return - fi - - if [ -z "$username" ] || [ -z "$password" ]; then - return - else - echo " - $username:$password" >>/etc/openclash/config.auth - fi -} - -#添加认证信息 -yml_auth_custom() -{ - if [ ! -z "$(grep "^authentication:" "$1")" ]; then - sed -i '/^dns:/i\#authentication' "$1" 2>/dev/null - sed -i '/^authentication:/,/^#authentication/d' "$1" 2>/dev/null - fi - [ -f /etc/openclash/config.auth ] && { - sed -i '/^dns:/i\authentication:' "$1" 2>/dev/null - sed -i '/^authentication:/r/etc/openclash/config.auth' "$1" 2>/dev/null - rm -rf /etc/openclash/config.auth 2>/dev/null - } -} - -start() -{ -#禁止多个实例 -status=$(ps|grep -c /etc/init.d/openclash) -[ "$status" -gt "3" ] && exit 0 - -if [ ! -f "$CONFIG_FILE" ] && [ "$(ls -l /etc/openclash/config.yml 2>/dev/null |awk '{print int($5/1024)}')" -gt 0 ]; then - mv "/etc/openclash/config.yml" "$CONFIG_FILE" -fi -if [ ! -f "$CONFIG_FILE" ] && [ -f "$BACKUP_FILE" ]; then - cp $BACKUP_FILE $CONFIG_FILE -fi - -echo "OpenClash 开始启动..." >$START_LOG -enable=$(uci get openclash.config.enable 2>/dev/null) -LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") -if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then -#检查是否存在核心文件 -[ ! -f "$CLASH" ] && { - echo "OpenClash 核心文件不存在,开始下载..." >$START_LOG - nohup /usr/share/openclash/openclash_core.sh & - exit 0 -} - echo "第一步: 获取配置..." >$START_LOG - en_mode=$(uci get openclash.config.en_mode 2>/dev/null) - enable_custom_dns=$(uci get openclash.config.enable_custom_dns 2>/dev/null) - rule_source=$(uci get openclash.config.rule_source 2>/dev/null) - enable_custom_clash_rules=$(uci get openclash.config.enable_custom_clash_rules 2>/dev/null) - da_password=$(uci get openclash.config.dashboard_password 2>/dev/null) - cn_port=$(uci get openclash.config.cn_port 2>/dev/null) - proxy_port=$(uci get openclash.config.proxy_port 2>/dev/null) - ipv6_enable=$(uci get openclash.config.ipv6_enable 2>/dev/null) - http_port=$(uci get openclash.config.http_port 2>/dev/null) - socks_port=$(uci get openclash.config.socks_port 2>/dev/null) - enable_redirect_dns=$(uci get openclash.config.enable_redirect_dns 2>/dev/null) - lan_ip=$(uci get network.lan.ipaddr 2>/dev/null) - direct_dns=$(uci get openclash.config.direct_dns 2>/dev/null) - echo "第二步: 配置文件检查..." >$START_LOG - yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKUP_FILE" "$START_BACKUP" - grep "^ \{0,\}Proxy:" $CONFIG_FILE >/dev/null 2>&1 && grep "^ \{0,\}Proxy Group:" $CONFIG_FILE >/dev/null 2>&1 && grep "^ \{0,\}Rule:" $CONFIG_FILE >/dev/null 2>&1 - if [ "$?" -ne "0" ]; then - nohup $CLASH -d "$CLASH_CONFIG" >> $LOG_FILE 2>&1 & - echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请根据日志信息对照模板格式检查修改配置文件!" >$START_LOG - mv $START_BACKUP $CONFIG_FILE - stop - sleep 5 - echo "" >$START_LOG - else - echo "第三步: 修改配置文件..." >$START_LOG - config_load "openclash" - config_foreach yml_auth_get "authentication" - yml_auth_custom "$CONFIG_FILE" - yml_cut "$CHANGE_FILE" "$RULE_FILE" "$DNS_FILE" "$CONFIG_FILE" "$PROXY_FILE" - yml_dns_custom "$enable_custom_dns" "$DNS_FILE" - yml_hosts_custom "$CHANGE_FILE" "$HOSTS_FILE" - sh /usr/share/openclash/yml_change.sh "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CHANGE_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" & - sh /usr/share/openclash/yml_rules_change.sh "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$RULE_FILE" & - wait - cat $CHANGE_FILE $DNS_FILE $PROXY_FILE $RULE_FILE > $CONFIG_FILE 2>/dev/null - rm -rf /tmp/yaml_* 2>/dev/null - echo "第四步: DNS设置检查..." >$START_LOG - if [ ! -z "$(sed -n '/^ \{0,\}nameserver:/{n;p}' $CONFIG_FILE |grep '^ \{0,\}fallback:')" ] || [ ! -z "$(sed -n '/^ \{0,\}nameserver:/{n;p}' $CONFIG_FILE |grep 'OpenClash-General')" ]; then - echo "错误: 配置文件DNS选项下的Nameserver必须设置服务器,已自动还原配置文件,请重新设置!" >$START_LOG - echo "${LOGTIME} Nameserver Must Be Set, Please Change Your Configrations In Config.yaml" >>$LOG_FILE - mv $START_BACKUP $CONFIG_FILE - sleep 10 - echo "" >$START_LOG - else - echo "第五步: 启动 Clash 主程序..." >$START_LOG - nohup $CLASH -d "$CLASH_CONFIG" >> $LOG_FILE 2>&1 & - - echo "第六步: 设置控制面板..." >$START_LOG - ln -s /usr/share/openclash/yacd /www/openclash 2>/dev/null - - echo "第七步: 设置 OpenClash 防火墙规则..." >$START_LOG - if [ -z "$(uci get firewall.openclash 2>/dev/null)" ] || [ -z "$(uci get ucitrack.@openclash[-1].init 2>/dev/null)" ]; then - uci delete ucitrack.@openclash[-1] >/dev/null 2>&1 - uci add ucitrack openclash >/dev/null 2>&1 - uci set ucitrack.@openclash[-1].init=openclash >/dev/null 2>&1 - uci commit ucitrack >/dev/null 2>&1 - uci delete firewall.openclash >/dev/null 2>&1 - uci set firewall.openclash=include >/dev/null 2>&1 - uci set firewall.openclash.type=script >/dev/null 2>&1 - uci set firewall.openclash.path=/var/etc/openclash.include >/dev/null 2>&1 - uci set firewall.openclash.reload=1 >/dev/null 2>&1 - uci commit firewall >/dev/null 2>&1 - fi - mkdir -p /var/etc -cat > "/var/etc/openclash.include" <<-EOF -iptables -t nat -N openclash -iptables -t nat -A openclash -d 0.0.0.0/8 -j RETURN -iptables -t nat -A openclash -d 10.0.0.0/8 -j RETURN -iptables -t nat -A openclash -d 127.0.0.0/8 -j RETURN -iptables -t nat -A openclash -d 169.254.0.0/16 -j RETURN -iptables -t nat -A openclash -d 172.16.0.0/12 -j RETURN -iptables -t nat -A openclash -d 192.168.0.0/16 -j RETURN -iptables -t nat -A openclash -d 224.0.0.0/4 -j RETURN -iptables -t nat -A openclash -d 240.0.0.0/4 -j RETURN -iptables -t nat -A openclash -p tcp --dport 22 -j ACCEPT -iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" -iptables -t nat -A PREROUTING -p tcp -j openclash -iptables -t nat -A OUTPUT -p tcp -d 198.18.0.1/16 -j REDIRECT --to-ports "$proxy_port" -EOF - - if [ "$ipv6_enable" -eq 1 ]; then -cat >> "/var/etc/openclash.include" <<-EOF -ip6tables -t nat -N openclash -ip6tables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" -ip6tables -t nat -A PREROUTING -p tcp -j openclash -EOF - fi - - /etc/init.d/firewall restart >/dev/null 2>&1 - /etc/init.d/miniupnpd restart >/dev/null 2>&1 - - echo "第八步: 重启 Dnsmasq 程序..." >$START_LOG - if [ "$(iptables -t nat -nL PREROUTING --line-number |grep dpt:53 |wc -l)" -gt 2 ]; then - echo "发现53端口被劫持,请将OpenClash设置为劫持53端口程序的上游DNS服务器!" >$START_LOG - echo "${LOGTIME} Warring: OpenClash May Can Not Take Over DNS, Please Use OpenClash for Upstream DNS Resolve Server" >> $LOG_FILE - sleep 5 - fi - [ "$enable_redirect_dns" != "0" ] && { - change_dns - } - fake_block "$en_mode" "$direct_dns" - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - if pidof clash >/dev/null; then - echo "第九步: 添加 OpenClash 计划任务,启动进程守护程序..." >$START_LOG - add_cron - echo "OpenClash 启动成功,请等待服务器上线!" >$START_LOG - echo "${LOGTIME} OpenClash Start Successful" >> $LOG_FILE - sleep 5 - echo "" >$START_LOG - else - if [ "$rule_source" != 0 ] || [ "$enable_custom_clash_rules" != 0 ]; then - echo "错误: OpenClash 启动失败,尝试还原规则并重新启动 Clash 主程序..." >$START_LOG - echo "${LOGTIME} OpenClash Can Not Start, Try Use Backup Rules Start Again" >> $LOG_FILE - mv "$BACKUP_FILE" /etc/openclash/configrules.bak - sed -i -n '/^Rule:/,$p' /etc/openclash/configrules.bak - sed -i '/^Rule:/,$d' "$CONFIG_FILE" - cat /etc/openclash/configrules.bak >> "$CONFIG_FILE" - rm -rf /etc/openclash/configrules.bak - nohup $CLASH -d "$CLASH_CONFIG" >> $LOG_FILE 2>&1 & - sleep 3 - if pidof clash >/dev/null; then - add_cron - echo "OpenClash 使用备份规则启动成功,请更新、检查变动的规则后重试!" >$START_LOG - echo "${LOGTIME} OpenClash Start Successful With Backup Rules Config, Please Check Or Update Other Rules And Retry" >> $LOG_FILE - sleep 5 - echo "" >$START_LOG - else - echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG - echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE - sleep 10 - echo "" >$START_LOG - stop && echo "" >$START_LOG - fi - else - echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG - echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE - sleep 10 - echo "" >$START_LOG - stop && echo "" >$START_LOG - fi - fi - fi - fi - rm -rf $START_BACKUP 2>/dev/null -else - subscribe_url=$(uci get openclash.config.subscribe_url 2>/dev/null) - if [ ! -f "$CONFIG_FILE" ] && [ ! -z "$subscribe_url" ]; then - echo "OpenClash 配置文件不存在,开始下载..." >$START_LOG - nohup /usr/share/openclash/openclash.sh & - exit 0 - elif [ ! -f "$CONFIG_FILE" ]; then - echo "错误: OpenClash 缺少配置文件,请上传或更新配置文件!" >$START_LOG - echo "${LOGTIME} Config Not Found" >> $LOG_FILE - sleep 5 - echo "" >$START_LOG - else - echo "错误: 请从 OpenClash 客户端界面启动程序!" >$START_LOG - echo "${LOGTIME} OpenClash Must Be Start From The Luci Page" >> $LOG_FILE - sleep 5 - echo "" >$START_LOG - fi -fi -} - -stop() -{ - echo "OpenClash 开始关闭..." >$START_LOG - echo "第一步: 删除 OpenClash 防火墙规则..." >$START_LOG - rm -rf /var/etc/openclash.include 2>/dev/null - /etc/init.d/firewall restart >/dev/null 2>&1 - /etc/init.d/miniupnpd restart >/dev/null 2>&1 - - - echo "第二步: 关闭 OpenClash 守护程序..." >$START_LOG - kill -9 "$(ps |grep openclash_watchdog.sh |grep -v grep |awk '{print $1}')" >/dev/null 2>&1 - - echo "第三步: 关闭 Clash 主程序..." >$START_LOG - kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null - - echo "第四步: 重启 Dnsmasq 程序..." >$START_LOG - revert_dns - /etc/init.d/dnsmasq restart >/dev/null 2>&1 - - echo "第五步:删除 OpenClash 残留文件..." >$START_LOG - enable=$(uci get openclash.config.enable 2>/dev/null) - if [ "$enable" -eq 0 ]; then - rm -rf $LOG_FILE 2>/dev/null - rm -rf /www/openclash 2>/dev/null - rm -rf /tmp/openclash_last_version 2>/dev/null - rm -rf /tmp/clash_last_version 2>/dev/null - rm -rf /tmp/Proxy_Group 2>/dev/null - echo "OpenClash 关闭成功!" >$START_LOG - sleep 5 - rm -rf $START_LOG - fi - - del_cron - - echo "OpenClash Already Stop" -} - - -restart() -{ - stop - start -} +#!/bin/sh /etc/rc.common +# Copyright (c) 2019 vernesong + +START=99 +STOP=15 + + +CLASH="/etc/openclash/clash" +CLASH_CONFIG="/etc/openclash" +CRON_FILE="/etc/crontabs/root" +CONFIG_FILE="/etc/openclash/config.yaml" +LOG_FILE="/tmp/openclash.log" +START_LOG="/tmp/openclash_start.log" +BACKUP_FILE="/etc/openclash/config.bak" +START_BACKUP="/tmp/config.sbak" +CHANGE_FILE="/tmp/yaml_change.yaml" +RULE_FILE="/tmp/yaml_rules.yaml" +DNS_FILE="/tmp/yaml_dns.yaml" +PROXY_FILE="/tmp/yaml_proxy.yaml" +HOSTS_FILE="/etc/config/openclash_custom_hosts.list" + +add_cron() +{ + [ -z "$(grep "openclash.sh" "$CRON_FILE")" ] && { + [ "$(uci get openclash.config.auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.auto_update_time 2>/dev/null) * * $(uci get openclash.config.config_update_week_time 2>/dev/null) /usr/share/openclash/openclash.sh" >> $CRON_FILE + } + [ -z "$(grep "openclash_rule.sh" "$CRON_FILE")" ] && { + [ "$(uci get openclash.config.other_rule_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.other_rule_update_day_time 2>/dev/null) * * $(uci get openclash.config.other_rule_update_week_time 2>/dev/null) /usr/share/openclash/openclash_rule.sh" >> $CRON_FILE + } + [ -z "$(grep "openclash_ipdb.sh" "$CRON_FILE")" ] && { + [ "$(uci get openclash.config.geo_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.geo_update_day_time 2>/dev/null) * * $(uci get openclash.config.geo_update_week_time 2>/dev/null) /usr/share/openclash/openclash_ipdb.sh" >> $CRON_FILE + } + crontab $CRON_FILE + nohup /usr/share/openclash/openclash_watchdog.sh & +} + +del_cron() +{ + sed -i '/openclash.sh/d' $CRON_FILE 2>/dev/null + sed -i '/openclash_rule.sh/d' $CRON_FILE 2>/dev/null + sed -i '/openclash_ipdb.sh/d' $CRON_FILE 2>/dev/null + /etc/init.d/cron restart +} + +change_dns() { + uci add_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" + uci delete dhcp.@dnsmasq[0].resolvfile + uci set dhcp.@dnsmasq[0].noresolv=1 + uci commit dhcp +} + +revert_dns() { + dns_port=$(uci get openclash.config.dns_port 2>/dev/null) + uci del_list dhcp.@dnsmasq[0].server=127.0.0.1#"$dns_port" >/dev/null 2>&1 + uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto + uci set dhcp.@dnsmasq[0].noresolv=0 + uci commit dhcp + rm -rf /tmp/dnsmasq.d/dnsmasq_openclash.conf >/dev/null 2>&1 +} + +fake_block() { + if [ "$1" = "fake-ip" ]; then + if [ ! -f /etc/openclash/dnsmasq_fake_block.conf ]; then + sh /usr/share/openclash/openclash_fake_block.sh + elif [ "$(awk -F '/' '{print $3}' /etc/openclash/dnsmasq_fake_block.conf |head -1)" != "$2" ] && [ ! -z "$2" ]; then + sh /usr/share/openclash/openclash_fake_block.sh + fi + mkdir -p /tmp/dnsmasq.d + ln -s /etc/openclash/dnsmasq_fake_block.conf /tmp/dnsmasq.d/dnsmasq_openclash.conf + fi +} + +yml_check() +{ + #创建启动备份 + cp "$3" "$5" + + #创建原始备份 + if [ ! -f "$4" ]; then + cp "$3" "$4" + fi + + #自定义DNS还原 + if [ "$(grep -c '##Custom DNS##' "$3")" -gt 0 ] && [ "$2" = 0 ] && [ -f "$4" ]; then + awk '/^ {0,}nameserver:/,/Proxy:/{print}' "$4" | sed '/^Proxy:/d' >/tmp/bakdns.config 2>/dev/null + sed -i '/OpenClash-General-Settings/i\Custom DNS End' "$3" 2>/dev/null + sed -i '/^ \{0,\}nameserver:/,/^Custom DNS End$/d' "$3" 2>/dev/null + sed -i '/##Custom DNS##/r/tmp/bakdns.config' "$3" 2>/dev/null + rm -rf /tmp/bakdns.config 2>/dev/null + fi + + yml_dns_check + + #检查行首空格避免后续操作出错 + [ ! -z "$(grep "^ \{1,\}Proxy:" $3)" ] && { + sed -i "/^ \{1,\}Proxy:/c\Proxy:" "$3" + } + + [ ! -z "$(grep "^ \{1,\}Proxy Group:" $3)" ] && { + sed -i "/^ \{1,\}Proxy Group:/c\Proxy Group:" "$3" + } + + [ ! -z "$(grep "^ \{1,\}Rule:" $3)" ] && { + sed -i "/^ \{1,\}Rule:/c\Rule:" "$3" + } + + [ ! -z "$(grep "^ \{1,\}dns:" $3)" ] && { + sed -i "/^ \{1,\}dns:/c\dns:" "$3" + } + + if [ ! -z "$(grep "^ \{1,\}port:" $3)" ] || [ ! -z "$(grep "^ \{1,\}mode:" $3)" ] || [ ! -z "$(grep "^ \{1,\}log-level:" $3)" ]; then + cp "$3" /tmp/config.check 2>/dev/null + sed -i '/^dns:/,$d' /tmp/config.check 2>/dev/null + sed -i 's/^[ \t]*//' /tmp/config.check 2>/dev/null + sed -n '/^dns:/,$p' "$3" >> /tmp/config.check 2>/dev/null + mv /tmp/config.check "$3" 2>/dev/null + fi + + #添加标识 + sed -i '/OpenClash-General/d' "$3" 2>/dev/null + sed -i '/^Proxy:/i\#===================== OpenClash-General-Settings =====================#' "$3" 2>/dev/null +} + +#检查DNS设置 +yml_dns_check() +{ + + [ -z "$(grep '^dns:' $CONFIG_FILE)" ] && { + sed -i '/^Proxy:/i\dns:' "$CONFIG_FILE" 2>/dev/null + } + + [ -z "$(grep '^ \{0,\}nameserver:' $CONFIG_FILE)" ] && { + sed -i '/^Proxy:/i\ nameserver:' "$CONFIG_FILE" 2>/dev/null + sed -i "/nameserver:/a\ - tls://8.8.8.8:853" "$CONFIG_FILE" 2>/dev/null + sed -i "/nameserver:/a\ - 114.114.114.114" "$CONFIG_FILE" 2>/dev/null + } + + dns_port=$(grep "^ \{0,\}listen:" $CONFIG_FILE |awk -F ':' '{print $3}' |awk -F '#' '{print $1}' |tr -cd "[0-9]" 2>/dev/null) + if [ -z "$dns_port" ] || [ "$dns_port" -eq 53 ]; then + dns_port=7874 + fi + + if [ ! -z "$(grep "^ \{0,\}listen:" "$CONFIG_FILE")" ]; then + sed -i "/^ \{0,\}listen:/c\ listen: 0.0.0.0:${dns_port}" "$CONFIG_FILE" 2>/dev/null + else + sed -i "/^dns:/a\ listen: 0.0.0.0:${dns_port}" "$CONFIG_FILE" 2>/dev/null + fi + + uci set openclash.config.dns_port="$dns_port" && uci commit openclash + +} + +#切割配置文件以分开处理 +yml_cut() +{ + cp "$4" "$1" + sed -i '/^Rule:/,$d' "$1" + sed -n '/^ \{0,\}nameserver:/,$p' "$1" >"$3" + sed -n '/^ \{0,\}Proxy:/,$p' "$3" >"$5" + sed -i '/^ \{0,\}nameserver:/,$d' "$1" + sed -i '/^ \{0,\}Proxy:/,$d' "$3" + sed -n '/^Rule:/,$p' "$4" >"$2" + +} + +#获取自定义DNS设置 +yml_dns_get() +{ + + local section="$1" + local dns_type="" + local dns_address="" + config_get_bool "enabled" "$section" "enabled" "1" + config_get "port" "$section" "port" "" + config_get "type" "$section" "type" "" + config_get "ip" "$section" "ip" "" + config_get "group" "$section" "group" "" + + if [ "$enabled" = "0" ]; then + return + fi + + if [ -z "$ip" ]; then + return + fi + + if [ "$type" = "tcp" ]; then + dns_type="- tcp://" + elif [ "$type" = "tls" ]; then + dns_type="- tls://" + elif [ "$type" = "udp" ]; then + dns_type="- " + elif [ "$type" = "https" ]; then + dns_type="- https://" + fi + + if [ ! -z "$port" ] && [ ! -z "$ip" ]; then + dns_address="$ip:$port" + elif [ -z "$port" ] && [ ! -z "$ip" ]; then + dns_address="$ip" + else + return + fi + + if [ ! -z "$group" ]; then + if [ "$group" = "nameserver" ]; then + echo " $dns_type$dns_address" >>/etc/openclash/config.namedns + else + if [ -z "$(grep "fallback:$" /etc/openclash/config.falldns 2>/dev/null)" ]; then + echo " fallback:" >/etc/openclash/config.falldns + fi + echo " $dns_type$dns_address" >>/etc/openclash/config.falldns + fi + else + return + fi + +} + +#添加自定义DNS设置 +yml_dns_custom() +{ + if [ "$1" = 1 ]; then + echo " nameserver:" >/etc/openclash/config.namedns + config_load "openclash" + config_foreach yml_dns_get "dns_servers" + sed -i '/^ \{0,\}nameserver:/i\##Custom DNS##' "$2" 2>/dev/null + sed -i '/OpenClash-General-Settings/i\Custom DNS End' "$2" 2>/dev/null + sed -i '/^ \{0,\}nameserver:/,/^Custom DNS End$/d' "$2" 2>/dev/null + sed -i '/##Custom DNS##/r/etc/openclash/config.falldns' "$2" 2>/dev/null + sed -i '/##Custom DNS##/r/etc/openclash/config.namedns' "$2" 2>/dev/null + rm -rf /etc/openclash/config.namedns 2>/dev/null + rm -rf /etc/openclash/config.falldns 2>/dev/null + else + sed -i "/^ \{0,\}nameserver:/c\ nameserver:" "$2" 2>/dev/null + sed -i "/^ \{0,\}fallback:/c\ fallback:" "$2" 2>/dev/null + fi + + if [ -z "$(grep '^ \{0,\}fallback-filter:' $2)" ]; then + sed -i '/OpenClash-General-Settings/i\ fallback-filter:' "$2" 2>/dev/null + sed -i '/OpenClash-General-Settings/i\ geoip: true' "$2" 2>/dev/null + sed -i '/OpenClash-General-Settings/i\ ipcidr:' "$2" 2>/dev/null + sed -i '/OpenClash-General-Settings/i\ - 240.0.0.0/4' "$2" 2>/dev/null + else + if [ -z "$(grep '^ fallback-filter:' $2)" ]; then + sed -i "/fallback-filter:/c\ fallback-filter:" "$2" 2>/dev/null + fi + if [ -z "$(grep '^ geoip: true' $2)" ]; then + sed -i "/geoip: true/c\ geoip: true" "$2" 2>/dev/null + fi + if [ -z "$(grep '^ ipcidr:' $2)" ]; then + sed -i "/ipcidr:/c\ ipcidr:" "$2" 2>/dev/null + fi + fi + + if [ -z "$(grep "^ - " $2)" ]; then + sed -i '/^ \{0,\}nameserver:/,/^ \{0,\}fallback-filter:/ {s/^ \{0,\}- / - /}' "$2" 2>/dev/null #修改参数空格 + fi + if [ -z "$(grep "^ - " $2)" ]; then + sed -i '/^ \{0,\}ipcidr:/,/OpenClash-General-Settings/ {s/^ \{0,\}- / - /}' "$2" 2>/dev/null #修改参数空格 + fi +} + +#添加自定义Hosts设置 +yml_hosts_custom() +{ + if [ "$en_mode" = "redir-host" ]; then + if [ -z "$(grep '^ \{0,\}hosts:' $1)" ]; then + sed -i '/^dns:/i\hosts:' "$1" 2>/dev/null + else + if [ ! -z "$(grep '^ \{1,\}hosts:' $1)" ]; then + sed -i '/^ \{1,\}hosts:/d' "$1" 2>/dev/null + sed -i '/^dns:/i\hosts:' "$1" 2>/dev/null + fi + fi + sed -i "s/^ \{0,\}/ /" "$2" 2>/dev/null #修改参数空格 + sed -i "1i\##Custom HOSTS##" "$2" 2>/dev/null + echo "##Custom HOSTS END##" >>"$2" 2>/dev/null + sed -i '/##Custom HOSTS##/,/##Custom HOSTS END##/d' "$1" 2>/dev/null + sed -i '/^hosts:/r/etc/config/openclash_custom_hosts.list' "$1" 2>/dev/null + sed -i '/##Custom HOSTS##/d' "$2" 2>/dev/null + sed -i '/##Custom HOSTS END##/d' "$2" 2>/dev/null + else + sed -i '/##Custom HOSTS##/,/##Custom HOSTS END##/d' "$1" 2>/dev/null + sed -i '/^ *$/d' "$1" 2>/dev/null #删除空行 + hostlen=$(sed -n '/hosts:/=' "$1" 2>/dev/null) + lasthlen=$(sed -n '$=' "$1" 2>/dev/null) + dnslen=$(sed -n '/dns:/=' "$1" 2>/dev/null) + if [ "$hostlen" = "$lasthlen" ] && [ ! -z "$hostlen" ]; then + sed -i '/^ \{0,\}hosts:/d' "$1" 2>/dev/null + fi + if [ "$hostlen" = "$(expr $dnslen - 1)" ] && [ ! -z "$hostlen" ]; then + sed -i '/^ \{0,\}hosts:/d' "$1" 2>/dev/null + fi + fi +} + +#获取认证信息 +yml_auth_get() +{ + local section="$1" + config_get_bool "enabled" "$section" "enabled" "1" + config_get "username" "$section" "username" "" + config_get "password" "$section" "password" "" + + if [ "$enabled" = "0" ]; then + return + fi + + if [ -z "$username" ] || [ -z "$password" ]; then + return + else + echo " - $username:$password" >>/etc/openclash/config.auth + fi +} + +#添加认证信息 +yml_auth_custom() +{ + if [ ! -z "$(grep "^authentication:" "$1")" ]; then + sed -i '/^dns:/i\#authentication' "$1" 2>/dev/null + sed -i '/^authentication:/,/^#authentication/d' "$1" 2>/dev/null + fi + [ -f /etc/openclash/config.auth ] && { + sed -i '/^dns:/i\authentication:' "$1" 2>/dev/null + sed -i '/^authentication:/r/etc/openclash/config.auth' "$1" 2>/dev/null + rm -rf /etc/openclash/config.auth 2>/dev/null + } +} + +start() +{ +#禁止多个实例 +status=$(ps|grep -c /etc/init.d/openclash) +[ "$status" -gt "3" ] && exit 0 + +if [ ! -f "$CONFIG_FILE" ] && [ "$(ls -l /etc/openclash/config.yml 2>/dev/null |awk '{print int($5/1024)}')" -gt 0 ]; then + mv "/etc/openclash/config.yml" "$CONFIG_FILE" +fi +if [ ! -f "$CONFIG_FILE" ] && [ -f "$BACKUP_FILE" ]; then + cp $BACKUP_FILE $CONFIG_FILE +fi + +echo "OpenClash 开始启动..." >$START_LOG +enable=$(uci get openclash.config.enable 2>/dev/null) +LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") +if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then +#检查是否存在核心文件 +[ ! -f "$CLASH" ] && { + echo "OpenClash 核心文件不存在,开始下载..." >$START_LOG + nohup /usr/share/openclash/openclash_core.sh & + exit 0 +} + echo "第一步: 获取配置..." >$START_LOG + en_mode=$(uci get openclash.config.en_mode 2>/dev/null) + enable_custom_dns=$(uci get openclash.config.enable_custom_dns 2>/dev/null) + rule_source=$(uci get openclash.config.rule_source 2>/dev/null) + enable_custom_clash_rules=$(uci get openclash.config.enable_custom_clash_rules 2>/dev/null) + da_password=$(uci get openclash.config.dashboard_password 2>/dev/null) + cn_port=$(uci get openclash.config.cn_port 2>/dev/null) + proxy_port=$(uci get openclash.config.proxy_port 2>/dev/null) + ipv6_enable=$(uci get openclash.config.ipv6_enable 2>/dev/null) + http_port=$(uci get openclash.config.http_port 2>/dev/null) + socks_port=$(uci get openclash.config.socks_port 2>/dev/null) + enable_redirect_dns=$(uci get openclash.config.enable_redirect_dns 2>/dev/null) + lan_ip=$(uci get network.lan.ipaddr 2>/dev/null) + direct_dns=$(uci get openclash.config.direct_dns 2>/dev/null) + echo "第二步: 配置文件检查..." >$START_LOG + yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKUP_FILE" "$START_BACKUP" + grep "^ \{0,\}Proxy:" $CONFIG_FILE >/dev/null 2>&1 && grep "^ \{0,\}Proxy Group:" $CONFIG_FILE >/dev/null 2>&1 && grep "^ \{0,\}Rule:" $CONFIG_FILE >/dev/null 2>&1 + if [ "$?" -ne "0" ]; then + nohup $CLASH -d "$CLASH_CONFIG" >> $LOG_FILE 2>&1 & + echo "错误: 配置文件完整性检查不通过,已自动还原配置文件,请根据日志信息对照模板格式检查修改配置文件!" >$START_LOG + mv $START_BACKUP $CONFIG_FILE + stop + sleep 5 + echo "" >$START_LOG + else + echo "第三步: 修改配置文件..." >$START_LOG + config_load "openclash" + config_foreach yml_auth_get "authentication" + yml_auth_custom "$CONFIG_FILE" + yml_cut "$CHANGE_FILE" "$RULE_FILE" "$DNS_FILE" "$CONFIG_FILE" "$PROXY_FILE" + yml_dns_custom "$enable_custom_dns" "$DNS_FILE" + yml_hosts_custom "$CHANGE_FILE" "$HOSTS_FILE" + sh /usr/share/openclash/yml_change.sh "$LOGTIME" "$en_mode" "$enable_custom_dns" "$da_password" "$cn_port" "$proxy_port" "$CHANGE_FILE" "$ipv6_enable" "$http_port" "$socks_port" "$lan_ip" & + sh /usr/share/openclash/yml_rules_change.sh "$LOGTIME" "$rule_source" "$enable_custom_clash_rules" "$RULE_FILE" & + wait + cat $CHANGE_FILE $DNS_FILE $PROXY_FILE $RULE_FILE > $CONFIG_FILE 2>/dev/null + rm -rf /tmp/yaml_* 2>/dev/null + echo "第四步: DNS设置检查..." >$START_LOG + if [ ! -z "$(sed -n '/^ \{0,\}nameserver:/{n;p}' $CONFIG_FILE |grep '^ \{0,\}fallback:')" ] || [ ! -z "$(sed -n '/^ \{0,\}nameserver:/{n;p}' $CONFIG_FILE |grep 'OpenClash-General')" ]; then + echo "错误: 配置文件DNS选项下的Nameserver必须设置服务器,已自动还原配置文件,请重新设置!" >$START_LOG + echo "${LOGTIME} Nameserver Must Be Set, Please Change Your Configrations In Config.yaml" >>$LOG_FILE + mv $START_BACKUP $CONFIG_FILE + sleep 10 + echo "" >$START_LOG + else + echo "第五步: 启动 Clash 主程序..." >$START_LOG + nohup $CLASH -d "$CLASH_CONFIG" >> $LOG_FILE 2>&1 & + + echo "第六步: 设置控制面板..." >$START_LOG + ln -s /usr/share/openclash/yacd /www/openclash 2>/dev/null + + echo "第七步: 设置 OpenClash 防火墙规则..." >$START_LOG + if [ -z "$(uci get firewall.openclash 2>/dev/null)" ] || [ -z "$(uci get ucitrack.@openclash[-1].init 2>/dev/null)" ]; then + uci delete ucitrack.@openclash[-1] >/dev/null 2>&1 + uci add ucitrack openclash >/dev/null 2>&1 + uci set ucitrack.@openclash[-1].init=openclash >/dev/null 2>&1 + uci commit ucitrack >/dev/null 2>&1 + uci delete firewall.openclash >/dev/null 2>&1 + uci set firewall.openclash=include >/dev/null 2>&1 + uci set firewall.openclash.type=script >/dev/null 2>&1 + uci set firewall.openclash.path=/var/etc/openclash.include >/dev/null 2>&1 + uci set firewall.openclash.reload=1 >/dev/null 2>&1 + uci commit firewall >/dev/null 2>&1 + fi + mkdir -p /var/etc +cat > "/var/etc/openclash.include" <<-EOF +iptables -t nat -N openclash +iptables -t nat -A openclash -d 0.0.0.0/8 -j RETURN +iptables -t nat -A openclash -d 10.0.0.0/8 -j RETURN +iptables -t nat -A openclash -d 127.0.0.0/8 -j RETURN +iptables -t nat -A openclash -d 169.254.0.0/16 -j RETURN +iptables -t nat -A openclash -d 172.16.0.0/12 -j RETURN +iptables -t nat -A openclash -d 192.168.0.0/16 -j RETURN +iptables -t nat -A openclash -d 224.0.0.0/4 -j RETURN +iptables -t nat -A openclash -d 240.0.0.0/4 -j RETURN +iptables -t nat -A openclash -p tcp --dport 22 -j ACCEPT +iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" +iptables -t nat -A PREROUTING -p tcp -j openclash +iptables -t nat -A OUTPUT -p tcp -d 198.18.0.1/16 -j REDIRECT --to-ports "$proxy_port" +EOF + + if [ "$ipv6_enable" -eq 1 ]; then +cat >> "/var/etc/openclash.include" <<-EOF +ip6tables -t nat -N openclash +ip6tables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" +ip6tables -t nat -A PREROUTING -p tcp -j openclash +EOF + fi + + /etc/init.d/firewall restart >/dev/null 2>&1 + /etc/init.d/miniupnpd restart >/dev/null 2>&1 + + echo "第八步: 重启 Dnsmasq 程序..." >$START_LOG + if [ "$(iptables -t nat -nL PREROUTING --line-number |grep dpt:53 |wc -l)" -gt 2 ]; then + echo "发现53端口被劫持,请将OpenClash设置为劫持53端口程序的上游DNS服务器!" >$START_LOG + echo "${LOGTIME} Warring: OpenClash May Can Not Take Over DNS, Please Use OpenClash for Upstream DNS Resolve Server" >> $LOG_FILE + sleep 5 + fi + [ "$enable_redirect_dns" != "0" ] && { + change_dns + } + fake_block "$en_mode" "$direct_dns" + /etc/init.d/dnsmasq restart >/dev/null 2>&1 + if pidof clash >/dev/null; then + echo "第九步: 添加 OpenClash 计划任务,启动进程守护程序..." >$START_LOG + add_cron + echo "OpenClash 启动成功,请等待服务器上线!" >$START_LOG + echo "${LOGTIME} OpenClash Start Successful" >> $LOG_FILE + sleep 5 + echo "" >$START_LOG + else + if [ "$rule_source" != 0 ] || [ "$enable_custom_clash_rules" != 0 ]; then + echo "错误: OpenClash 启动失败,尝试还原规则并重新启动 Clash 主程序..." >$START_LOG + echo "${LOGTIME} OpenClash Can Not Start, Try Use Backup Rules Start Again" >> $LOG_FILE + mv "$BACKUP_FILE" /etc/openclash/configrules.bak + sed -i -n '/^Rule:/,$p' /etc/openclash/configrules.bak + sed -i '/^Rule:/,$d' "$CONFIG_FILE" + cat /etc/openclash/configrules.bak >> "$CONFIG_FILE" + rm -rf /etc/openclash/configrules.bak + nohup $CLASH -d "$CLASH_CONFIG" >> $LOG_FILE 2>&1 & + sleep 3 + if pidof clash >/dev/null; then + add_cron + echo "OpenClash 使用备份规则启动成功,请更新、检查变动的规则后重试!" >$START_LOG + echo "${LOGTIME} OpenClash Start Successful With Backup Rules Config, Please Check Or Update Other Rules And Retry" >> $LOG_FILE + sleep 5 + echo "" >$START_LOG + else + echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG + echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE + sleep 10 + echo "" >$START_LOG + stop && echo "" >$START_LOG + fi + else + echo "错误: OpenClash 启动失败,请到日志页面查看详细错误信息!" >$START_LOG + echo "${LOGTIME} OpenClash Can Not Start, Please Check The Error Info And Try Again" >> $LOG_FILE + sleep 10 + echo "" >$START_LOG + stop && echo "" >$START_LOG + fi + fi + fi + fi + rm -rf $START_BACKUP 2>/dev/null +else + subscribe_url=$(uci get openclash.config.subscribe_url 2>/dev/null) + if [ ! -f "$CONFIG_FILE" ] && [ ! -z "$subscribe_url" ]; then + echo "OpenClash 配置文件不存在,开始下载..." >$START_LOG + nohup /usr/share/openclash/openclash.sh & + exit 0 + elif [ ! -f "$CONFIG_FILE" ]; then + echo "错误: OpenClash 缺少配置文件,请上传或更新配置文件!" >$START_LOG + echo "${LOGTIME} Config Not Found" >> $LOG_FILE + sleep 5 + echo "" >$START_LOG + else + echo "错误: 请从 OpenClash 客户端界面启动程序!" >$START_LOG + echo "${LOGTIME} OpenClash Must Be Start From The Luci Page" >> $LOG_FILE + sleep 5 + echo "" >$START_LOG + fi +fi +} + +stop() +{ + echo "OpenClash 开始关闭..." >$START_LOG + echo "第一步: 删除 OpenClash 防火墙规则..." >$START_LOG + rm -rf /var/etc/openclash.include 2>/dev/null + /etc/init.d/firewall restart >/dev/null 2>&1 + /etc/init.d/miniupnpd restart >/dev/null 2>&1 + + + echo "第二步: 关闭 OpenClash 守护程序..." >$START_LOG + kill -9 "$(ps |grep openclash_watchdog.sh |grep -v grep |awk '{print $1}')" >/dev/null 2>&1 + + echo "第三步: 关闭 Clash 主程序..." >$START_LOG + kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null + + echo "第四步: 重启 Dnsmasq 程序..." >$START_LOG + revert_dns + /etc/init.d/dnsmasq restart >/dev/null 2>&1 + + echo "第五步:删除 OpenClash 残留文件..." >$START_LOG + enable=$(uci get openclash.config.enable 2>/dev/null) + if [ "$enable" -eq 0 ]; then + rm -rf $LOG_FILE 2>/dev/null + rm -rf /www/openclash 2>/dev/null + rm -rf /tmp/openclash_last_version 2>/dev/null + rm -rf /tmp/clash_last_version 2>/dev/null + rm -rf /tmp/Proxy_Group 2>/dev/null + echo "OpenClash 关闭成功!" >$START_LOG + sleep 5 + rm -rf $START_LOG + fi + + del_cron + + echo "OpenClash Already Stop" +} + + +restart() +{ + stop + start +} diff --git a/luci-app-openclash/files/etc/openclash/ConnersHua.yaml b/luci-app-openclash/files/etc/openclash/ConnersHua.yaml index 899affebcc..7897dd7275 100644 --- a/luci-app-openclash/files/etc/openclash/ConnersHua.yaml +++ b/luci-app-openclash/files/etc/openclash/ConnersHua.yaml @@ -1,1213 +1,1213 @@ -Rule: -##source:ConnersHua -# Feeb -- DOMAIN-KEYWORD,epochtimes,REJECT -- DOMAIN-SUFFIX,881903.com,REJECT -- DOMAIN-SUFFIX,aboluowang.com,REJECT -- DOMAIN-SUFFIX,bannedbook.org,REJECT -- DOMAIN-SUFFIX,bldaily.com,REJECT -- DOMAIN-SUFFIX,china21.org,REJECT -- DOMAIN-SUFFIX,chinaaffairs.org,REJECT -- DOMAIN-SUFFIX,dajiyuan.com,REJECT -- DOMAIN-SUFFIX,dalianmeng.org,REJECT -- DOMAIN-SUFFIX,dkn.tv,REJECT -- DOMAIN-SUFFIX,dongtaiwang.com,REJECT -- DOMAIN-SUFFIX,edoors.com,REJECT -- DOMAIN-SUFFIX,epochweekly.com,REJECT -- DOMAIN-SUFFIX,falundafa.org,REJECT -- DOMAIN-SUFFIX,fgmtv.org,REJECT -- DOMAIN-SUFFIX,gardennetworks.com,REJECT -- DOMAIN-SUFFIX,gongyiluntan.org,REJECT -- DOMAIN-SUFFIX,gpass1.com,REJECT -- DOMAIN-SUFFIX,hrichina.org,REJECT -- DOMAIN-SUFFIX,huanghuagang.org,REJECT -- DOMAIN-SUFFIX,internetfreedom.org,REJECT -- DOMAIN-SUFFIX,kanzhongguo.com,REJECT -- DOMAIN-SUFFIX,lagranepoca.com,REJECT -- DOMAIN-SUFFIX,mh4u.org,REJECT -- DOMAIN-SUFFIX,mhradio.org,REJECT -- DOMAIN-SUFFIX,minghui.org,REJECT -- DOMAIN-SUFFIX,newrealmstudios.ca,REJECT -- DOMAIN-SUFFIX,ntdtv.com,REJECT -- DOMAIN-SUFFIX,ogate.org,REJECT -- DOMAIN-SUFFIX,open.com.hk,REJECT -- DOMAIN-SUFFIX,organcare.org.tw,REJECT -- DOMAIN-SUFFIX,qxbbs.org,REJECT -- DOMAIN-SUFFIX,renminbao.com,REJECT -- DOMAIN-SUFFIX,secretchina.com,REJECT -- DOMAIN-SUFFIX,shenyun.com,REJECT -- DOMAIN-SUFFIX,shenyunperformingarts.org,REJECT -- DOMAIN-SUFFIX,shenzhoufilm.com,REJECT -- DOMAIN-SUFFIX,soundofhope.org,REJECT -- DOMAIN-SUFFIX,theepochtimes.com,REJECT -- DOMAIN-SUFFIX,tiandixing.org,REJECT -- DOMAIN-SUFFIX,tuidang.org,REJECT -- DOMAIN-SUFFIX,velkaepocha.sk,REJECT -- DOMAIN-SUFFIX,watchinese.com,REJECT -- DOMAIN-SUFFIX,wixsite.com,REJECT -- DOMAIN-SUFFIX,wujie.net,REJECT -- DOMAIN-SUFFIX,wujieliulan.com,REJECT -- DOMAIN-SUFFIX,xinsheng.net,REJECT -- DOMAIN-SUFFIX,zhengjian.org,REJECT -- DOMAIN-SUFFIX,zhuichaguoji.org,REJECT - -# > Unbreak -# >> Firebase Cloud Messaging -- DOMAIN,mtalk.google.com,DIRECT - -# Internet Service Provider Hijacking 运营商劫持 -- DOMAIN-SUFFIX,17gouwuba.com,Hijacking -- DOMAIN-SUFFIX,186078.com,Hijacking -- DOMAIN-SUFFIX,189zj.cn,Hijacking -- DOMAIN-SUFFIX,285680.com,Hijacking -- DOMAIN-SUFFIX,3721zh.com,Hijacking -- DOMAIN-SUFFIX,4336wang.cn,Hijacking -- DOMAIN-SUFFIX,51chumoping.com,Hijacking -- DOMAIN-SUFFIX,51mld.cn,Hijacking -- DOMAIN-SUFFIX,51mypc.cn,Hijacking -- DOMAIN-SUFFIX,58mingri.cn,Hijacking -- DOMAIN-SUFFIX,58mingtian.cn,Hijacking -- DOMAIN-SUFFIX,5vl58stm.com,Hijacking -- DOMAIN-SUFFIX,6d63d3.com,Hijacking -- DOMAIN-SUFFIX,7gg.cc,Hijacking -- DOMAIN-SUFFIX,91veg.com,Hijacking -- DOMAIN-SUFFIX,9s6q.cn,Hijacking -- DOMAIN-SUFFIX,adsame.com,Hijacking -- DOMAIN-SUFFIX,aiclk.com,Hijacking -- DOMAIN-SUFFIX,akuai.top,Hijacking -- DOMAIN-SUFFIX,atplay.cn,Hijacking -- DOMAIN-SUFFIX,baiwanchuangyi.com,Hijacking -- DOMAIN-SUFFIX,bayimob.com,Hijacking -- DOMAIN-SUFFIX,beerto.cn,Hijacking -- DOMAIN-SUFFIX,beilamusi.com,Hijacking -- DOMAIN-SUFFIX,benshiw.net,Hijacking -- DOMAIN-SUFFIX,bianxianmao.com,Hijacking -- DOMAIN-SUFFIX,bryonypie.com,Hijacking -- DOMAIN-SUFFIX,cishantao.com,Hijacking -- DOMAIN-SUFFIX,cszlks.com,Hijacking -- DOMAIN-SUFFIX,cudaojia.com,Hijacking -- DOMAIN-SUFFIX,dafapromo.com,Hijacking -- DOMAIN-SUFFIX,daitdai.com,Hijacking -- DOMAIN-SUFFIX,dsaeerf.com,Hijacking -- DOMAIN-SUFFIX,dugesheying.com,Hijacking -- DOMAIN-SUFFIX,dv8c1t.cn,Hijacking -- DOMAIN-SUFFIX,echatu.com,Hijacking -- DOMAIN-SUFFIX,erdoscs.com,Hijacking -- DOMAIN-SUFFIX,fan-yong.com,Hijacking -- DOMAIN-SUFFIX,feih.com.cn,Hijacking -- DOMAIN-SUFFIX,fjlqqc.com,Hijacking -- DOMAIN-SUFFIX,fkku194.com,Hijacking -- DOMAIN-SUFFIX,freedrive.cn,Hijacking -- DOMAIN-SUFFIX,gclick.cn,Hijacking -- DOMAIN-SUFFIX,goufanli100.com,Hijacking -- DOMAIN-SUFFIX,goupaoerdai.com,Hijacking -- DOMAIN-SUFFIX,gouwubang.com,Hijacking -- DOMAIN-SUFFIX,gzxnlk.com,Hijacking -- DOMAIN-SUFFIX,haoshengtoys.com,Hijacking -- DOMAIN-SUFFIX,ichaosheng.com,Hijacking -- DOMAIN-SUFFIX,ishop789.com,Hijacking -- DOMAIN-SUFFIX,jdkic.com,Hijacking -- DOMAIN-SUFFIX,jiubuhua.com,Hijacking -- DOMAIN-SUFFIX,jwg365.cn,Hijacking -- DOMAIN-SUFFIX,kawo77.com,Hijacking -- DOMAIN-SUFFIX,kualianyingxiao.cn,Hijacking -- DOMAIN-SUFFIX,kumihua.com,Hijacking -- DOMAIN-SUFFIX,ltheanine.cn,Hijacking -- DOMAIN-SUFFIX,maipinshangmao.com,Hijacking -- DOMAIN-SUFFIX,minisplat.cn,Hijacking -- DOMAIN-SUFFIX,mkitgfs.com,Hijacking -- DOMAIN-SUFFIX,mlnbike.com,Hijacking -- DOMAIN-SUFFIX,mobjump.com,Hijacking -- DOMAIN-SUFFIX,nbkbgd.cn,Hijacking -- DOMAIN-SUFFIX,newapi.com,Hijacking -- DOMAIN-SUFFIX,pinzhitmall.com,Hijacking -- DOMAIN-SUFFIX,poppyta.com,Hijacking -- DOMAIN-SUFFIX,qianchuanghr.com,Hijacking -- DOMAIN-SUFFIX,qichexin.com,Hijacking -- DOMAIN-SUFFIX,qinchugudao.com,Hijacking -- DOMAIN-SUFFIX,quanliyouxi.cn,Hijacking -- DOMAIN-SUFFIX,qutaobi.com,Hijacking -- DOMAIN-SUFFIX,ry51w.cn,Hijacking -- DOMAIN-SUFFIX,sg536.cn,Hijacking -- DOMAIN-SUFFIX,sifubo.cn,Hijacking -- DOMAIN-SUFFIX,sifuce.cn,Hijacking -- DOMAIN-SUFFIX,sifuda.cn,Hijacking -- DOMAIN-SUFFIX,sifufu.cn,Hijacking -- DOMAIN-SUFFIX,sifuge.cn,Hijacking -- DOMAIN-SUFFIX,sifugu.cn,Hijacking -- DOMAIN-SUFFIX,sifuhe.cn,Hijacking -- DOMAIN-SUFFIX,sifuhu.cn,Hijacking -- DOMAIN-SUFFIX,sifuji.cn,Hijacking -- DOMAIN-SUFFIX,sifuka.cn,Hijacking -- DOMAIN-SUFFIX,smgru.net,Hijacking -- DOMAIN-SUFFIX,taoggou.com,Hijacking -- DOMAIN-SUFFIX,tcxshop.com,Hijacking -- DOMAIN-SUFFIX,tjqonline.cn,Hijacking -- DOMAIN-SUFFIX,topitme.com,Hijacking -- DOMAIN-SUFFIX,tt3sm4.cn,Hijacking -- DOMAIN-SUFFIX,tuia.cn,Hijacking -- DOMAIN-SUFFIX,tuipenguin.com,Hijacking -- DOMAIN-SUFFIX,tuitiger.com,Hijacking -- DOMAIN-SUFFIX,websd8.com,Hijacking -- DOMAIN-SUFFIX,wx16999.com,Hijacking -- DOMAIN-SUFFIX,xiaohuau.xyz,Hijacking -- DOMAIN-SUFFIX,yinmong.com,Hijacking -- DOMAIN-SUFFIX,yiqifa.com,Hijacking -- DOMAIN-SUFFIX,yitaopt.com,Hijacking -- DOMAIN-SUFFIX,yjqiqi.com,Hijacking -- DOMAIN-SUFFIX,yukhj.com,Hijacking -- DOMAIN-SUFFIX,zhaozecheng.cn,Hijacking -- DOMAIN-SUFFIX,zhenxinet.com,Hijacking -- DOMAIN-SUFFIX,zlne800.com,Hijacking -- DOMAIN-SUFFIX,zunmi.cn,Hijacking -- DOMAIN-SUFFIX,zzd6.com,Hijacking -- IP-CIDR,39.107.15.115/32,Hijacking -- IP-CIDR,47.89.59.182/32,Hijacking -- IP-CIDR,103.49.209.27/32,Hijacking -- IP-CIDR,123.56.152.96/32,Hijacking -# > ChinaNet -- IP-CIDR,61.160.200.223/32,Hijacking -- IP-CIDR,61.160.200.242/32,Hijacking -- IP-CIDR,61.160.200.252/32,Hijacking -- IP-CIDR,61.174.50.214/32,Hijacking -- IP-CIDR,111.175.220.163/32,Hijacking -- IP-CIDR,111.175.220.164/32,Hijacking -- IP-CIDR,124.232.160.178/32,Hijacking -- IP-CIDR,175.6.223.15/32,Hijacking -- IP-CIDR,183.59.53.237/32,Hijacking -- IP-CIDR,218.93.127.37/32,Hijacking -- IP-CIDR,221.228.17.152/32,Hijacking -- IP-CIDR,221.231.6.79/32,Hijacking -- IP-CIDR,222.186.61.91/32,Hijacking -- IP-CIDR,222.186.61.95/32,Hijacking -- IP-CIDR,222.186.61.96/32,Hijacking -- IP-CIDR,222.186.61.97/32,Hijacking -# > ChinaUnicom -- IP-CIDR,106.75.231.48/32,Hijacking -- IP-CIDR,119.4.249.166/32,Hijacking -- IP-CIDR,220.196.52.141/32,Hijacking -- IP-CIDR,221.6.4.148/32,Hijacking -# > ChinaMobile -- IP-CIDR,114.247.28.96/32,Hijacking -- IP-CIDR,221.179.131.72/32,Hijacking -- IP-CIDR,221.179.140.145/32,Hijacking -# > Dr.Peng -- IP-CIDR,10.72.25.0/24,Hijacking -- IP-CIDR,115.182.16.79/32,Hijacking -- IP-CIDR,118.144.88.126/32,Hijacking -- IP-CIDR,118.144.88.215/32,Hijacking -- IP-CIDR,118.144.88.216/32,Hijacking -- IP-CIDR,120.76.189.132/32,Hijacking -- IP-CIDR,124.14.21.147/32,Hijacking -- IP-CIDR,124.14.21.151/32,Hijacking -- IP-CIDR,180.166.52.24/32,Hijacking -- IP-CIDR,211.161.101.106/32,Hijacking -- IP-CIDR,220.115.251.25/32,Hijacking -- IP-CIDR,222.73.156.235/32,Hijacking - -# Infamous 声名狼藉 -- DOMAIN-SUFFIX,kuaizip.com,Hijacking -- DOMAIN-SUFFIX,mackeeper.com,Hijacking -# > Adobe -- DOMAIN-SUFFIX,flash.cn,Hijacking -- DOMAIN,geo2.adobe.com,Hijacking -# > CJ Marketing -- DOMAIN-SUFFIX,4009997658.com,Hijacking -- DOMAIN-SUFFIX,abbyychina.com,Hijacking -- DOMAIN-SUFFIX,bartender.cc,Hijacking -- DOMAIN-SUFFIX,betterzip.net,Hijacking -- DOMAIN-SUFFIX,beyondcompare.cc,Hijacking -- DOMAIN-SUFFIX,bingdianhuanyuan.cn,Hijacking -- DOMAIN-SUFFIX,chemdraw.com.cn,Hijacking -- DOMAIN-SUFFIX,cjmakeding.com,Hijacking -- DOMAIN-SUFFIX,cjmkt.com,Hijacking -- DOMAIN-SUFFIX,codesoftchina.com,Hijacking -- DOMAIN-SUFFIX,coreldrawchina.com,Hijacking -- DOMAIN-SUFFIX,crossoverchina.com,Hijacking -- DOMAIN-SUFFIX,easyrecoverychina.com,Hijacking -- DOMAIN-SUFFIX,ediuschina.com,Hijacking -- DOMAIN-SUFFIX,flstudiochina.com,Hijacking -- DOMAIN-SUFFIX,formysql.com,Hijacking -- DOMAIN-SUFFIX,guitarpro.cc,Hijacking -- DOMAIN-SUFFIX,huishenghuiying.com.cn,Hijacking -- DOMAIN-SUFFIX,hypersnap.net,Hijacking -- DOMAIN-SUFFIX,iconworkshop.cn,Hijacking -- DOMAIN-SUFFIX,imindmap.cc,Hijacking -- DOMAIN-SUFFIX,jihehuaban.com.cn,Hijacking -- DOMAIN-SUFFIX,keyshot.cc,Hijacking -- DOMAIN-SUFFIX,kingdeecn.cn,Hijacking -- DOMAIN-SUFFIX,logoshejishi.com,Hijacking -- DOMAIN-SUFFIX,mairuan.cn,Hijacking -- DOMAIN-SUFFIX,mairuan.com,Hijacking -- DOMAIN-SUFFIX,mairuan.com.cn,Hijacking -- DOMAIN-SUFFIX,mairuan.net,Hijacking -- DOMAIN-SUFFIX,mairuanwang.com,Hijacking -- DOMAIN-SUFFIX,makeding.com,Hijacking -- DOMAIN-SUFFIX,mathtype.cn,Hijacking -- DOMAIN-SUFFIX,mindmanager.cc,Hijacking -- DOMAIN-SUFFIX,mindmapper.cc,Hijacking -- DOMAIN-SUFFIX,mycleanmymac.com,Hijacking -- DOMAIN-SUFFIX,nicelabel.cc,Hijacking -- DOMAIN-SUFFIX,ntfsformac.cc,Hijacking -- DOMAIN-SUFFIX,ntfsformac.cn,Hijacking -- DOMAIN-SUFFIX,overturechina.com,Hijacking -- DOMAIN-SUFFIX,passwordrecovery.cn,Hijacking -- DOMAIN-SUFFIX,pdfexpert.cc,Hijacking -- DOMAIN-SUFFIX,shankejingling.com,Hijacking -- DOMAIN-SUFFIX,ultraiso.net,Hijacking -- DOMAIN-SUFFIX,vegaschina.cn,Hijacking -- DOMAIN-SUFFIX,xmindchina.net,Hijacking -- DOMAIN-SUFFIX,xshellcn.com,Hijacking -- DOMAIN-SUFFIX,yihuifu.cn,Hijacking -- DOMAIN-SUFFIX,yuanchengxiezuo.com,Hijacking -- DOMAIN-SUFFIX,zbrushcn.com,Hijacking -- DOMAIN-SUFFIX,zhzzx.com,Hijacking - -# Global Area Network -# (ForeignMedia) -# (Video) -# > All4 -# USER-AGENT,All4*,ForeignMedia -- DOMAIN-SUFFIX,c4assets.com,ForeignMedia -- DOMAIN-SUFFIX,channel4.com,ForeignMedia -# > AbemaTV -# USER-AGENT,AbemaTV*,ForeignMedia -- DOMAIN-SUFFIX,abema.io,ForeignMedia -- DOMAIN-SUFFIX,ameba.jp,ForeignMedia -- DOMAIN-SUFFIX,hayabusa.io,ForeignMedia -- DOMAIN,abematv.akamaized.net,ForeignMedia -- DOMAIN,ds-linear-abematv.akamaized.net,ForeignMedia -- DOMAIN,ds-vod-abematv.akamaized.net,ForeignMedia -- DOMAIN,linear-abematv.akamaized.net,ForeignMedia -# > Amazon Prime Video -# USER-AGENT,InstantVideo.US*,ForeignMedia -# USER-AGENT,Prime%20Video*,ForeignMedia -- DOMAIN-SUFFIX,primevideo.com,ForeignMedia -# > Bahamut -# USER-AGENT,Anime*,ForeignMedia -- DOMAIN-SUFFIX,bahamut.com.tw,ForeignMedia -- DOMAIN-SUFFIX,gamer.com.tw,ForeignMedia -- DOMAIN,gamer-cds.cdn.hinet.net,ForeignMedia -- DOMAIN,gamer2-cds.cdn.hinet.net,ForeignMedia -# > BBC iPlayer -# USER-AGENT,BBCiPlayer*,ForeignMedia -- DOMAIN-SUFFIX,bbc.co.uk,ForeignMedia -- DOMAIN-SUFFIX,bbci.co.uk,ForeignMedia -- DOMAIN-KEYWORD,bbcfmt,ForeignMedia -- DOMAIN-KEYWORD,uk-live,ForeignMedia -# > DAZN -- DOMAIN-SUFFIX,dazn.com,ForeignMedia -# > encoreTVB -# USER-AGENT,encoreTVB*,ForeignMedia -- DOMAIN-SUFFIX,encoretvb.com,ForeignMedia -- DOMAIN,content.jwplatform.com,ForeignMedia -- DOMAIN,videos-f.jwpsrv.com,ForeignMedia -# > Fox+ & Fox Now -# USER-AGENT,FOX%20NOW*,ForeignMedia -# USER-AGENT,FOXPlus*,ForeignMedia -- DOMAIN-SUFFIX,dashasiafox.akamaized.net,ForeignMedia -- DOMAIN-SUFFIX,fox.com,ForeignMedia -- DOMAIN-SUFFIX,foxdcg.com,ForeignMedia -- DOMAIN-SUFFIX,foxplus.com,ForeignMedia -- DOMAIN-SUFFIX,staticasiafox.akamaized.net,ForeignMedia -- DOMAIN-SUFFIX,theplatform.com,ForeignMedia -- DOMAIN-SUFFIX,uplynk.com,ForeignMedia -# > HBO Now & HBO GO -# USER-AGENT,HBO%20NOW*,ForeignMedia -# USER-AGENT,HBO%20GO*,ForeignMedia -# USER-AGENT,HBOAsia*,ForeignMedia -- DOMAIN-SUFFIX,hbo.com,ForeignMedia -- DOMAIN-SUFFIX,hbogo.com,ForeignMedia -- DOMAIN-SUFFIX,hboasia.com,ForeignMedia -- DOMAIN-SUFFIX,hbogo.com,ForeignMedia -- DOMAIN-SUFFIX,hbogoasia.hk,ForeignMedia -- DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com,ForeignMedia -- DOMAIN,bcbolthboa-a.akamaihd.net,ForeignMedia -- DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net,ForeignMedia -- DOMAIN,manifest.prod.boltdns.net,ForeignMedia -- DOMAIN,s3-ap-southeast-1.amazonaws.com,ForeignMedia -# > Hulu -- DOMAIN-SUFFIX,hulu.com,ForeignMedia -- DOMAIN-SUFFIX,huluim.com,ForeignMedia -- DOMAIN-SUFFIX,hulustream.com,ForeignMedia -# > KKTV -# USER-AGENT,KKTV*,ForeignMedia -# USER-AGENT,com.kktv.ios.kktv*,ForeignMedia -- DOMAIN-SUFFIX,kktv.com.tw,ForeignMedia -- DOMAIN-SUFFIX,kktv.me,ForeignMedia -- DOMAIN,kktv-theater.kk.stream,ForeignMedia -# > Line TV -# USER-AGENT,LINE%20TV*,ForeignMedia -- DOMAIN-SUFFIX,linetv.tw,ForeignMedia -- DOMAIN,d3c7rimkq79yfu.cloudfront.net,ForeignMedia -# > Hulu(フールー) -- DOMAIN-SUFFIX,happyon.jp,ForeignMedia -- DOMAIN-SUFFIX,hulu.jp,ForeignMedia -# > LiTV -- DOMAIN-SUFFIX,litv.tv,ForeignMedia -- DOMAIN,litvfreemobile-hichannel.cdn.hinet.net,ForeignMedia -# > myTV_SUPER -# USER-AGENT,mytv*,ForeignMedia -- DOMAIN-SUFFIX,mytvsuper.com,ForeignMedia -- DOMAIN-SUFFIX,tvb.com,ForeignMedia -# > Netflix -# USER-AGENT,Argo*,ForeignMedia -- DOMAIN-SUFFIX,netflix.com,ForeignMedia -- DOMAIN-SUFFIX,netflix.net,ForeignMedia -- DOMAIN-SUFFIX,nflxext.com,ForeignMedia -- DOMAIN-SUFFIX,nflximg.com,ForeignMedia -- DOMAIN-SUFFIX,nflximg.net,ForeignMedia -- DOMAIN-SUFFIX,nflxso.net,ForeignMedia -- DOMAIN-SUFFIX,nflxvideo.net,ForeignMedia -- IP-CIDR,23.246.0.0/18,ForeignMedia -- IP-CIDR,37.77.184.0/21,ForeignMedia -- IP-CIDR,45.57.0.0/17,ForeignMedia -- IP-CIDR,64.120.128.0/17,ForeignMedia -- IP-CIDR,66.197.128.0/17,ForeignMedia -- IP-CIDR,108.175.32.0/20,ForeignMedia -- IP-CIDR,192.173.64.0/18,ForeignMedia -- IP-CIDR,198.38.96.0/19,ForeignMedia -- IP-CIDR,198.45.48.0/20,ForeignMedia -# > PBS -# USER-AGENT,PBS*,ForeignMedia -- DOMAIN-SUFFIX,pbs.org,ForeignMedia -# > Pornhub -- DOMAIN-SUFFIX,phncdn.com,ForeignMedia -- DOMAIN-SUFFIX,pornhub.com,ForeignMedia -- DOMAIN-SUFFIX,pornhubpremium.com,ForeignMedia -# > Twitch -- DOMAIN-SUFFIX,twitch.tv,ForeignMedia -- DOMAIN-SUFFIX,twitchcdn.net,ForeignMedia -- DOMAIN-SUFFIX,ttvnw.net,ForeignMedia -# > Viu(TV) -# USER-AGENT,Viu*,ForeignMedia -# USER-AGENT,ViuTV*,ForeignMedia -- DOMAIN-SUFFIX,viu.com,ForeignMedia -- DOMAIN-SUFFIX,viu.tv,ForeignMedia -- DOMAIN,api.viu.now.com,ForeignMedia -- DOMAIN,d1k2us671qcoau.cloudfront.net,ForeignMedia -- DOMAIN,d2anahhhmp1ffz.cloudfront.net,ForeignMedia -- DOMAIN,dfp6rglgjqszk.cloudfront.net,ForeignMedia -# > Youtube -# USER-AGENT,com.google.ios.youtube*,ForeignMedia -# USER-AGENT,YouTube*,ForeignMedia -- DOMAIN-SUFFIX,googlevideo.com,ForeignMedia -- DOMAIN-SUFFIX,youtube.com,ForeignMedia -- DOMAIN,youtubei.googleapis.com,ForeignMedia - -# (Music) -# > Deezer -# USER-AGENT,Deezer*,ForeignMedia -- DOMAIN-SUFFIX,deezer.com,ForeignMedia -- DOMAIN-SUFFIX,dzcdn.net,ForeignMedia -# > KKBOX -- DOMAIN-SUFFIX,kkbox.com,ForeignMedia -- DOMAIN-SUFFIX,kkbox.com.tw,ForeignMedia -- DOMAIN-SUFFIX,kfs.io,ForeignMedia -# > JOOX -# USER-AGENT,WeMusic*,ForeignMedia -# USER-AGENT,JOOX*,ForeignMedia -- DOMAIN-SUFFIX,joox.com,ForeignMedia -# > Pandora -# USER-AGENT,Pandora*,ForeignMedia -- DOMAIN-SUFFIX,pandora.com,ForeignMedia -# > Spotify -# USER-AGENT,Spotify*,ForeignMedia -- DOMAIN-SUFFIX,pscdn.co,ForeignMedia -- DOMAIN-SUFFIX,scdn.co,ForeignMedia -- DOMAIN-SUFFIX,spotify.com,ForeignMedia -- DOMAIN-SUFFIX,spoti.fi,ForeignMedia -- IP-CIDR,35.186.224.47/32,ForeignMedia -# > TIDAL -# USER-AGENT,TIDAL*,ForeignMedia -- DOMAIN-SUFFIX,tidal.com,ForeignMedia - -# (DomesticMedia) -# > 愛奇藝台灣站 -- DOMAIN-SUFFIX,iqiyi.com,DomesticMedia -- DOMAIN-SUFFIX,71.am,DomesticMedia -# > bilibili -- DOMAIN-SUFFIX,bilibili.com,DomesticMedia -- DOMAIN,upos-hz-mirrorakam.akamaized.net,DomesticMedia - -# (DNS Cache Pollution Protection) -# > Google -- DOMAIN-SUFFIX,appspot.com,PROXY -- DOMAIN-SUFFIX,blogger.com,PROXY -- DOMAIN-SUFFIX,getoutline.org,PROXY -- DOMAIN-SUFFIX,gvt0.com,PROXY -- DOMAIN-SUFFIX,gvt1.com,PROXY -- DOMAIN-SUFFIX,gvt3.com,PROXY -- DOMAIN-SUFFIX,xn--ngstr-lra8j.com,PROXY -- DOMAIN-KEYWORD,google,PROXY -- DOMAIN-KEYWORD,blogspot,PROXY -# > Microsoft -- DOMAIN-SUFFIX,onedrive.live.com,PROXY -- DOMAIN-SUFFIX,xboxlive.com,PROXY -# > Facebook -- DOMAIN-SUFFIX,cdninstagram.com,PROXY -- DOMAIN-SUFFIX,fb.com,PROXY -- DOMAIN-SUFFIX,fb.me,PROXY -- DOMAIN-SUFFIX,fbaddins.com,PROXY -- DOMAIN-SUFFIX,fbcdn.net,PROXY -- DOMAIN-SUFFIX,fbsbx.com,PROXY -- DOMAIN-SUFFIX,fbworkmail.com,PROXY -- DOMAIN-SUFFIX,instagram.com,PROXY -- DOMAIN-SUFFIX,m.me,PROXY -- DOMAIN-SUFFIX,messenger.com,PROXY -- DOMAIN-SUFFIX,oculus.com,PROXY -- DOMAIN-SUFFIX,oculuscdn.com,PROXY -- DOMAIN-SUFFIX,rocksdb.org,PROXY -- DOMAIN-SUFFIX,whatsapp.com,PROXY -- DOMAIN-SUFFIX,whatsapp.net,PROXY -- DOMAIN-KEYWORD,facebook,PROXY -# > Twitter -- DOMAIN-SUFFIX,pscp.tv,PROXY -- DOMAIN-SUFFIX,periscope.tv,PROXY -- DOMAIN-SUFFIX,t.co,PROXY -- DOMAIN-SUFFIX,twimg.co,PROXY -- DOMAIN-SUFFIX,twimg.com,PROXY -- DOMAIN-SUFFIX,twitpic.com,PROXY -- DOMAIN-SUFFIX,vine.co,PROXY -- DOMAIN-KEYWORD,twitter,PROXY -# > Telegram -- DOMAIN-SUFFIX,t.me,PROXY -- DOMAIN-SUFFIX,tdesktop.com,PROXY -- DOMAIN-SUFFIX,telegra.ph,PROXY -- DOMAIN-SUFFIX,telegram.me,PROXY -- DOMAIN-SUFFIX,telegram.org,PROXY -- IP-CIDR,67.198.55.0/24,PROXY -- IP-CIDR,91.108.4.0/22,PROXY -- IP-CIDR,91.108.8.0/22,PROXY -- IP-CIDR,91.108.12.0/22,PROXY -- IP-CIDR,91.108.16.0/22,PROXY -- IP-CIDR,91.108.56.0/22,PROXY -- IP-CIDR,109.239.140.0/24,PROXY -- IP-CIDR,149.154.160.0/20,PROXY -- IP-CIDR,205.172.60.0/22,PROXY -# > Line -- DOMAIN-SUFFIX,line.me,PROXY -- DOMAIN-SUFFIX,line-apps.com,PROXY -- DOMAIN-SUFFIX,line-scdn.net,PROXY -- DOMAIN-SUFFIX,naver.jp,PROXY -- IP-CIDR,103.2.30.0/23,PROXY -- IP-CIDR,125.209.208.0/20,PROXY -- IP-CIDR,147.92.128.0/17,PROXY -- IP-CIDR,203.104.144.0/21,PROXY -# > Other -- DOMAIN-SUFFIX,4shared.com,PROXY -- DOMAIN-SUFFIX,520cc.cc,PROXY -- DOMAIN-SUFFIX,881903.com,PROXY -- DOMAIN-SUFFIX,9cache.com,PROXY -- DOMAIN-SUFFIX,9gag.com,PROXY -- DOMAIN-SUFFIX,abc.com,PROXY -- DOMAIN-SUFFIX,abc.net.au,PROXY -- DOMAIN-SUFFIX,abebooks.com,PROXY -- DOMAIN-SUFFIX,amazon.co.jp,PROXY -- DOMAIN-SUFFIX,apigee.com,PROXY -- DOMAIN-SUFFIX,apk-dl.com,PROXY -- DOMAIN-SUFFIX,apkfind.com,PROXY -- DOMAIN-SUFFIX,apkmirror.com,PROXY -- DOMAIN-SUFFIX,apkmonk.com,PROXY -- DOMAIN-SUFFIX,apkpure.com,PROXY -- DOMAIN-SUFFIX,aptoide.com,PROXY -- DOMAIN-SUFFIX,archive.is,PROXY -- DOMAIN-SUFFIX,archive.org,PROXY -- DOMAIN-SUFFIX,arte.tv,PROXY -- DOMAIN-SUFFIX,artstation.com,PROXY -- DOMAIN-SUFFIX,arukas.io,PROXY -- DOMAIN-SUFFIX,ask.com,PROXY -- DOMAIN-SUFFIX,avgle.com,PROXY -- DOMAIN-SUFFIX,badoo.com,PROXY -- DOMAIN-SUFFIX,bandwagonhost.com,PROXY -- DOMAIN-SUFFIX,bbc.com,PROXY -- DOMAIN-SUFFIX,behance.net,PROXY -- DOMAIN-SUFFIX,bibox.com,PROXY -- DOMAIN-SUFFIX,biggo.com.tw,PROXY -- DOMAIN-SUFFIX,binance.com,PROXY -- DOMAIN-SUFFIX,bitcointalk.org,PROXY -- DOMAIN-SUFFIX,bitfinex.com,PROXY -- DOMAIN-SUFFIX,bitmex.com,PROXY -- DOMAIN-SUFFIX,bit-z.com,PROXY -- DOMAIN-SUFFIX,bloglovin.com,PROXY -- DOMAIN-SUFFIX,bloomberg.cn,PROXY -- DOMAIN-SUFFIX,bloomberg.com,PROXY -- DOMAIN-SUFFIX,blubrry.com,PROXY -- DOMAIN-SUFFIX,book.com.tw,PROXY -- DOMAIN-SUFFIX,booklive.jp,PROXY -- DOMAIN-SUFFIX,books.com.tw,PROXY -- DOMAIN-SUFFIX,box.com,PROXY -- DOMAIN-SUFFIX,businessinsider.com,PROXY -- DOMAIN-SUFFIX,bwh1.net,PROXY -- DOMAIN-SUFFIX,castbox.fm,PROXY -- DOMAIN-SUFFIX,cbc.ca,PROXY -- DOMAIN-SUFFIX,cccat.cc,PROXY -- DOMAIN-SUFFIX,cdw.com,PROXY -- DOMAIN-SUFFIX,change.org,PROXY -- DOMAIN-SUFFIX,ck101.com,PROXY -- DOMAIN-SUFFIX,clarionproject.org,PROXY -- DOMAIN-SUFFIX,clyp.it,PROXY -- DOMAIN-SUFFIX,cna.com.tw,PROXY -- DOMAIN-SUFFIX,comparitech.com,PROXY -- DOMAIN-SUFFIX,conoha.jp,PROXY -- DOMAIN-SUFFIX,crucial.com,PROXY -- DOMAIN-SUFFIX,cts.com.tw,PROXY -- DOMAIN-SUFFIX,cw.com.tw,PROXY -- DOMAIN-SUFFIX,cyberctm.com,PROXY -- DOMAIN-SUFFIX,dailymotion.com,PROXY -- DOMAIN-SUFFIX,dailyview.tw,PROXY -- DOMAIN-SUFFIX,daum.net,PROXY -- DOMAIN-SUFFIX,daumcdn.net,PROXY -- DOMAIN-SUFFIX,dcard.tw,PROXY -- DOMAIN-SUFFIX,deepdiscount.com,PROXY -- DOMAIN-SUFFIX,depositphotos.com,PROXY -- DOMAIN-SUFFIX,deviantart.com,PROXY -- DOMAIN-SUFFIX,disconnect.me,PROXY -- DOMAIN-SUFFIX,discordapp.com,PROXY -- DOMAIN-SUFFIX,discordapp.net,PROXY -- DOMAIN-SUFFIX,disqus.com,PROXY -- DOMAIN-SUFFIX,dns2go.com,PROXY -- DOMAIN-SUFFIX,dowjones.com,PROXY -- DOMAIN-SUFFIX,dropbox.com,PROXY -- DOMAIN-SUFFIX,dropboxusercontent.com,PROXY -- DOMAIN-SUFFIX,duckduckgo.com,PROXY -- DOMAIN-SUFFIX,dw.com,PROXY -- DOMAIN-SUFFIX,dynu.com,PROXY -- DOMAIN-SUFFIX,earthcam.com,PROXY -- DOMAIN-SUFFIX,ebookservice.tw,PROXY -- DOMAIN-SUFFIX,economist.com,PROXY -- DOMAIN-SUFFIX,edgecastcdn.net,PROXY -- DOMAIN-SUFFIX,edu,PROXY -- DOMAIN-SUFFIX,elpais.com,PROXY -- DOMAIN-SUFFIX,enanyang.my,PROXY -- DOMAIN-SUFFIX,esoir.be,PROXY -- DOMAIN-SUFFIX,euronews.com,PROXY -- DOMAIN-SUFFIX,feedly.com,PROXY -- DOMAIN-SUFFIX,firech.at,PROXY -- DOMAIN-SUFFIX,flickr.com,PROXY -- DOMAIN-SUFFIX,flitto.com,PROXY -- DOMAIN-SUFFIX,foreignpolicy.com,PROXY -- DOMAIN-SUFFIX,friday.tw,PROXY -- DOMAIN-SUFFIX,ftchinese.com,PROXY -- DOMAIN-SUFFIX,gate.io,PROXY -- DOMAIN-SUFFIX,getlantern.org,PROXY -- DOMAIN-SUFFIX,getsync.com,PROXY -- DOMAIN-SUFFIX,globalvoices.org,PROXY -- DOMAIN-SUFFIX,goo.ne.jp,PROXY -- DOMAIN-SUFFIX,goodreads.com,PROXY -- DOMAIN-SUFFIX,gov,PROXY -- DOMAIN-SUFFIX,gov.tw,PROXY -- DOMAIN-SUFFIX,gumroad.com,PROXY -- DOMAIN-SUFFIX,hbg.com,PROXY -- DOMAIN-SUFFIX,heroku.com,PROXY -- DOMAIN-SUFFIX,hightail.com,PROXY -- DOMAIN-SUFFIX,hk01.com,PROXY -- DOMAIN-SUFFIX,hkbf.org,PROXY -- DOMAIN-SUFFIX,hkbookcity.com,PROXY -- DOMAIN-SUFFIX,hkej.com,PROXY -- DOMAIN-SUFFIX,hket.com,PROXY -- DOMAIN-SUFFIX,hkgolden.com,PROXY -- DOMAIN-SUFFIX,hootsuite.com,PROXY -- DOMAIN-SUFFIX,hudson.org,PROXY -- DOMAIN-SUFFIX,hyread.com.tw,PROXY -- DOMAIN-SUFFIX,ibtimes.com,PROXY -- DOMAIN-SUFFIX,i-cable.com,PROXY -- DOMAIN-SUFFIX,icij.org,PROXY -- DOMAIN-SUFFIX,icoco.com,PROXY -- DOMAIN-SUFFIX,imgur.com,PROXY -- DOMAIN-SUFFIX,initiummall.com,PROXY -- DOMAIN-SUFFIX,insecam.org,PROXY -- DOMAIN-SUFFIX,ipfs.io,PROXY -- DOMAIN-SUFFIX,issuu.com,PROXY -- DOMAIN-SUFFIX,istockphoto.com,PROXY -- DOMAIN-SUFFIX,japantimes.co.jp,PROXY -- DOMAIN-SUFFIX,jiji.com,PROXY -- DOMAIN-SUFFIX,jinx.com,PROXY -- DOMAIN-SUFFIX,jkforum.net,PROXY -- DOMAIN-SUFFIX,joinmastodon.org,PROXY -- DOMAIN-SUFFIX,justpaste.it,PROXY -- DOMAIN-SUFFIX,kakao.com,PROXY -- DOMAIN-SUFFIX,kakaocorp.com,PROXY -- DOMAIN-SUFFIX,kik.com,PROXY -- DOMAIN-SUFFIX,kobo.com,PROXY -- DOMAIN-SUFFIX,kobobooks.com,PROXY -- DOMAIN-SUFFIX,kodingen.com,PROXY -- DOMAIN-SUFFIX,lemonde.fr,PROXY -- DOMAIN-SUFFIX,lepoint.fr,PROXY -- DOMAIN-SUFFIX,lihkg.com,PROXY -- DOMAIN-SUFFIX,listennotes.com,PROXY -- DOMAIN-SUFFIX,livestream.com,PROXY -- DOMAIN-SUFFIX,logmein.com,PROXY -- DOMAIN-SUFFIX,mail.ru,PROXY -- DOMAIN-SUFFIX,mailchimp.com,PROXY -- DOMAIN-SUFFIX,marc.info,PROXY -- DOMAIN-SUFFIX,matters.news,PROXY -- DOMAIN-SUFFIX,medium.com,PROXY -- DOMAIN-SUFFIX,mega.nz,PROXY -- DOMAIN-SUFFIX,mil,PROXY -- DOMAIN-SUFFIX,mingpao.com,PROXY -- DOMAIN-SUFFIX,mobile01.com,PROXY -- DOMAIN-SUFFIX,myspace.com,PROXY -- DOMAIN-SUFFIX,myspacecdn.com,PROXY -- DOMAIN-SUFFIX,nanyang.com,PROXY -- DOMAIN-SUFFIX,naver.com,PROXY -- DOMAIN-SUFFIX,newstapa.org,PROXY -- DOMAIN-SUFFIX,nhk.or.jp,PROXY -- DOMAIN-SUFFIX,nicovideo.jp,PROXY -- DOMAIN-SUFFIX,nii.ac.jp,PROXY -- DOMAIN-SUFFIX,nikkei.com,PROXY -- DOMAIN-SUFFIX,nofile.io,PROXY -- DOMAIN-SUFFIX,now.com,PROXY -- DOMAIN-SUFFIX,nrk.no,PROXY -- DOMAIN-SUFFIX,nyt.com,PROXY -- DOMAIN-SUFFIX,nytchina.com,PROXY -- DOMAIN-SUFFIX,nytcn.me,PROXY -- DOMAIN-SUFFIX,nytco.com,PROXY -- DOMAIN-SUFFIX,nytimes.com,PROXY -- DOMAIN-SUFFIX,nytimg.com,PROXY -- DOMAIN-SUFFIX,nytlog.com,PROXY -- DOMAIN-SUFFIX,nytstyle.com,PROXY -- DOMAIN-SUFFIX,ok.ru,PROXY -- DOMAIN-SUFFIX,okex.com,PROXY -- DOMAIN-SUFFIX,on.cc,PROXY -- DOMAIN-SUFFIX,orientaldaily.com.my,PROXY -- DOMAIN-SUFFIX,overcast.fm,PROXY -- DOMAIN-SUFFIX,paltalk.com,PROXY -- DOMAIN-SUFFIX,pbxes.com,PROXY -- DOMAIN-SUFFIX,pcdvd.com.tw,PROXY -- DOMAIN-SUFFIX,pchome.com.tw,PROXY -- DOMAIN-SUFFIX,pcloud.com,PROXY -- DOMAIN-SUFFIX,picacomic.com,PROXY -- DOMAIN-SUFFIX,pinimg.com,PROXY -- DOMAIN-SUFFIX,pixiv.net,PROXY -- DOMAIN-SUFFIX,player.fm,PROXY -- DOMAIN-SUFFIX,plurk.com,PROXY -- DOMAIN-SUFFIX,po18.tw,PROXY -- DOMAIN-SUFFIX,prism-break.org,PROXY -- DOMAIN-SUFFIX,proxifier.com,PROXY -- DOMAIN-SUFFIX,pts.org.tw,PROXY -- DOMAIN-SUFFIX,pubu.com.tw,PROXY -- DOMAIN-SUFFIX,pubu.tw,PROXY -- DOMAIN-SUFFIX,pureapk.com,PROXY -- DOMAIN-SUFFIX,quora.com,PROXY -- DOMAIN-SUFFIX,quoracdn.net,PROXY -- DOMAIN-SUFFIX,rakuten.co.jp,PROXY -- DOMAIN-SUFFIX,readingtimes.com.tw,PROXY -- DOMAIN-SUFFIX,readmoo.com,PROXY -- DOMAIN-SUFFIX,reddit.com,PROXY -- DOMAIN-SUFFIX,redditmedia.com,PROXY -- DOMAIN-SUFFIX,resilio.com,PROXY -- DOMAIN-SUFFIX,reuters.com,PROXY -- DOMAIN-SUFFIX,rfi.fr,PROXY -- DOMAIN-SUFFIX,roadshow.hk,PROXY -- DOMAIN-SUFFIX,scmp.com,PROXY -- DOMAIN-SUFFIX,scribd.com,PROXY -- DOMAIN-SUFFIX,seatguru.com,PROXY -- DOMAIN-SUFFIX,shadowsocks.org,PROXY -- DOMAIN-SUFFIX,shopee.tw,PROXY -- DOMAIN-SUFFIX,slideshare.net,PROXY -- DOMAIN-SUFFIX,softfamous.com,PROXY -- DOMAIN-SUFFIX,soundcloud.com,PROXY -- DOMAIN-SUFFIX,startpage.com,PROXY -- DOMAIN-SUFFIX,steamcommunity.com,PROXY -- DOMAIN-SUFFIX,steemit.com,PROXY -- DOMAIN-SUFFIX,steemitwallet.com,PROXY -- DOMAIN-SUFFIX,t66y.com,PROXY -- DOMAIN-SUFFIX,tapatalk.com,PROXY -- DOMAIN-SUFFIX,teco-hk.org,PROXY -- DOMAIN-SUFFIX,teco-mo.org,PROXY -- DOMAIN-SUFFIX,teddysun.com,PROXY -- DOMAIN-SUFFIX,theguardian.com,PROXY -- DOMAIN-SUFFIX,theinitium.com,PROXY -- DOMAIN-SUFFIX,tineye.com,PROXY -- DOMAIN-SUFFIX,torproject.org,PROXY -- DOMAIN-SUFFIX,tumblr.com,PROXY -- DOMAIN-SUFFIX,turbobit.net,PROXY -- DOMAIN-SUFFIX,tutanota.com,PROXY -- DOMAIN-SUFFIX,tvboxnow.com,PROXY -- DOMAIN-SUFFIX,udn.com,PROXY -- DOMAIN-SUFFIX,unseen.is,PROXY -- DOMAIN-SUFFIX,upmedia.mg,PROXY -- DOMAIN-SUFFIX,uptodown.com,PROXY -- DOMAIN-SUFFIX,ustream.tv,PROXY -- DOMAIN-SUFFIX,uwants.com,PROXY -- DOMAIN-SUFFIX,v2ray.com,PROXY -- DOMAIN-SUFFIX,viber.com,PROXY -- DOMAIN-SUFFIX,videopress.com,PROXY -- DOMAIN-SUFFIX,vimeo.com,PROXY -- DOMAIN-SUFFIX,voachinese.com,PROXY -- DOMAIN-SUFFIX,voanews.com,PROXY -- DOMAIN-SUFFIX,voxer.com,PROXY -- DOMAIN-SUFFIX,vzw.com,PROXY -- DOMAIN-SUFFIX,w3schools.com,PROXY -- DOMAIN-SUFFIX,washingtonpost.com,PROXY -- DOMAIN-SUFFIX,wattpad.com,PROXY -- DOMAIN-SUFFIX,whoer.net,PROXY -- DOMAIN-SUFFIX,wikimapia.org,PROXY -- DOMAIN-SUFFIX,wikipedia.org,PROXY -- DOMAIN-SUFFIX,winudf.com,PROXY -- DOMAIN-SUFFIX,wire.com,PROXY -- DOMAIN-SUFFIX,wordpress.com,PROXY -- DOMAIN-SUFFIX,workflow.is,PROXY -- DOMAIN-SUFFIX,worldcat.org,PROXY -- DOMAIN-SUFFIX,wsj.com,PROXY -- DOMAIN-SUFFIX,wsj.net,PROXY -- DOMAIN-SUFFIX,xhamster.com,PROXY -- DOMAIN-SUFFIX,xnxx.com,PROXY -- DOMAIN-SUFFIX,xvideos.com,PROXY -- DOMAIN-SUFFIX,yahoo.com,PROXY -- DOMAIN-SUFFIX,yandex.ru,PROXY -- DOMAIN-SUFFIX,ycombinator.com,PROXY -- DOMAIN-SUFFIX,yesasia.com,PROXY -- DOMAIN-SUFFIX,yes-news.com,PROXY -- DOMAIN-SUFFIX,yomiuri.co.jp,PROXY -- DOMAIN-SUFFIX,you-get.org,PROXY -- DOMAIN-SUFFIX,zaobao.com,PROXY -- DOMAIN-SUFFIX,zb.com,PROXY -- DOMAIN-SUFFIX,zello.com,PROXY -- DOMAIN-SUFFIX,zeronet.io,PROXY -- DOMAIN-KEYWORD,github,PROXY -- DOMAIN-KEYWORD,jav,PROXY -- DOMAIN-KEYWORD,pinterest,PROXY -- DOMAIN-KEYWORD,porn,PROXY -- DOMAIN-KEYWORD,wikileaks,PROXY - -# (Region-Restricted Access Denied) -- DOMAIN-SUFFIX,apartmentratings.com,PROXY -- DOMAIN-SUFFIX,apartments.com,PROXY -- DOMAIN-SUFFIX,bankmobilevibe.com,PROXY -- DOMAIN-SUFFIX,bing.com,PROXY -- DOMAIN-SUFFIX,booktopia.com.au,PROXY -- DOMAIN-SUFFIX,centauro.com.br,PROXY -- DOMAIN-SUFFIX,clearsurance.com,PROXY -- DOMAIN-SUFFIX,costco.com,PROXY -- DOMAIN-SUFFIX,crackle.com,PROXY -- DOMAIN-SUFFIX,depositphotos.cn,PROXY -- DOMAIN-SUFFIX,dish.com,PROXY -- DOMAIN-SUFFIX,dmm.co.jp,PROXY -- DOMAIN-SUFFIX,dmm.com,PROXY -- DOMAIN-SUFFIX,dnvod.tv,PROXY -- DOMAIN-SUFFIX,esurance.com,PROXY -- DOMAIN-SUFFIX,extmatrix.com,PROXY -- DOMAIN-SUFFIX,fastpic.ru,PROXY -- DOMAIN-SUFFIX,flipboard.com,PROXY -- DOMAIN-SUFFIX,fnac.be,PROXY -- DOMAIN-SUFFIX,fnac.com,PROXY -- DOMAIN-SUFFIX,funkyimg.com,PROXY -- DOMAIN-SUFFIX,fxnetworks.com,PROXY -- DOMAIN-SUFFIX,gettyimages.com,PROXY -- DOMAIN-SUFFIX,go.com,PROXY -- DOMAIN-SUFFIX,here.com,PROXY -- DOMAIN-SUFFIX,jcpenney.com,PROXY -- DOMAIN-SUFFIX,jiehua.tv,PROXY -- DOMAIN-SUFFIX,kknews.cc,PROXY -- DOMAIN-SUFFIX,mailfence.com,PROXY -- DOMAIN-SUFFIX,nationwide.com,PROXY -- DOMAIN-SUFFIX,nbc.com,PROXY -- DOMAIN-SUFFIX,nexon.com,PROXY -- DOMAIN-SUFFIX,nordstrom.com,PROXY -- DOMAIN-SUFFIX,nordstromimage.com,PROXY -- DOMAIN-SUFFIX,nordstromrack.com,PROXY -- DOMAIN-SUFFIX,read01.com,PROXY -- DOMAIN-SUFFIX,superpages.com,PROXY -- DOMAIN-SUFFIX,target.com,PROXY -- DOMAIN-SUFFIX,thinkgeek.com,PROXY -- DOMAIN-SUFFIX,tracfone.com,PROXY -- DOMAIN-SUFFIX,uploader.jp,PROXY -- DOMAIN-SUFFIX,vevo.com,PROXY -- DOMAIN-SUFFIX,viu.tv,PROXY -- DOMAIN-SUFFIX,vk.com,PROXY -- DOMAIN-SUFFIX,vsco.co,PROXY -- DOMAIN-SUFFIX,xfinity.com,PROXY -- DOMAIN-SUFFIX,zattoo.com,PROXY -# USER-AGENT,Roam*,PROXY - -# (The Most Popular Sites) -# > Apple -# >> TestFlight -- DOMAIN,testflight.apple.com,PROXY -# >> Apple URL Shortener -- DOMAIN-SUFFIX,appsto.re,PROXY -# >> iBooks Store download -- DOMAIN,books.itunes.apple.com,PROXY -# >> iTunes Store Moveis Trailers -- DOMAIN,hls.itunes.apple.com,PROXY -# >> App Store Preview -- DOMAIN,apps.apple.com,PROXY -- DOMAIN,itunes.apple.com,PROXY -# >> Spotlight -- DOMAIN,api-glb-sea.smoot.apple.com,PROXY -# >> Dictionary -- DOMAIN,lookup-api.apple.com,PROXY -# >> Apple News and Apple Map TOMTOM Version -- DOMAIN,gspe1-ssl.ls.apple.com,PROXY -# USER-AGENT,AppleNews*,PROXY -# USER-AGENT,com.apple.news*,PROXY -- DOMAIN-SUFFIX,apple.news,PROXY -- DOMAIN,news-client.apple.com,PROXY -- DOMAIN,news-edge.apple.com,PROXY -- DOMAIN,news-events.apple.com,PROXY -- DOMAIN,apple.comscoreresearch.com,PROXY -# > Google -- DOMAIN-SUFFIX,abc.xyz,PROXY -- DOMAIN-SUFFIX,android.com,PROXY -- DOMAIN-SUFFIX,androidify.com,PROXY -- DOMAIN-SUFFIX,dialogflow.com,PROXY -- DOMAIN-SUFFIX,autodraw.com,PROXY -- DOMAIN-SUFFIX,capitalg.com,PROXY -- DOMAIN-SUFFIX,certificate-transparency.org,PROXY -- DOMAIN-SUFFIX,chrome.com,PROXY -- DOMAIN-SUFFIX,chromeexperiments.com,PROXY -- DOMAIN-SUFFIX,chromestatus.com,PROXY -- DOMAIN-SUFFIX,chromium.org,PROXY -- DOMAIN-SUFFIX,creativelab5.com,PROXY -- DOMAIN-SUFFIX,debug.com,PROXY -- DOMAIN-SUFFIX,deepmind.com,PROXY -- DOMAIN-SUFFIX,firebaseio.com,PROXY -- DOMAIN-SUFFIX,getmdl.io,PROXY -- DOMAIN-SUFFIX,ggpht.com,PROXY -- DOMAIN-SUFFIX,gmail.com,PROXY -- DOMAIN-SUFFIX,gmodules.com,PROXY -- DOMAIN-SUFFIX,godoc.org,PROXY -- DOMAIN-SUFFIX,golang.org,PROXY -- DOMAIN-SUFFIX,gstatic.com,PROXY -- DOMAIN-SUFFIX,gv.com,PROXY -- DOMAIN-SUFFIX,gwtproject.org,PROXY -- DOMAIN-SUFFIX,itasoftware.com,PROXY -- DOMAIN-SUFFIX,madewithcode.com,PROXY -- DOMAIN-SUFFIX,material.io,PROXY -- DOMAIN-SUFFIX,polymer-project.org,PROXY -- DOMAIN-SUFFIX,admin.recaptcha.net,PROXY -- DOMAIN-SUFFIX,recaptcha.net,PROXY -- DOMAIN-SUFFIX,shattered.io,PROXY -- DOMAIN-SUFFIX,synergyse.com,PROXY -- DOMAIN-SUFFIX,tensorflow.org,PROXY -- DOMAIN-SUFFIX,tfhub.dev,PROXY -- DOMAIN-SUFFIX,tiltbrush.com,PROXY -- DOMAIN-SUFFIX,waveprotocol.org,PROXY -- DOMAIN-SUFFIX,waymo.com,PROXY -- DOMAIN-SUFFIX,webmproject.org,PROXY -- DOMAIN-SUFFIX,webrtc.org,PROXY -- DOMAIN-SUFFIX,whatbrowser.org,PROXY -- DOMAIN-SUFFIX,widevine.com,PROXY -- DOMAIN-SUFFIX,x.company,PROXY -- DOMAIN-SUFFIX,youtu.be,PROXY -- DOMAIN-SUFFIX,yt.be,PROXY -- DOMAIN-SUFFIX,ytimg.com,PROXY -# > Microsoft -- DOMAIN-SUFFIX,1drv.com,PROXY -- DOMAIN-SUFFIX,1drv.ms,PROXY -- DOMAIN-SUFFIX,live.com,PROXY -- DOMAIN-SUFFIX,live.net,PROXY -- DOMAIN-SUFFIX,livefilestore.com,PROXY -- DOMAIN-SUFFIX,storage.msn.com,PROXY -# > Other -- DOMAIN-SUFFIX,0rz.tw,PROXY -- DOMAIN-SUFFIX,4bluestones.biz,PROXY -- DOMAIN-SUFFIX,9bis.net,PROXY -- DOMAIN-SUFFIX,allconnected.co,PROXY -- DOMAIN-SUFFIX,amazonaws.com,PROXY -- DOMAIN-SUFFIX,aol.com,PROXY -- DOMAIN-SUFFIX,bcc.com.tw,PROXY -- DOMAIN-SUFFIX,bit.ly,PROXY -- DOMAIN-SUFFIX,bitshare.com,PROXY -- DOMAIN-SUFFIX,blog.jp,PROXY -- DOMAIN-SUFFIX,blogimg.jp,PROXY -- DOMAIN-SUFFIX,blogtd.org,PROXY -- DOMAIN-SUFFIX,broadcast.co.nz,PROXY -- DOMAIN-SUFFIX,camfrog.com,PROXY -- DOMAIN-SUFFIX,cfos.de,PROXY -- DOMAIN-SUFFIX,citypopulation.de,PROXY -- DOMAIN-SUFFIX,cloudfront.net,PROXY -- DOMAIN-SUFFIX,ctitv.com.tw,PROXY -- DOMAIN-SUFFIX,cuhk.edu.hk,PROXY -- DOMAIN-SUFFIX,cusu.hk,PROXY -- DOMAIN-SUFFIX,discuss.com.hk,PROXY -- DOMAIN-SUFFIX,dropboxapi.com,PROXY -- DOMAIN-SUFFIX,duolingo.cn,PROXY -- DOMAIN-SUFFIX,edditstatic.com,PROXY -- DOMAIN-SUFFIX,flickriver.com,PROXY -- DOMAIN-SUFFIX,focustaiwan.tw,PROXY -- DOMAIN-SUFFIX,free.fr,PROXY -- DOMAIN-SUFFIX,gigacircle.com,PROXY -- DOMAIN-SUFFIX,hk-pub.com,PROXY -- DOMAIN-SUFFIX,hosting.co.uk,PROXY -- DOMAIN-SUFFIX,hwcdn.net,PROXY -- DOMAIN-SUFFIX,iphone4hongkong.com,PROXY -- DOMAIN-SUFFIX,iphonetaiwan.org,PROXY -- DOMAIN-SUFFIX,iptvbin.com,PROXY -- DOMAIN-SUFFIX,jtvnw.net,PROXY -- DOMAIN-SUFFIX,linksalpha.com,PROXY -- DOMAIN-SUFFIX,manyvids.com,PROXY -- DOMAIN-SUFFIX,myactimes.com,PROXY -- DOMAIN-SUFFIX,newsblur.com,PROXY -- DOMAIN-SUFFIX,now.im,PROXY -- DOMAIN-SUFFIX,nowe.com,PROXY -- DOMAIN-SUFFIX,redditlist.com,PROXY -- DOMAIN-SUFFIX,signal.org,PROXY -- DOMAIN-SUFFIX,smartmailcloud.com,PROXY -- DOMAIN-SUFFIX,sparknotes.com,PROXY -- DOMAIN-SUFFIX,streetvoice.com,PROXY -- DOMAIN-SUFFIX,supertop.co,PROXY -- DOMAIN-SUFFIX,tv.com,PROXY -- DOMAIN-SUFFIX,typepad.com,PROXY -- DOMAIN-SUFFIX,udnbkk.com,PROXY -- DOMAIN-SUFFIX,urbanairship.com,PROXY -- DOMAIN-SUFFIX,whispersystems.org,PROXY -- DOMAIN-SUFFIX,wikia.com,PROXY -- DOMAIN-SUFFIX,wn.com,PROXY -- DOMAIN-SUFFIX,wolframalpha.com,PROXY -- DOMAIN-SUFFIX,x-art.com,PROXY -- DOMAIN-SUFFIX,yimg.com,PROXY - -# China Area Network -# > 360 -- DOMAIN-SUFFIX,qhres.com,DIRECT -- DOMAIN-SUFFIX,qhimg.com,DIRECT -# > Akamai -- DOMAIN-SUFFIX,akadns.net,DIRECT -# - DOMAIN-SUFFIX,akamai.net,DIRECT -# - DOMAIN-SUFFIX,akamaiedge.net,DIRECT -# - DOMAIN-SUFFIX,akamaihd.net,DIRECT -# - DOMAIN-SUFFIX,akamaistream.net,DIRECT -# - DOMAIN-SUFFIX,akamaized.net,DIRECT -# > Alibaba -# USER-AGENT,%E4%BC%98%E9%85%B7*,DIRECT -- DOMAIN-SUFFIX,alibaba.com,DIRECT -- DOMAIN-SUFFIX,alicdn.com,DIRECT -- DOMAIN-SUFFIX,alikunlun.com,DIRECT -- DOMAIN-SUFFIX,alipay.com,DIRECT -- DOMAIN-SUFFIX,amap.com,DIRECT -- DOMAIN-SUFFIX,dingtalk.com,DIRECT -- DOMAIN-SUFFIX,taobao.com,DIRECT -- DOMAIN-SUFFIX,tmall.com,DIRECT -- DOMAIN-SUFFIX,tmall.hk,DIRECT -- DOMAIN-SUFFIX,ykimg.com,DIRECT -- DOMAIN-SUFFIX,youku.com,DIRECT -- DOMAIN-SUFFIX,xiami.com,DIRECT -- DOMAIN-SUFFIX,xiami.net,DIRECT -# > Apple -- DOMAIN-SUFFIX,aaplimg.com,Apple -- DOMAIN-SUFFIX,apple.co,Apple -- DOMAIN-SUFFIX,apple.com,Apple -- DOMAIN-SUFFIX,appstore.com,Apple -- DOMAIN-SUFFIX,cdn-apple.com,Apple -- DOMAIN-SUFFIX,crashlytics.com,Apple -- DOMAIN-SUFFIX,icloud.com,Apple -- DOMAIN-SUFFIX,icloud-content.com,Apple -- DOMAIN-SUFFIX,me.com,Apple -- DOMAIN-SUFFIX,mzstatic.com,Apple -- DOMAIN,www-cdn.icloud.com.akadns.net,Apple -- IP-CIDR,17.0.0.0/8,Apple -# > Baidu -- DOMAIN-SUFFIX,baidu.com,DIRECT -- DOMAIN-SUFFIX,baidubcr.com,DIRECT -- DOMAIN-SUFFIX,bdstatic.com,DIRECT -# > bilibili -- DOMAIN-SUFFIX,acgvideo.com,DIRECT -- DOMAIN-SUFFIX,biliapi.com,DIRECT -- DOMAIN-SUFFIX,biliapi.net,DIRECT -- DOMAIN-SUFFIX,bilibili.com,DIRECT -- DOMAIN-SUFFIX,hdslb.com,DIRECT -# > Blizzard -- DOMAIN-SUFFIX,blizzard.com,DIRECT -- DOMAIN-SUFFIX,battle.net,DIRECT -- DOMAIN,blzddist1-a.akamaihd.net,DIRECT -# > ByteDance -- DOMAIN-SUFFIX,feiliao.com,DIRECT -- DOMAIN-SUFFIX,pstatp.com,DIRECT -- DOMAIN-SUFFIX,snssdk.com,DIRECT -- DOMAIN-SUFFIX,iesdouyin.com,DIRECT -- DOMAIN-SUFFIX,toutiao.com,DIRECT -# > 蛋蛋赞 -- DOMAIN-SUFFIX,343480.com,DIRECT -- DOMAIN-SUFFIX,baduziyuan.com,DIRECT -- DOMAIN-SUFFIX,com-hs-hkdy.com,DIRECT -- DOMAIN-SUFFIX,czybjz.com,DIRECT -- DOMAIN-SUFFIX,dandanzan.com,DIRECT -- DOMAIN-SUFFIX,fjhps.com,DIRECT -- DOMAIN-SUFFIX,kuyunbo.club,DIRECT -# > ChinaNet -- DOMAIN-SUFFIX,21cn.com,DIRECT -# > HunanTV -- DOMAIN-SUFFIX,hitv.com,DIRECT -- DOMAIN-SUFFIX,mgtv.com,DIRECT -# > iQiyi -- DOMAIN-SUFFIX,iqiyi.com,DIRECT -- DOMAIN-SUFFIX,iqiyipic.com,DIRECT -- DOMAIN-SUFFIX,71.am.com,DIRECT -# > JD -- DOMAIN-SUFFIX,jd.com,DIRECT -- DOMAIN-SUFFIX,jd.hk,DIRECT -- DOMAIN-SUFFIX,360buyimg.com,DIRECT -# > Kingsoft -- DOMAIN-SUFFIX,iciba.com,DIRECT -- DOMAIN-SUFFIX,ksosoft.com,DIRECT -# > Meitu -- DOMAIN-SUFFIX,meitu.com,DIRECT -- DOMAIN-SUFFIX,meitudata.com,DIRECT -- DOMAIN-SUFFIX,meitustat.com,DIRECT -- DOMAIN-SUFFIX,meipai.com,DIRECT -# > MI -- DOMAIN-SUFFIX,duokan.com,DIRECT -- DOMAIN-SUFFIX,mi-img.com,DIRECT -- DOMAIN-SUFFIX,miui.com,DIRECT -- DOMAIN-SUFFIX,xiaomi.com,DIRECT -# > Microsoft -- DOMAIN-SUFFIX,microsoft.com,DIRECT -- DOMAIN-SUFFIX,windows.com,DIRECT -- DOMAIN-SUFFIX,windowsupdate.com,DIRECT -- DOMAIN-SUFFIX,visualstudio.com,DIRECT -- DOMAIN-SUFFIX,msecnd.net,DIRECT -- DOMAIN,officecdn-microsoft-com.akamaized.net,DIRECT -# > NetEase -# USER-AGENT,NeteaseMusic*,DIRECT -# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,DIRECT -- DOMAIN-SUFFIX,163.com,DIRECT -- DOMAIN-SUFFIX,126.net,DIRECT -- DOMAIN-SUFFIX,127.net,DIRECT -- DOMAIN-SUFFIX,163yun.com,DIRECT -- DOMAIN-SUFFIX,lofter.com,DIRECT -- DOMAIN-SUFFIX,ydstatic.com,DIRECT -# > Sina -- DOMAIN-SUFFIX,sina.com,DIRECT -- DOMAIN-SUFFIX,weibo.com,DIRECT -# > Sohu -- DOMAIN-SUFFIX,sohu.com,DIRECT -- DOMAIN-SUFFIX,sohucs.com,DIRECT -- DOMAIN-SUFFIX,sohu-inc.com,DIRECT -- DOMAIN-SUFFIX,v-56.com,DIRECT -# > Sogo -- DOMAIN-SUFFIX,sogo.com,DIRECT -- DOMAIN-SUFFIX,sogou.com,DIRECT -- DOMAIN-SUFFIX,sogoucdn.com,DIRECT -# > Steam -- DOMAIN-SUFFIX,steampowered.com,DIRECT -- DOMAIN-SUFFIX,steam-chat.com,DIRECT -- DOMAIN-SUFFIX,steamgames.com,DIRECT -- DOMAIN-SUFFIX,steamusercontent.com,DIRECT -- DOMAIN-SUFFIX,steamcontent.com,DIRECT -- DOMAIN-SUFFIX,steamstatic.com,DIRECT -- DOMAIN-SUFFIX,steamcdn-a.akamaihd.net,DIRECT -# > Tencent -# USER-AGENT,MicroMessenger%20Client,DIRECT -# USER-AGENT,WeChat*,DIRECT -- DOMAIN-SUFFIX,qq.com,DIRECT -- DOMAIN-SUFFIX,tencent.com,DIRECT -# > YYeTs -# USER-AGENT,YYeTs*,DIRECT -- DOMAIN-SUFFIX,jstucdn.com,DIRECT -- DOMAIN-SUFFIX,zimuzu.io,DIRECT -- DOMAIN-SUFFIX,zimuzu.tv,DIRECT -- DOMAIN-SUFFIX,zmz2019.com,DIRECT -- DOMAIN-SUFFIX,zmzapi.com,DIRECT -- DOMAIN-SUFFIX,zmzapi.net,DIRECT -- DOMAIN-SUFFIX,zmzfile.com,DIRECT -# > Content Delivery Network -- DOMAIN-SUFFIX,chinanetcenter.com,DIRECT -- DOMAIN-SUFFIX,wangsu.com,DIRECT -- DOMAIN-SUFFIX,meixincdn.com,DIRECT -# > IP Query -- DOMAIN-SUFFIX,ipip.net,DIRECT -- DOMAIN-SUFFIX,ip.la,DIRECT -- DOMAIN-SUFFIX,ip-cdn.com,DIRECT -- DOMAIN-SUFFIX,ipv6-test.com,DIRECT -- DOMAIN-SUFFIX,test-ipv6.com,DIRECT -- DOMAIN-SUFFIX,whatismyip.com,DIRECT -- DOMAIN,ip.bjango.com,DIRECT -# > Speed Test -# - DOMAIN-SUFFIX,speedtest.net,DIRECT -- DOMAIN-SUFFIX,netspeedtestmaster.com,DIRECT -- DOMAIN,speedtest.macpaw.com,DIRECT -# > Private Tracker -- 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,empornium.me,DIRECT -- DOMAIN-SUFFIX,gazellegames.net,DIRECT -- DOMAIN-SUFFIX,hdchina.org,DIRECT -- DOMAIN-SUFFIX,hdsky.me,DIRECT -- DOMAIN-SUFFIX,jpopsuki.eu,DIRECT -- DOMAIN-SUFFIX,keepfrds.com,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,springsunday.net,DIRECT -- DOMAIN-SUFFIX,tjupt.org,DIRECT -- DOMAIN-SUFFIX,totheglory.im,DIRECT -# > Other -- DOMAIN-SUFFIX,cn,DIRECT -- DOMAIN-SUFFIX,8686c.com,DIRECT -- DOMAIN-SUFFIX,aixifan.com,DIRECT -- DOMAIN-SUFFIX,beitaichufang.com,DIRECT -- DOMAIN-SUFFIX,booking.com,DIRECT -- DOMAIN-SUFFIX,bstatic.com,DIRECT -- DOMAIN-SUFFIX,cailianpress.com,DIRECT -- DOMAIN-SUFFIX,chunyu.mobi,DIRECT -- DOMAIN-SUFFIX,chushou.tv,DIRECT -- DOMAIN-SUFFIX,cmbchina.com,DIRECT -- DOMAIN-SUFFIX,cmbimg.com,DIRECT -- DOMAIN-SUFFIX,ctrip.com,DIRECT -- DOMAIN-SUFFIX,dfcfw.com,DIRECT -- DOMAIN-SUFFIX,douban.com,DIRECT -- DOMAIN-SUFFIX,doubanio.com,DIRECT -- DOMAIN-SUFFIX,douyu.com,DIRECT -- DOMAIN-SUFFIX,dxycdn.com,DIRECT -- DOMAIN-SUFFIX,eastmoney.com,DIRECT -- DOMAIN-SUFFIX,futunn.com,DIRECT -- DOMAIN-SUFFIX,geilicdn.com,DIRECT -- DOMAIN-SUFFIX,hicloud.com,DIRECT -- DOMAIN-SUFFIX,hostbuf.com,DIRECT -- DOMAIN-SUFFIX,huya.com,DIRECT -- DOMAIN-SUFFIX,infinitynewtab.com,DIRECT -- DOMAIN-SUFFIX,ithome.com,DIRECT -- DOMAIN-SUFFIX,keepcdn.com,DIRECT -- DOMAIN-SUFFIX,kkmh.com,DIRECT -- DOMAIN-SUFFIX,luojilab.com,DIRECT -- DOMAIN-SUFFIX,maoyun.tv,DIRECT -- DOMAIN-SUFFIX,meituan.net,DIRECT -- DOMAIN-SUFFIX,mobike.com,DIRECT -- DOMAIN-SUFFIX,mubu.com,DIRECT -- DOMAIN-SUFFIX,myzaker.com,DIRECT -- DOMAIN-SUFFIX,nvidia.com,DIRECT -- DOMAIN-SUFFIX,paypal.com,DIRECT -- DOMAIN-SUFFIX,paypalobjects.com,DIRECT -- DOMAIN-SUFFIX,qyer.com,DIRECT -- DOMAIN-SUFFIX,qyerstatic.com,DIRECT -- DOMAIN-SUFFIX,ronghub.com,DIRECT -- DOMAIN-SUFFIX,ruguoapp.com,DIRECT -- DOMAIN-SUFFIX,smzdm.com,DIRECT -- DOMAIN-SUFFIX,snapdrop.net,DIRECT -- DOMAIN-SUFFIX,sspai.com,DIRECT -- DOMAIN-SUFFIX,teamviewer.com,DIRECT -- DOMAIN-SUFFIX,tianyancha.com,DIRECT -- DOMAIN-SUFFIX,udacity.com,DIRECT -- DOMAIN-SUFFIX,uning.com,DIRECT -- DOMAIN-SUFFIX,weather.com,DIRECT -- DOMAIN-SUFFIX,weidian.com,DIRECT -- DOMAIN-SUFFIX,xmcdn.com,DIRECT -- DOMAIN-SUFFIX,yangkeduo.com,DIRECT -- DOMAIN-SUFFIX,zhangzishi.cc,DIRECT -- DOMAIN-SUFFIX,zhihu.com,DIRECT -- DOMAIN-SUFFIX,zhimg.com,DIRECT -- DOMAIN-SUFFIX,zhuihd.com,DIRECT -- DOMAIN,download.jetbrains.com,DIRECT - -# Local Area Network -- DOMAIN-SUFFIX,local,DIRECT -- IP-CIDR,192.168.0.0/16,DIRECT -- IP-CIDR,10.0.0.0/8,DIRECT -- IP-CIDR,172.16.0.0/12,DIRECT -- IP-CIDR,127.0.0.0/8,DIRECT -- IP-CIDR,100.64.0.0/10,DIRECT - -# GeoIP China -- GEOIP,CN,DIRECT - -- MATCH,Final +Rule: +##source:ConnersHua +# Feeb +- DOMAIN-KEYWORD,epochtimes,REJECT +- DOMAIN-SUFFIX,881903.com,REJECT +- DOMAIN-SUFFIX,aboluowang.com,REJECT +- DOMAIN-SUFFIX,bannedbook.org,REJECT +- DOMAIN-SUFFIX,bldaily.com,REJECT +- DOMAIN-SUFFIX,china21.org,REJECT +- DOMAIN-SUFFIX,chinaaffairs.org,REJECT +- DOMAIN-SUFFIX,dajiyuan.com,REJECT +- DOMAIN-SUFFIX,dalianmeng.org,REJECT +- DOMAIN-SUFFIX,dkn.tv,REJECT +- DOMAIN-SUFFIX,dongtaiwang.com,REJECT +- DOMAIN-SUFFIX,edoors.com,REJECT +- DOMAIN-SUFFIX,epochweekly.com,REJECT +- DOMAIN-SUFFIX,falundafa.org,REJECT +- DOMAIN-SUFFIX,fgmtv.org,REJECT +- DOMAIN-SUFFIX,gardennetworks.com,REJECT +- DOMAIN-SUFFIX,gongyiluntan.org,REJECT +- DOMAIN-SUFFIX,gpass1.com,REJECT +- DOMAIN-SUFFIX,hrichina.org,REJECT +- DOMAIN-SUFFIX,huanghuagang.org,REJECT +- DOMAIN-SUFFIX,internetfreedom.org,REJECT +- DOMAIN-SUFFIX,kanzhongguo.com,REJECT +- DOMAIN-SUFFIX,lagranepoca.com,REJECT +- DOMAIN-SUFFIX,mh4u.org,REJECT +- DOMAIN-SUFFIX,mhradio.org,REJECT +- DOMAIN-SUFFIX,minghui.org,REJECT +- DOMAIN-SUFFIX,newrealmstudios.ca,REJECT +- DOMAIN-SUFFIX,ntdtv.com,REJECT +- DOMAIN-SUFFIX,ogate.org,REJECT +- DOMAIN-SUFFIX,open.com.hk,REJECT +- DOMAIN-SUFFIX,organcare.org.tw,REJECT +- DOMAIN-SUFFIX,qxbbs.org,REJECT +- DOMAIN-SUFFIX,renminbao.com,REJECT +- DOMAIN-SUFFIX,secretchina.com,REJECT +- DOMAIN-SUFFIX,shenyun.com,REJECT +- DOMAIN-SUFFIX,shenyunperformingarts.org,REJECT +- DOMAIN-SUFFIX,shenzhoufilm.com,REJECT +- DOMAIN-SUFFIX,soundofhope.org,REJECT +- DOMAIN-SUFFIX,theepochtimes.com,REJECT +- DOMAIN-SUFFIX,tiandixing.org,REJECT +- DOMAIN-SUFFIX,tuidang.org,REJECT +- DOMAIN-SUFFIX,velkaepocha.sk,REJECT +- DOMAIN-SUFFIX,watchinese.com,REJECT +- DOMAIN-SUFFIX,wixsite.com,REJECT +- DOMAIN-SUFFIX,wujie.net,REJECT +- DOMAIN-SUFFIX,wujieliulan.com,REJECT +- DOMAIN-SUFFIX,xinsheng.net,REJECT +- DOMAIN-SUFFIX,zhengjian.org,REJECT +- DOMAIN-SUFFIX,zhuichaguoji.org,REJECT + +# > Unbreak +# >> Firebase Cloud Messaging +- DOMAIN,mtalk.google.com,DIRECT + +# Internet Service Provider Hijacking 运营商劫持 +- DOMAIN-SUFFIX,17gouwuba.com,Hijacking +- DOMAIN-SUFFIX,186078.com,Hijacking +- DOMAIN-SUFFIX,189zj.cn,Hijacking +- DOMAIN-SUFFIX,285680.com,Hijacking +- DOMAIN-SUFFIX,3721zh.com,Hijacking +- DOMAIN-SUFFIX,4336wang.cn,Hijacking +- DOMAIN-SUFFIX,51chumoping.com,Hijacking +- DOMAIN-SUFFIX,51mld.cn,Hijacking +- DOMAIN-SUFFIX,51mypc.cn,Hijacking +- DOMAIN-SUFFIX,58mingri.cn,Hijacking +- DOMAIN-SUFFIX,58mingtian.cn,Hijacking +- DOMAIN-SUFFIX,5vl58stm.com,Hijacking +- DOMAIN-SUFFIX,6d63d3.com,Hijacking +- DOMAIN-SUFFIX,7gg.cc,Hijacking +- DOMAIN-SUFFIX,91veg.com,Hijacking +- DOMAIN-SUFFIX,9s6q.cn,Hijacking +- DOMAIN-SUFFIX,adsame.com,Hijacking +- DOMAIN-SUFFIX,aiclk.com,Hijacking +- DOMAIN-SUFFIX,akuai.top,Hijacking +- DOMAIN-SUFFIX,atplay.cn,Hijacking +- DOMAIN-SUFFIX,baiwanchuangyi.com,Hijacking +- DOMAIN-SUFFIX,bayimob.com,Hijacking +- DOMAIN-SUFFIX,beerto.cn,Hijacking +- DOMAIN-SUFFIX,beilamusi.com,Hijacking +- DOMAIN-SUFFIX,benshiw.net,Hijacking +- DOMAIN-SUFFIX,bianxianmao.com,Hijacking +- DOMAIN-SUFFIX,bryonypie.com,Hijacking +- DOMAIN-SUFFIX,cishantao.com,Hijacking +- DOMAIN-SUFFIX,cszlks.com,Hijacking +- DOMAIN-SUFFIX,cudaojia.com,Hijacking +- DOMAIN-SUFFIX,dafapromo.com,Hijacking +- DOMAIN-SUFFIX,daitdai.com,Hijacking +- DOMAIN-SUFFIX,dsaeerf.com,Hijacking +- DOMAIN-SUFFIX,dugesheying.com,Hijacking +- DOMAIN-SUFFIX,dv8c1t.cn,Hijacking +- DOMAIN-SUFFIX,echatu.com,Hijacking +- DOMAIN-SUFFIX,erdoscs.com,Hijacking +- DOMAIN-SUFFIX,fan-yong.com,Hijacking +- DOMAIN-SUFFIX,feih.com.cn,Hijacking +- DOMAIN-SUFFIX,fjlqqc.com,Hijacking +- DOMAIN-SUFFIX,fkku194.com,Hijacking +- DOMAIN-SUFFIX,freedrive.cn,Hijacking +- DOMAIN-SUFFIX,gclick.cn,Hijacking +- DOMAIN-SUFFIX,goufanli100.com,Hijacking +- DOMAIN-SUFFIX,goupaoerdai.com,Hijacking +- DOMAIN-SUFFIX,gouwubang.com,Hijacking +- DOMAIN-SUFFIX,gzxnlk.com,Hijacking +- DOMAIN-SUFFIX,haoshengtoys.com,Hijacking +- DOMAIN-SUFFIX,ichaosheng.com,Hijacking +- DOMAIN-SUFFIX,ishop789.com,Hijacking +- DOMAIN-SUFFIX,jdkic.com,Hijacking +- DOMAIN-SUFFIX,jiubuhua.com,Hijacking +- DOMAIN-SUFFIX,jwg365.cn,Hijacking +- DOMAIN-SUFFIX,kawo77.com,Hijacking +- DOMAIN-SUFFIX,kualianyingxiao.cn,Hijacking +- DOMAIN-SUFFIX,kumihua.com,Hijacking +- DOMAIN-SUFFIX,ltheanine.cn,Hijacking +- DOMAIN-SUFFIX,maipinshangmao.com,Hijacking +- DOMAIN-SUFFIX,minisplat.cn,Hijacking +- DOMAIN-SUFFIX,mkitgfs.com,Hijacking +- DOMAIN-SUFFIX,mlnbike.com,Hijacking +- DOMAIN-SUFFIX,mobjump.com,Hijacking +- DOMAIN-SUFFIX,nbkbgd.cn,Hijacking +- DOMAIN-SUFFIX,newapi.com,Hijacking +- DOMAIN-SUFFIX,pinzhitmall.com,Hijacking +- DOMAIN-SUFFIX,poppyta.com,Hijacking +- DOMAIN-SUFFIX,qianchuanghr.com,Hijacking +- DOMAIN-SUFFIX,qichexin.com,Hijacking +- DOMAIN-SUFFIX,qinchugudao.com,Hijacking +- DOMAIN-SUFFIX,quanliyouxi.cn,Hijacking +- DOMAIN-SUFFIX,qutaobi.com,Hijacking +- DOMAIN-SUFFIX,ry51w.cn,Hijacking +- DOMAIN-SUFFIX,sg536.cn,Hijacking +- DOMAIN-SUFFIX,sifubo.cn,Hijacking +- DOMAIN-SUFFIX,sifuce.cn,Hijacking +- DOMAIN-SUFFIX,sifuda.cn,Hijacking +- DOMAIN-SUFFIX,sifufu.cn,Hijacking +- DOMAIN-SUFFIX,sifuge.cn,Hijacking +- DOMAIN-SUFFIX,sifugu.cn,Hijacking +- DOMAIN-SUFFIX,sifuhe.cn,Hijacking +- DOMAIN-SUFFIX,sifuhu.cn,Hijacking +- DOMAIN-SUFFIX,sifuji.cn,Hijacking +- DOMAIN-SUFFIX,sifuka.cn,Hijacking +- DOMAIN-SUFFIX,smgru.net,Hijacking +- DOMAIN-SUFFIX,taoggou.com,Hijacking +- DOMAIN-SUFFIX,tcxshop.com,Hijacking +- DOMAIN-SUFFIX,tjqonline.cn,Hijacking +- DOMAIN-SUFFIX,topitme.com,Hijacking +- DOMAIN-SUFFIX,tt3sm4.cn,Hijacking +- DOMAIN-SUFFIX,tuia.cn,Hijacking +- DOMAIN-SUFFIX,tuipenguin.com,Hijacking +- DOMAIN-SUFFIX,tuitiger.com,Hijacking +- DOMAIN-SUFFIX,websd8.com,Hijacking +- DOMAIN-SUFFIX,wx16999.com,Hijacking +- DOMAIN-SUFFIX,xiaohuau.xyz,Hijacking +- DOMAIN-SUFFIX,yinmong.com,Hijacking +- DOMAIN-SUFFIX,yiqifa.com,Hijacking +- DOMAIN-SUFFIX,yitaopt.com,Hijacking +- DOMAIN-SUFFIX,yjqiqi.com,Hijacking +- DOMAIN-SUFFIX,yukhj.com,Hijacking +- DOMAIN-SUFFIX,zhaozecheng.cn,Hijacking +- DOMAIN-SUFFIX,zhenxinet.com,Hijacking +- DOMAIN-SUFFIX,zlne800.com,Hijacking +- DOMAIN-SUFFIX,zunmi.cn,Hijacking +- DOMAIN-SUFFIX,zzd6.com,Hijacking +- IP-CIDR,39.107.15.115/32,Hijacking +- IP-CIDR,47.89.59.182/32,Hijacking +- IP-CIDR,103.49.209.27/32,Hijacking +- IP-CIDR,123.56.152.96/32,Hijacking +# > ChinaNet +- IP-CIDR,61.160.200.223/32,Hijacking +- IP-CIDR,61.160.200.242/32,Hijacking +- IP-CIDR,61.160.200.252/32,Hijacking +- IP-CIDR,61.174.50.214/32,Hijacking +- IP-CIDR,111.175.220.163/32,Hijacking +- IP-CIDR,111.175.220.164/32,Hijacking +- IP-CIDR,124.232.160.178/32,Hijacking +- IP-CIDR,175.6.223.15/32,Hijacking +- IP-CIDR,183.59.53.237/32,Hijacking +- IP-CIDR,218.93.127.37/32,Hijacking +- IP-CIDR,221.228.17.152/32,Hijacking +- IP-CIDR,221.231.6.79/32,Hijacking +- IP-CIDR,222.186.61.91/32,Hijacking +- IP-CIDR,222.186.61.95/32,Hijacking +- IP-CIDR,222.186.61.96/32,Hijacking +- IP-CIDR,222.186.61.97/32,Hijacking +# > ChinaUnicom +- IP-CIDR,106.75.231.48/32,Hijacking +- IP-CIDR,119.4.249.166/32,Hijacking +- IP-CIDR,220.196.52.141/32,Hijacking +- IP-CIDR,221.6.4.148/32,Hijacking +# > ChinaMobile +- IP-CIDR,114.247.28.96/32,Hijacking +- IP-CIDR,221.179.131.72/32,Hijacking +- IP-CIDR,221.179.140.145/32,Hijacking +# > Dr.Peng +- IP-CIDR,10.72.25.0/24,Hijacking +- IP-CIDR,115.182.16.79/32,Hijacking +- IP-CIDR,118.144.88.126/32,Hijacking +- IP-CIDR,118.144.88.215/32,Hijacking +- IP-CIDR,118.144.88.216/32,Hijacking +- IP-CIDR,120.76.189.132/32,Hijacking +- IP-CIDR,124.14.21.147/32,Hijacking +- IP-CIDR,124.14.21.151/32,Hijacking +- IP-CIDR,180.166.52.24/32,Hijacking +- IP-CIDR,211.161.101.106/32,Hijacking +- IP-CIDR,220.115.251.25/32,Hijacking +- IP-CIDR,222.73.156.235/32,Hijacking + +# Infamous 声名狼藉 +- DOMAIN-SUFFIX,kuaizip.com,Hijacking +- DOMAIN-SUFFIX,mackeeper.com,Hijacking +# > Adobe +- DOMAIN-SUFFIX,flash.cn,Hijacking +- DOMAIN,geo2.adobe.com,Hijacking +# > CJ Marketing +- DOMAIN-SUFFIX,4009997658.com,Hijacking +- DOMAIN-SUFFIX,abbyychina.com,Hijacking +- DOMAIN-SUFFIX,bartender.cc,Hijacking +- DOMAIN-SUFFIX,betterzip.net,Hijacking +- DOMAIN-SUFFIX,beyondcompare.cc,Hijacking +- DOMAIN-SUFFIX,bingdianhuanyuan.cn,Hijacking +- DOMAIN-SUFFIX,chemdraw.com.cn,Hijacking +- DOMAIN-SUFFIX,cjmakeding.com,Hijacking +- DOMAIN-SUFFIX,cjmkt.com,Hijacking +- DOMAIN-SUFFIX,codesoftchina.com,Hijacking +- DOMAIN-SUFFIX,coreldrawchina.com,Hijacking +- DOMAIN-SUFFIX,crossoverchina.com,Hijacking +- DOMAIN-SUFFIX,easyrecoverychina.com,Hijacking +- DOMAIN-SUFFIX,ediuschina.com,Hijacking +- DOMAIN-SUFFIX,flstudiochina.com,Hijacking +- DOMAIN-SUFFIX,formysql.com,Hijacking +- DOMAIN-SUFFIX,guitarpro.cc,Hijacking +- DOMAIN-SUFFIX,huishenghuiying.com.cn,Hijacking +- DOMAIN-SUFFIX,hypersnap.net,Hijacking +- DOMAIN-SUFFIX,iconworkshop.cn,Hijacking +- DOMAIN-SUFFIX,imindmap.cc,Hijacking +- DOMAIN-SUFFIX,jihehuaban.com.cn,Hijacking +- DOMAIN-SUFFIX,keyshot.cc,Hijacking +- DOMAIN-SUFFIX,kingdeecn.cn,Hijacking +- DOMAIN-SUFFIX,logoshejishi.com,Hijacking +- DOMAIN-SUFFIX,mairuan.cn,Hijacking +- DOMAIN-SUFFIX,mairuan.com,Hijacking +- DOMAIN-SUFFIX,mairuan.com.cn,Hijacking +- DOMAIN-SUFFIX,mairuan.net,Hijacking +- DOMAIN-SUFFIX,mairuanwang.com,Hijacking +- DOMAIN-SUFFIX,makeding.com,Hijacking +- DOMAIN-SUFFIX,mathtype.cn,Hijacking +- DOMAIN-SUFFIX,mindmanager.cc,Hijacking +- DOMAIN-SUFFIX,mindmapper.cc,Hijacking +- DOMAIN-SUFFIX,mycleanmymac.com,Hijacking +- DOMAIN-SUFFIX,nicelabel.cc,Hijacking +- DOMAIN-SUFFIX,ntfsformac.cc,Hijacking +- DOMAIN-SUFFIX,ntfsformac.cn,Hijacking +- DOMAIN-SUFFIX,overturechina.com,Hijacking +- DOMAIN-SUFFIX,passwordrecovery.cn,Hijacking +- DOMAIN-SUFFIX,pdfexpert.cc,Hijacking +- DOMAIN-SUFFIX,shankejingling.com,Hijacking +- DOMAIN-SUFFIX,ultraiso.net,Hijacking +- DOMAIN-SUFFIX,vegaschina.cn,Hijacking +- DOMAIN-SUFFIX,xmindchina.net,Hijacking +- DOMAIN-SUFFIX,xshellcn.com,Hijacking +- DOMAIN-SUFFIX,yihuifu.cn,Hijacking +- DOMAIN-SUFFIX,yuanchengxiezuo.com,Hijacking +- DOMAIN-SUFFIX,zbrushcn.com,Hijacking +- DOMAIN-SUFFIX,zhzzx.com,Hijacking + +# Global Area Network +# (ForeignMedia) +# (Video) +# > All4 +# USER-AGENT,All4*,ForeignMedia +- DOMAIN-SUFFIX,c4assets.com,ForeignMedia +- DOMAIN-SUFFIX,channel4.com,ForeignMedia +# > AbemaTV +# USER-AGENT,AbemaTV*,ForeignMedia +- DOMAIN-SUFFIX,abema.io,ForeignMedia +- DOMAIN-SUFFIX,ameba.jp,ForeignMedia +- DOMAIN-SUFFIX,hayabusa.io,ForeignMedia +- DOMAIN,abematv.akamaized.net,ForeignMedia +- DOMAIN,ds-linear-abematv.akamaized.net,ForeignMedia +- DOMAIN,ds-vod-abematv.akamaized.net,ForeignMedia +- DOMAIN,linear-abematv.akamaized.net,ForeignMedia +# > Amazon Prime Video +# USER-AGENT,InstantVideo.US*,ForeignMedia +# USER-AGENT,Prime%20Video*,ForeignMedia +- DOMAIN-SUFFIX,primevideo.com,ForeignMedia +# > Bahamut +# USER-AGENT,Anime*,ForeignMedia +- DOMAIN-SUFFIX,bahamut.com.tw,ForeignMedia +- DOMAIN-SUFFIX,gamer.com.tw,ForeignMedia +- DOMAIN,gamer-cds.cdn.hinet.net,ForeignMedia +- DOMAIN,gamer2-cds.cdn.hinet.net,ForeignMedia +# > BBC iPlayer +# USER-AGENT,BBCiPlayer*,ForeignMedia +- DOMAIN-SUFFIX,bbc.co.uk,ForeignMedia +- DOMAIN-SUFFIX,bbci.co.uk,ForeignMedia +- DOMAIN-KEYWORD,bbcfmt,ForeignMedia +- DOMAIN-KEYWORD,uk-live,ForeignMedia +# > DAZN +- DOMAIN-SUFFIX,dazn.com,ForeignMedia +# > encoreTVB +# USER-AGENT,encoreTVB*,ForeignMedia +- DOMAIN-SUFFIX,encoretvb.com,ForeignMedia +- DOMAIN,content.jwplatform.com,ForeignMedia +- DOMAIN,videos-f.jwpsrv.com,ForeignMedia +# > Fox+ & Fox Now +# USER-AGENT,FOX%20NOW*,ForeignMedia +# USER-AGENT,FOXPlus*,ForeignMedia +- DOMAIN-SUFFIX,dashasiafox.akamaized.net,ForeignMedia +- DOMAIN-SUFFIX,fox.com,ForeignMedia +- DOMAIN-SUFFIX,foxdcg.com,ForeignMedia +- DOMAIN-SUFFIX,foxplus.com,ForeignMedia +- DOMAIN-SUFFIX,staticasiafox.akamaized.net,ForeignMedia +- DOMAIN-SUFFIX,theplatform.com,ForeignMedia +- DOMAIN-SUFFIX,uplynk.com,ForeignMedia +# > HBO Now & HBO GO +# USER-AGENT,HBO%20NOW*,ForeignMedia +# USER-AGENT,HBO%20GO*,ForeignMedia +# USER-AGENT,HBOAsia*,ForeignMedia +- DOMAIN-SUFFIX,hbo.com,ForeignMedia +- DOMAIN-SUFFIX,hbogo.com,ForeignMedia +- DOMAIN-SUFFIX,hboasia.com,ForeignMedia +- DOMAIN-SUFFIX,hbogo.com,ForeignMedia +- DOMAIN-SUFFIX,hbogoasia.hk,ForeignMedia +- DOMAIN,44wilhpljf.execute-api.ap-southeast-1.amazonaws.com,ForeignMedia +- DOMAIN,bcbolthboa-a.akamaihd.net,ForeignMedia +- DOMAIN,cf-images.ap-southeast-1.prod.boltdns.net,ForeignMedia +- DOMAIN,manifest.prod.boltdns.net,ForeignMedia +- DOMAIN,s3-ap-southeast-1.amazonaws.com,ForeignMedia +# > Hulu +- DOMAIN-SUFFIX,hulu.com,ForeignMedia +- DOMAIN-SUFFIX,huluim.com,ForeignMedia +- DOMAIN-SUFFIX,hulustream.com,ForeignMedia +# > KKTV +# USER-AGENT,KKTV*,ForeignMedia +# USER-AGENT,com.kktv.ios.kktv*,ForeignMedia +- DOMAIN-SUFFIX,kktv.com.tw,ForeignMedia +- DOMAIN-SUFFIX,kktv.me,ForeignMedia +- DOMAIN,kktv-theater.kk.stream,ForeignMedia +# > Line TV +# USER-AGENT,LINE%20TV*,ForeignMedia +- DOMAIN-SUFFIX,linetv.tw,ForeignMedia +- DOMAIN,d3c7rimkq79yfu.cloudfront.net,ForeignMedia +# > Hulu(フールー) +- DOMAIN-SUFFIX,happyon.jp,ForeignMedia +- DOMAIN-SUFFIX,hulu.jp,ForeignMedia +# > LiTV +- DOMAIN-SUFFIX,litv.tv,ForeignMedia +- DOMAIN,litvfreemobile-hichannel.cdn.hinet.net,ForeignMedia +# > myTV_SUPER +# USER-AGENT,mytv*,ForeignMedia +- DOMAIN-SUFFIX,mytvsuper.com,ForeignMedia +- DOMAIN-SUFFIX,tvb.com,ForeignMedia +# > Netflix +# USER-AGENT,Argo*,ForeignMedia +- DOMAIN-SUFFIX,netflix.com,ForeignMedia +- DOMAIN-SUFFIX,netflix.net,ForeignMedia +- DOMAIN-SUFFIX,nflxext.com,ForeignMedia +- DOMAIN-SUFFIX,nflximg.com,ForeignMedia +- DOMAIN-SUFFIX,nflximg.net,ForeignMedia +- DOMAIN-SUFFIX,nflxso.net,ForeignMedia +- DOMAIN-SUFFIX,nflxvideo.net,ForeignMedia +- IP-CIDR,23.246.0.0/18,ForeignMedia +- IP-CIDR,37.77.184.0/21,ForeignMedia +- IP-CIDR,45.57.0.0/17,ForeignMedia +- IP-CIDR,64.120.128.0/17,ForeignMedia +- IP-CIDR,66.197.128.0/17,ForeignMedia +- IP-CIDR,108.175.32.0/20,ForeignMedia +- IP-CIDR,192.173.64.0/18,ForeignMedia +- IP-CIDR,198.38.96.0/19,ForeignMedia +- IP-CIDR,198.45.48.0/20,ForeignMedia +# > PBS +# USER-AGENT,PBS*,ForeignMedia +- DOMAIN-SUFFIX,pbs.org,ForeignMedia +# > Pornhub +- DOMAIN-SUFFIX,phncdn.com,ForeignMedia +- DOMAIN-SUFFIX,pornhub.com,ForeignMedia +- DOMAIN-SUFFIX,pornhubpremium.com,ForeignMedia +# > Twitch +- DOMAIN-SUFFIX,twitch.tv,ForeignMedia +- DOMAIN-SUFFIX,twitchcdn.net,ForeignMedia +- DOMAIN-SUFFIX,ttvnw.net,ForeignMedia +# > Viu(TV) +# USER-AGENT,Viu*,ForeignMedia +# USER-AGENT,ViuTV*,ForeignMedia +- DOMAIN-SUFFIX,viu.com,ForeignMedia +- DOMAIN-SUFFIX,viu.tv,ForeignMedia +- DOMAIN,api.viu.now.com,ForeignMedia +- DOMAIN,d1k2us671qcoau.cloudfront.net,ForeignMedia +- DOMAIN,d2anahhhmp1ffz.cloudfront.net,ForeignMedia +- DOMAIN,dfp6rglgjqszk.cloudfront.net,ForeignMedia +# > Youtube +# USER-AGENT,com.google.ios.youtube*,ForeignMedia +# USER-AGENT,YouTube*,ForeignMedia +- DOMAIN-SUFFIX,googlevideo.com,ForeignMedia +- DOMAIN-SUFFIX,youtube.com,ForeignMedia +- DOMAIN,youtubei.googleapis.com,ForeignMedia + +# (Music) +# > Deezer +# USER-AGENT,Deezer*,ForeignMedia +- DOMAIN-SUFFIX,deezer.com,ForeignMedia +- DOMAIN-SUFFIX,dzcdn.net,ForeignMedia +# > KKBOX +- DOMAIN-SUFFIX,kkbox.com,ForeignMedia +- DOMAIN-SUFFIX,kkbox.com.tw,ForeignMedia +- DOMAIN-SUFFIX,kfs.io,ForeignMedia +# > JOOX +# USER-AGENT,WeMusic*,ForeignMedia +# USER-AGENT,JOOX*,ForeignMedia +- DOMAIN-SUFFIX,joox.com,ForeignMedia +# > Pandora +# USER-AGENT,Pandora*,ForeignMedia +- DOMAIN-SUFFIX,pandora.com,ForeignMedia +# > Spotify +# USER-AGENT,Spotify*,ForeignMedia +- DOMAIN-SUFFIX,pscdn.co,ForeignMedia +- DOMAIN-SUFFIX,scdn.co,ForeignMedia +- DOMAIN-SUFFIX,spotify.com,ForeignMedia +- DOMAIN-SUFFIX,spoti.fi,ForeignMedia +- IP-CIDR,35.186.224.47/32,ForeignMedia +# > TIDAL +# USER-AGENT,TIDAL*,ForeignMedia +- DOMAIN-SUFFIX,tidal.com,ForeignMedia + +# (DomesticMedia) +# > 愛奇藝台灣站 +- DOMAIN-SUFFIX,iqiyi.com,DomesticMedia +- DOMAIN-SUFFIX,71.am,DomesticMedia +# > bilibili +- DOMAIN-SUFFIX,bilibili.com,DomesticMedia +- DOMAIN,upos-hz-mirrorakam.akamaized.net,DomesticMedia + +# (DNS Cache Pollution Protection) +# > Google +- DOMAIN-SUFFIX,appspot.com,PROXY +- DOMAIN-SUFFIX,blogger.com,PROXY +- DOMAIN-SUFFIX,getoutline.org,PROXY +- DOMAIN-SUFFIX,gvt0.com,PROXY +- DOMAIN-SUFFIX,gvt1.com,PROXY +- DOMAIN-SUFFIX,gvt3.com,PROXY +- DOMAIN-SUFFIX,xn--ngstr-lra8j.com,PROXY +- DOMAIN-KEYWORD,google,PROXY +- DOMAIN-KEYWORD,blogspot,PROXY +# > Microsoft +- DOMAIN-SUFFIX,onedrive.live.com,PROXY +- DOMAIN-SUFFIX,xboxlive.com,PROXY +# > Facebook +- DOMAIN-SUFFIX,cdninstagram.com,PROXY +- DOMAIN-SUFFIX,fb.com,PROXY +- DOMAIN-SUFFIX,fb.me,PROXY +- DOMAIN-SUFFIX,fbaddins.com,PROXY +- DOMAIN-SUFFIX,fbcdn.net,PROXY +- DOMAIN-SUFFIX,fbsbx.com,PROXY +- DOMAIN-SUFFIX,fbworkmail.com,PROXY +- DOMAIN-SUFFIX,instagram.com,PROXY +- DOMAIN-SUFFIX,m.me,PROXY +- DOMAIN-SUFFIX,messenger.com,PROXY +- DOMAIN-SUFFIX,oculus.com,PROXY +- DOMAIN-SUFFIX,oculuscdn.com,PROXY +- DOMAIN-SUFFIX,rocksdb.org,PROXY +- DOMAIN-SUFFIX,whatsapp.com,PROXY +- DOMAIN-SUFFIX,whatsapp.net,PROXY +- DOMAIN-KEYWORD,facebook,PROXY +# > Twitter +- DOMAIN-SUFFIX,pscp.tv,PROXY +- DOMAIN-SUFFIX,periscope.tv,PROXY +- DOMAIN-SUFFIX,t.co,PROXY +- DOMAIN-SUFFIX,twimg.co,PROXY +- DOMAIN-SUFFIX,twimg.com,PROXY +- DOMAIN-SUFFIX,twitpic.com,PROXY +- DOMAIN-SUFFIX,vine.co,PROXY +- DOMAIN-KEYWORD,twitter,PROXY +# > Telegram +- DOMAIN-SUFFIX,t.me,PROXY +- DOMAIN-SUFFIX,tdesktop.com,PROXY +- DOMAIN-SUFFIX,telegra.ph,PROXY +- DOMAIN-SUFFIX,telegram.me,PROXY +- DOMAIN-SUFFIX,telegram.org,PROXY +- IP-CIDR,67.198.55.0/24,PROXY +- IP-CIDR,91.108.4.0/22,PROXY +- IP-CIDR,91.108.8.0/22,PROXY +- IP-CIDR,91.108.12.0/22,PROXY +- IP-CIDR,91.108.16.0/22,PROXY +- IP-CIDR,91.108.56.0/22,PROXY +- IP-CIDR,109.239.140.0/24,PROXY +- IP-CIDR,149.154.160.0/20,PROXY +- IP-CIDR,205.172.60.0/22,PROXY +# > Line +- DOMAIN-SUFFIX,line.me,PROXY +- DOMAIN-SUFFIX,line-apps.com,PROXY +- DOMAIN-SUFFIX,line-scdn.net,PROXY +- DOMAIN-SUFFIX,naver.jp,PROXY +- IP-CIDR,103.2.30.0/23,PROXY +- IP-CIDR,125.209.208.0/20,PROXY +- IP-CIDR,147.92.128.0/17,PROXY +- IP-CIDR,203.104.144.0/21,PROXY +# > Other +- DOMAIN-SUFFIX,4shared.com,PROXY +- DOMAIN-SUFFIX,520cc.cc,PROXY +- DOMAIN-SUFFIX,881903.com,PROXY +- DOMAIN-SUFFIX,9cache.com,PROXY +- DOMAIN-SUFFIX,9gag.com,PROXY +- DOMAIN-SUFFIX,abc.com,PROXY +- DOMAIN-SUFFIX,abc.net.au,PROXY +- DOMAIN-SUFFIX,abebooks.com,PROXY +- DOMAIN-SUFFIX,amazon.co.jp,PROXY +- DOMAIN-SUFFIX,apigee.com,PROXY +- DOMAIN-SUFFIX,apk-dl.com,PROXY +- DOMAIN-SUFFIX,apkfind.com,PROXY +- DOMAIN-SUFFIX,apkmirror.com,PROXY +- DOMAIN-SUFFIX,apkmonk.com,PROXY +- DOMAIN-SUFFIX,apkpure.com,PROXY +- DOMAIN-SUFFIX,aptoide.com,PROXY +- DOMAIN-SUFFIX,archive.is,PROXY +- DOMAIN-SUFFIX,archive.org,PROXY +- DOMAIN-SUFFIX,arte.tv,PROXY +- DOMAIN-SUFFIX,artstation.com,PROXY +- DOMAIN-SUFFIX,arukas.io,PROXY +- DOMAIN-SUFFIX,ask.com,PROXY +- DOMAIN-SUFFIX,avgle.com,PROXY +- DOMAIN-SUFFIX,badoo.com,PROXY +- DOMAIN-SUFFIX,bandwagonhost.com,PROXY +- DOMAIN-SUFFIX,bbc.com,PROXY +- DOMAIN-SUFFIX,behance.net,PROXY +- DOMAIN-SUFFIX,bibox.com,PROXY +- DOMAIN-SUFFIX,biggo.com.tw,PROXY +- DOMAIN-SUFFIX,binance.com,PROXY +- DOMAIN-SUFFIX,bitcointalk.org,PROXY +- DOMAIN-SUFFIX,bitfinex.com,PROXY +- DOMAIN-SUFFIX,bitmex.com,PROXY +- DOMAIN-SUFFIX,bit-z.com,PROXY +- DOMAIN-SUFFIX,bloglovin.com,PROXY +- DOMAIN-SUFFIX,bloomberg.cn,PROXY +- DOMAIN-SUFFIX,bloomberg.com,PROXY +- DOMAIN-SUFFIX,blubrry.com,PROXY +- DOMAIN-SUFFIX,book.com.tw,PROXY +- DOMAIN-SUFFIX,booklive.jp,PROXY +- DOMAIN-SUFFIX,books.com.tw,PROXY +- DOMAIN-SUFFIX,box.com,PROXY +- DOMAIN-SUFFIX,businessinsider.com,PROXY +- DOMAIN-SUFFIX,bwh1.net,PROXY +- DOMAIN-SUFFIX,castbox.fm,PROXY +- DOMAIN-SUFFIX,cbc.ca,PROXY +- DOMAIN-SUFFIX,cccat.cc,PROXY +- DOMAIN-SUFFIX,cdw.com,PROXY +- DOMAIN-SUFFIX,change.org,PROXY +- DOMAIN-SUFFIX,ck101.com,PROXY +- DOMAIN-SUFFIX,clarionproject.org,PROXY +- DOMAIN-SUFFIX,clyp.it,PROXY +- DOMAIN-SUFFIX,cna.com.tw,PROXY +- DOMAIN-SUFFIX,comparitech.com,PROXY +- DOMAIN-SUFFIX,conoha.jp,PROXY +- DOMAIN-SUFFIX,crucial.com,PROXY +- DOMAIN-SUFFIX,cts.com.tw,PROXY +- DOMAIN-SUFFIX,cw.com.tw,PROXY +- DOMAIN-SUFFIX,cyberctm.com,PROXY +- DOMAIN-SUFFIX,dailymotion.com,PROXY +- DOMAIN-SUFFIX,dailyview.tw,PROXY +- DOMAIN-SUFFIX,daum.net,PROXY +- DOMAIN-SUFFIX,daumcdn.net,PROXY +- DOMAIN-SUFFIX,dcard.tw,PROXY +- DOMAIN-SUFFIX,deepdiscount.com,PROXY +- DOMAIN-SUFFIX,depositphotos.com,PROXY +- DOMAIN-SUFFIX,deviantart.com,PROXY +- DOMAIN-SUFFIX,disconnect.me,PROXY +- DOMAIN-SUFFIX,discordapp.com,PROXY +- DOMAIN-SUFFIX,discordapp.net,PROXY +- DOMAIN-SUFFIX,disqus.com,PROXY +- DOMAIN-SUFFIX,dns2go.com,PROXY +- DOMAIN-SUFFIX,dowjones.com,PROXY +- DOMAIN-SUFFIX,dropbox.com,PROXY +- DOMAIN-SUFFIX,dropboxusercontent.com,PROXY +- DOMAIN-SUFFIX,duckduckgo.com,PROXY +- DOMAIN-SUFFIX,dw.com,PROXY +- DOMAIN-SUFFIX,dynu.com,PROXY +- DOMAIN-SUFFIX,earthcam.com,PROXY +- DOMAIN-SUFFIX,ebookservice.tw,PROXY +- DOMAIN-SUFFIX,economist.com,PROXY +- DOMAIN-SUFFIX,edgecastcdn.net,PROXY +- DOMAIN-SUFFIX,edu,PROXY +- DOMAIN-SUFFIX,elpais.com,PROXY +- DOMAIN-SUFFIX,enanyang.my,PROXY +- DOMAIN-SUFFIX,esoir.be,PROXY +- DOMAIN-SUFFIX,euronews.com,PROXY +- DOMAIN-SUFFIX,feedly.com,PROXY +- DOMAIN-SUFFIX,firech.at,PROXY +- DOMAIN-SUFFIX,flickr.com,PROXY +- DOMAIN-SUFFIX,flitto.com,PROXY +- DOMAIN-SUFFIX,foreignpolicy.com,PROXY +- DOMAIN-SUFFIX,friday.tw,PROXY +- DOMAIN-SUFFIX,ftchinese.com,PROXY +- DOMAIN-SUFFIX,gate.io,PROXY +- DOMAIN-SUFFIX,getlantern.org,PROXY +- DOMAIN-SUFFIX,getsync.com,PROXY +- DOMAIN-SUFFIX,globalvoices.org,PROXY +- DOMAIN-SUFFIX,goo.ne.jp,PROXY +- DOMAIN-SUFFIX,goodreads.com,PROXY +- DOMAIN-SUFFIX,gov,PROXY +- DOMAIN-SUFFIX,gov.tw,PROXY +- DOMAIN-SUFFIX,gumroad.com,PROXY +- DOMAIN-SUFFIX,hbg.com,PROXY +- DOMAIN-SUFFIX,heroku.com,PROXY +- DOMAIN-SUFFIX,hightail.com,PROXY +- DOMAIN-SUFFIX,hk01.com,PROXY +- DOMAIN-SUFFIX,hkbf.org,PROXY +- DOMAIN-SUFFIX,hkbookcity.com,PROXY +- DOMAIN-SUFFIX,hkej.com,PROXY +- DOMAIN-SUFFIX,hket.com,PROXY +- DOMAIN-SUFFIX,hkgolden.com,PROXY +- DOMAIN-SUFFIX,hootsuite.com,PROXY +- DOMAIN-SUFFIX,hudson.org,PROXY +- DOMAIN-SUFFIX,hyread.com.tw,PROXY +- DOMAIN-SUFFIX,ibtimes.com,PROXY +- DOMAIN-SUFFIX,i-cable.com,PROXY +- DOMAIN-SUFFIX,icij.org,PROXY +- DOMAIN-SUFFIX,icoco.com,PROXY +- DOMAIN-SUFFIX,imgur.com,PROXY +- DOMAIN-SUFFIX,initiummall.com,PROXY +- DOMAIN-SUFFIX,insecam.org,PROXY +- DOMAIN-SUFFIX,ipfs.io,PROXY +- DOMAIN-SUFFIX,issuu.com,PROXY +- DOMAIN-SUFFIX,istockphoto.com,PROXY +- DOMAIN-SUFFIX,japantimes.co.jp,PROXY +- DOMAIN-SUFFIX,jiji.com,PROXY +- DOMAIN-SUFFIX,jinx.com,PROXY +- DOMAIN-SUFFIX,jkforum.net,PROXY +- DOMAIN-SUFFIX,joinmastodon.org,PROXY +- DOMAIN-SUFFIX,justpaste.it,PROXY +- DOMAIN-SUFFIX,kakao.com,PROXY +- DOMAIN-SUFFIX,kakaocorp.com,PROXY +- DOMAIN-SUFFIX,kik.com,PROXY +- DOMAIN-SUFFIX,kobo.com,PROXY +- DOMAIN-SUFFIX,kobobooks.com,PROXY +- DOMAIN-SUFFIX,kodingen.com,PROXY +- DOMAIN-SUFFIX,lemonde.fr,PROXY +- DOMAIN-SUFFIX,lepoint.fr,PROXY +- DOMAIN-SUFFIX,lihkg.com,PROXY +- DOMAIN-SUFFIX,listennotes.com,PROXY +- DOMAIN-SUFFIX,livestream.com,PROXY +- DOMAIN-SUFFIX,logmein.com,PROXY +- DOMAIN-SUFFIX,mail.ru,PROXY +- DOMAIN-SUFFIX,mailchimp.com,PROXY +- DOMAIN-SUFFIX,marc.info,PROXY +- DOMAIN-SUFFIX,matters.news,PROXY +- DOMAIN-SUFFIX,medium.com,PROXY +- DOMAIN-SUFFIX,mega.nz,PROXY +- DOMAIN-SUFFIX,mil,PROXY +- DOMAIN-SUFFIX,mingpao.com,PROXY +- DOMAIN-SUFFIX,mobile01.com,PROXY +- DOMAIN-SUFFIX,myspace.com,PROXY +- DOMAIN-SUFFIX,myspacecdn.com,PROXY +- DOMAIN-SUFFIX,nanyang.com,PROXY +- DOMAIN-SUFFIX,naver.com,PROXY +- DOMAIN-SUFFIX,newstapa.org,PROXY +- DOMAIN-SUFFIX,nhk.or.jp,PROXY +- DOMAIN-SUFFIX,nicovideo.jp,PROXY +- DOMAIN-SUFFIX,nii.ac.jp,PROXY +- DOMAIN-SUFFIX,nikkei.com,PROXY +- DOMAIN-SUFFIX,nofile.io,PROXY +- DOMAIN-SUFFIX,now.com,PROXY +- DOMAIN-SUFFIX,nrk.no,PROXY +- DOMAIN-SUFFIX,nyt.com,PROXY +- DOMAIN-SUFFIX,nytchina.com,PROXY +- DOMAIN-SUFFIX,nytcn.me,PROXY +- DOMAIN-SUFFIX,nytco.com,PROXY +- DOMAIN-SUFFIX,nytimes.com,PROXY +- DOMAIN-SUFFIX,nytimg.com,PROXY +- DOMAIN-SUFFIX,nytlog.com,PROXY +- DOMAIN-SUFFIX,nytstyle.com,PROXY +- DOMAIN-SUFFIX,ok.ru,PROXY +- DOMAIN-SUFFIX,okex.com,PROXY +- DOMAIN-SUFFIX,on.cc,PROXY +- DOMAIN-SUFFIX,orientaldaily.com.my,PROXY +- DOMAIN-SUFFIX,overcast.fm,PROXY +- DOMAIN-SUFFIX,paltalk.com,PROXY +- DOMAIN-SUFFIX,pbxes.com,PROXY +- DOMAIN-SUFFIX,pcdvd.com.tw,PROXY +- DOMAIN-SUFFIX,pchome.com.tw,PROXY +- DOMAIN-SUFFIX,pcloud.com,PROXY +- DOMAIN-SUFFIX,picacomic.com,PROXY +- DOMAIN-SUFFIX,pinimg.com,PROXY +- DOMAIN-SUFFIX,pixiv.net,PROXY +- DOMAIN-SUFFIX,player.fm,PROXY +- DOMAIN-SUFFIX,plurk.com,PROXY +- DOMAIN-SUFFIX,po18.tw,PROXY +- DOMAIN-SUFFIX,prism-break.org,PROXY +- DOMAIN-SUFFIX,proxifier.com,PROXY +- DOMAIN-SUFFIX,pts.org.tw,PROXY +- DOMAIN-SUFFIX,pubu.com.tw,PROXY +- DOMAIN-SUFFIX,pubu.tw,PROXY +- DOMAIN-SUFFIX,pureapk.com,PROXY +- DOMAIN-SUFFIX,quora.com,PROXY +- DOMAIN-SUFFIX,quoracdn.net,PROXY +- DOMAIN-SUFFIX,rakuten.co.jp,PROXY +- DOMAIN-SUFFIX,readingtimes.com.tw,PROXY +- DOMAIN-SUFFIX,readmoo.com,PROXY +- DOMAIN-SUFFIX,reddit.com,PROXY +- DOMAIN-SUFFIX,redditmedia.com,PROXY +- DOMAIN-SUFFIX,resilio.com,PROXY +- DOMAIN-SUFFIX,reuters.com,PROXY +- DOMAIN-SUFFIX,rfi.fr,PROXY +- DOMAIN-SUFFIX,roadshow.hk,PROXY +- DOMAIN-SUFFIX,scmp.com,PROXY +- DOMAIN-SUFFIX,scribd.com,PROXY +- DOMAIN-SUFFIX,seatguru.com,PROXY +- DOMAIN-SUFFIX,shadowsocks.org,PROXY +- DOMAIN-SUFFIX,shopee.tw,PROXY +- DOMAIN-SUFFIX,slideshare.net,PROXY +- DOMAIN-SUFFIX,softfamous.com,PROXY +- DOMAIN-SUFFIX,soundcloud.com,PROXY +- DOMAIN-SUFFIX,startpage.com,PROXY +- DOMAIN-SUFFIX,steamcommunity.com,PROXY +- DOMAIN-SUFFIX,steemit.com,PROXY +- DOMAIN-SUFFIX,steemitwallet.com,PROXY +- DOMAIN-SUFFIX,t66y.com,PROXY +- DOMAIN-SUFFIX,tapatalk.com,PROXY +- DOMAIN-SUFFIX,teco-hk.org,PROXY +- DOMAIN-SUFFIX,teco-mo.org,PROXY +- DOMAIN-SUFFIX,teddysun.com,PROXY +- DOMAIN-SUFFIX,theguardian.com,PROXY +- DOMAIN-SUFFIX,theinitium.com,PROXY +- DOMAIN-SUFFIX,tineye.com,PROXY +- DOMAIN-SUFFIX,torproject.org,PROXY +- DOMAIN-SUFFIX,tumblr.com,PROXY +- DOMAIN-SUFFIX,turbobit.net,PROXY +- DOMAIN-SUFFIX,tutanota.com,PROXY +- DOMAIN-SUFFIX,tvboxnow.com,PROXY +- DOMAIN-SUFFIX,udn.com,PROXY +- DOMAIN-SUFFIX,unseen.is,PROXY +- DOMAIN-SUFFIX,upmedia.mg,PROXY +- DOMAIN-SUFFIX,uptodown.com,PROXY +- DOMAIN-SUFFIX,ustream.tv,PROXY +- DOMAIN-SUFFIX,uwants.com,PROXY +- DOMAIN-SUFFIX,v2ray.com,PROXY +- DOMAIN-SUFFIX,viber.com,PROXY +- DOMAIN-SUFFIX,videopress.com,PROXY +- DOMAIN-SUFFIX,vimeo.com,PROXY +- DOMAIN-SUFFIX,voachinese.com,PROXY +- DOMAIN-SUFFIX,voanews.com,PROXY +- DOMAIN-SUFFIX,voxer.com,PROXY +- DOMAIN-SUFFIX,vzw.com,PROXY +- DOMAIN-SUFFIX,w3schools.com,PROXY +- DOMAIN-SUFFIX,washingtonpost.com,PROXY +- DOMAIN-SUFFIX,wattpad.com,PROXY +- DOMAIN-SUFFIX,whoer.net,PROXY +- DOMAIN-SUFFIX,wikimapia.org,PROXY +- DOMAIN-SUFFIX,wikipedia.org,PROXY +- DOMAIN-SUFFIX,winudf.com,PROXY +- DOMAIN-SUFFIX,wire.com,PROXY +- DOMAIN-SUFFIX,wordpress.com,PROXY +- DOMAIN-SUFFIX,workflow.is,PROXY +- DOMAIN-SUFFIX,worldcat.org,PROXY +- DOMAIN-SUFFIX,wsj.com,PROXY +- DOMAIN-SUFFIX,wsj.net,PROXY +- DOMAIN-SUFFIX,xhamster.com,PROXY +- DOMAIN-SUFFIX,xnxx.com,PROXY +- DOMAIN-SUFFIX,xvideos.com,PROXY +- DOMAIN-SUFFIX,yahoo.com,PROXY +- DOMAIN-SUFFIX,yandex.ru,PROXY +- DOMAIN-SUFFIX,ycombinator.com,PROXY +- DOMAIN-SUFFIX,yesasia.com,PROXY +- DOMAIN-SUFFIX,yes-news.com,PROXY +- DOMAIN-SUFFIX,yomiuri.co.jp,PROXY +- DOMAIN-SUFFIX,you-get.org,PROXY +- DOMAIN-SUFFIX,zaobao.com,PROXY +- DOMAIN-SUFFIX,zb.com,PROXY +- DOMAIN-SUFFIX,zello.com,PROXY +- DOMAIN-SUFFIX,zeronet.io,PROXY +- DOMAIN-KEYWORD,github,PROXY +- DOMAIN-KEYWORD,jav,PROXY +- DOMAIN-KEYWORD,pinterest,PROXY +- DOMAIN-KEYWORD,porn,PROXY +- DOMAIN-KEYWORD,wikileaks,PROXY + +# (Region-Restricted Access Denied) +- DOMAIN-SUFFIX,apartmentratings.com,PROXY +- DOMAIN-SUFFIX,apartments.com,PROXY +- DOMAIN-SUFFIX,bankmobilevibe.com,PROXY +- DOMAIN-SUFFIX,bing.com,PROXY +- DOMAIN-SUFFIX,booktopia.com.au,PROXY +- DOMAIN-SUFFIX,centauro.com.br,PROXY +- DOMAIN-SUFFIX,clearsurance.com,PROXY +- DOMAIN-SUFFIX,costco.com,PROXY +- DOMAIN-SUFFIX,crackle.com,PROXY +- DOMAIN-SUFFIX,depositphotos.cn,PROXY +- DOMAIN-SUFFIX,dish.com,PROXY +- DOMAIN-SUFFIX,dmm.co.jp,PROXY +- DOMAIN-SUFFIX,dmm.com,PROXY +- DOMAIN-SUFFIX,dnvod.tv,PROXY +- DOMAIN-SUFFIX,esurance.com,PROXY +- DOMAIN-SUFFIX,extmatrix.com,PROXY +- DOMAIN-SUFFIX,fastpic.ru,PROXY +- DOMAIN-SUFFIX,flipboard.com,PROXY +- DOMAIN-SUFFIX,fnac.be,PROXY +- DOMAIN-SUFFIX,fnac.com,PROXY +- DOMAIN-SUFFIX,funkyimg.com,PROXY +- DOMAIN-SUFFIX,fxnetworks.com,PROXY +- DOMAIN-SUFFIX,gettyimages.com,PROXY +- DOMAIN-SUFFIX,go.com,PROXY +- DOMAIN-SUFFIX,here.com,PROXY +- DOMAIN-SUFFIX,jcpenney.com,PROXY +- DOMAIN-SUFFIX,jiehua.tv,PROXY +- DOMAIN-SUFFIX,kknews.cc,PROXY +- DOMAIN-SUFFIX,mailfence.com,PROXY +- DOMAIN-SUFFIX,nationwide.com,PROXY +- DOMAIN-SUFFIX,nbc.com,PROXY +- DOMAIN-SUFFIX,nexon.com,PROXY +- DOMAIN-SUFFIX,nordstrom.com,PROXY +- DOMAIN-SUFFIX,nordstromimage.com,PROXY +- DOMAIN-SUFFIX,nordstromrack.com,PROXY +- DOMAIN-SUFFIX,read01.com,PROXY +- DOMAIN-SUFFIX,superpages.com,PROXY +- DOMAIN-SUFFIX,target.com,PROXY +- DOMAIN-SUFFIX,thinkgeek.com,PROXY +- DOMAIN-SUFFIX,tracfone.com,PROXY +- DOMAIN-SUFFIX,uploader.jp,PROXY +- DOMAIN-SUFFIX,vevo.com,PROXY +- DOMAIN-SUFFIX,viu.tv,PROXY +- DOMAIN-SUFFIX,vk.com,PROXY +- DOMAIN-SUFFIX,vsco.co,PROXY +- DOMAIN-SUFFIX,xfinity.com,PROXY +- DOMAIN-SUFFIX,zattoo.com,PROXY +# USER-AGENT,Roam*,PROXY + +# (The Most Popular Sites) +# > Apple +# >> TestFlight +- DOMAIN,testflight.apple.com,PROXY +# >> Apple URL Shortener +- DOMAIN-SUFFIX,appsto.re,PROXY +# >> iBooks Store download +- DOMAIN,books.itunes.apple.com,PROXY +# >> iTunes Store Moveis Trailers +- DOMAIN,hls.itunes.apple.com,PROXY +# >> App Store Preview +- DOMAIN,apps.apple.com,PROXY +- DOMAIN,itunes.apple.com,PROXY +# >> Spotlight +- DOMAIN,api-glb-sea.smoot.apple.com,PROXY +# >> Dictionary +- DOMAIN,lookup-api.apple.com,PROXY +# >> Apple News and Apple Map TOMTOM Version +- DOMAIN,gspe1-ssl.ls.apple.com,PROXY +# USER-AGENT,AppleNews*,PROXY +# USER-AGENT,com.apple.news*,PROXY +- DOMAIN-SUFFIX,apple.news,PROXY +- DOMAIN,news-client.apple.com,PROXY +- DOMAIN,news-edge.apple.com,PROXY +- DOMAIN,news-events.apple.com,PROXY +- DOMAIN,apple.comscoreresearch.com,PROXY +# > Google +- DOMAIN-SUFFIX,abc.xyz,PROXY +- DOMAIN-SUFFIX,android.com,PROXY +- DOMAIN-SUFFIX,androidify.com,PROXY +- DOMAIN-SUFFIX,dialogflow.com,PROXY +- DOMAIN-SUFFIX,autodraw.com,PROXY +- DOMAIN-SUFFIX,capitalg.com,PROXY +- DOMAIN-SUFFIX,certificate-transparency.org,PROXY +- DOMAIN-SUFFIX,chrome.com,PROXY +- DOMAIN-SUFFIX,chromeexperiments.com,PROXY +- DOMAIN-SUFFIX,chromestatus.com,PROXY +- DOMAIN-SUFFIX,chromium.org,PROXY +- DOMAIN-SUFFIX,creativelab5.com,PROXY +- DOMAIN-SUFFIX,debug.com,PROXY +- DOMAIN-SUFFIX,deepmind.com,PROXY +- DOMAIN-SUFFIX,firebaseio.com,PROXY +- DOMAIN-SUFFIX,getmdl.io,PROXY +- DOMAIN-SUFFIX,ggpht.com,PROXY +- DOMAIN-SUFFIX,gmail.com,PROXY +- DOMAIN-SUFFIX,gmodules.com,PROXY +- DOMAIN-SUFFIX,godoc.org,PROXY +- DOMAIN-SUFFIX,golang.org,PROXY +- DOMAIN-SUFFIX,gstatic.com,PROXY +- DOMAIN-SUFFIX,gv.com,PROXY +- DOMAIN-SUFFIX,gwtproject.org,PROXY +- DOMAIN-SUFFIX,itasoftware.com,PROXY +- DOMAIN-SUFFIX,madewithcode.com,PROXY +- DOMAIN-SUFFIX,material.io,PROXY +- DOMAIN-SUFFIX,polymer-project.org,PROXY +- DOMAIN-SUFFIX,admin.recaptcha.net,PROXY +- DOMAIN-SUFFIX,recaptcha.net,PROXY +- DOMAIN-SUFFIX,shattered.io,PROXY +- DOMAIN-SUFFIX,synergyse.com,PROXY +- DOMAIN-SUFFIX,tensorflow.org,PROXY +- DOMAIN-SUFFIX,tfhub.dev,PROXY +- DOMAIN-SUFFIX,tiltbrush.com,PROXY +- DOMAIN-SUFFIX,waveprotocol.org,PROXY +- DOMAIN-SUFFIX,waymo.com,PROXY +- DOMAIN-SUFFIX,webmproject.org,PROXY +- DOMAIN-SUFFIX,webrtc.org,PROXY +- DOMAIN-SUFFIX,whatbrowser.org,PROXY +- DOMAIN-SUFFIX,widevine.com,PROXY +- DOMAIN-SUFFIX,x.company,PROXY +- DOMAIN-SUFFIX,youtu.be,PROXY +- DOMAIN-SUFFIX,yt.be,PROXY +- DOMAIN-SUFFIX,ytimg.com,PROXY +# > Microsoft +- DOMAIN-SUFFIX,1drv.com,PROXY +- DOMAIN-SUFFIX,1drv.ms,PROXY +- DOMAIN-SUFFIX,live.com,PROXY +- DOMAIN-SUFFIX,live.net,PROXY +- DOMAIN-SUFFIX,livefilestore.com,PROXY +- DOMAIN-SUFFIX,storage.msn.com,PROXY +# > Other +- DOMAIN-SUFFIX,0rz.tw,PROXY +- DOMAIN-SUFFIX,4bluestones.biz,PROXY +- DOMAIN-SUFFIX,9bis.net,PROXY +- DOMAIN-SUFFIX,allconnected.co,PROXY +- DOMAIN-SUFFIX,amazonaws.com,PROXY +- DOMAIN-SUFFIX,aol.com,PROXY +- DOMAIN-SUFFIX,bcc.com.tw,PROXY +- DOMAIN-SUFFIX,bit.ly,PROXY +- DOMAIN-SUFFIX,bitshare.com,PROXY +- DOMAIN-SUFFIX,blog.jp,PROXY +- DOMAIN-SUFFIX,blogimg.jp,PROXY +- DOMAIN-SUFFIX,blogtd.org,PROXY +- DOMAIN-SUFFIX,broadcast.co.nz,PROXY +- DOMAIN-SUFFIX,camfrog.com,PROXY +- DOMAIN-SUFFIX,cfos.de,PROXY +- DOMAIN-SUFFIX,citypopulation.de,PROXY +- DOMAIN-SUFFIX,cloudfront.net,PROXY +- DOMAIN-SUFFIX,ctitv.com.tw,PROXY +- DOMAIN-SUFFIX,cuhk.edu.hk,PROXY +- DOMAIN-SUFFIX,cusu.hk,PROXY +- DOMAIN-SUFFIX,discuss.com.hk,PROXY +- DOMAIN-SUFFIX,dropboxapi.com,PROXY +- DOMAIN-SUFFIX,duolingo.cn,PROXY +- DOMAIN-SUFFIX,edditstatic.com,PROXY +- DOMAIN-SUFFIX,flickriver.com,PROXY +- DOMAIN-SUFFIX,focustaiwan.tw,PROXY +- DOMAIN-SUFFIX,free.fr,PROXY +- DOMAIN-SUFFIX,gigacircle.com,PROXY +- DOMAIN-SUFFIX,hk-pub.com,PROXY +- DOMAIN-SUFFIX,hosting.co.uk,PROXY +- DOMAIN-SUFFIX,hwcdn.net,PROXY +- DOMAIN-SUFFIX,iphone4hongkong.com,PROXY +- DOMAIN-SUFFIX,iphonetaiwan.org,PROXY +- DOMAIN-SUFFIX,iptvbin.com,PROXY +- DOMAIN-SUFFIX,jtvnw.net,PROXY +- DOMAIN-SUFFIX,linksalpha.com,PROXY +- DOMAIN-SUFFIX,manyvids.com,PROXY +- DOMAIN-SUFFIX,myactimes.com,PROXY +- DOMAIN-SUFFIX,newsblur.com,PROXY +- DOMAIN-SUFFIX,now.im,PROXY +- DOMAIN-SUFFIX,nowe.com,PROXY +- DOMAIN-SUFFIX,redditlist.com,PROXY +- DOMAIN-SUFFIX,signal.org,PROXY +- DOMAIN-SUFFIX,smartmailcloud.com,PROXY +- DOMAIN-SUFFIX,sparknotes.com,PROXY +- DOMAIN-SUFFIX,streetvoice.com,PROXY +- DOMAIN-SUFFIX,supertop.co,PROXY +- DOMAIN-SUFFIX,tv.com,PROXY +- DOMAIN-SUFFIX,typepad.com,PROXY +- DOMAIN-SUFFIX,udnbkk.com,PROXY +- DOMAIN-SUFFIX,urbanairship.com,PROXY +- DOMAIN-SUFFIX,whispersystems.org,PROXY +- DOMAIN-SUFFIX,wikia.com,PROXY +- DOMAIN-SUFFIX,wn.com,PROXY +- DOMAIN-SUFFIX,wolframalpha.com,PROXY +- DOMAIN-SUFFIX,x-art.com,PROXY +- DOMAIN-SUFFIX,yimg.com,PROXY + +# China Area Network +# > 360 +- DOMAIN-SUFFIX,qhres.com,DIRECT +- DOMAIN-SUFFIX,qhimg.com,DIRECT +# > Akamai +- DOMAIN-SUFFIX,akadns.net,DIRECT +# - DOMAIN-SUFFIX,akamai.net,DIRECT +# - DOMAIN-SUFFIX,akamaiedge.net,DIRECT +# - DOMAIN-SUFFIX,akamaihd.net,DIRECT +# - DOMAIN-SUFFIX,akamaistream.net,DIRECT +# - DOMAIN-SUFFIX,akamaized.net,DIRECT +# > Alibaba +# USER-AGENT,%E4%BC%98%E9%85%B7*,DIRECT +- DOMAIN-SUFFIX,alibaba.com,DIRECT +- DOMAIN-SUFFIX,alicdn.com,DIRECT +- DOMAIN-SUFFIX,alikunlun.com,DIRECT +- DOMAIN-SUFFIX,alipay.com,DIRECT +- DOMAIN-SUFFIX,amap.com,DIRECT +- DOMAIN-SUFFIX,dingtalk.com,DIRECT +- DOMAIN-SUFFIX,taobao.com,DIRECT +- DOMAIN-SUFFIX,tmall.com,DIRECT +- DOMAIN-SUFFIX,tmall.hk,DIRECT +- DOMAIN-SUFFIX,ykimg.com,DIRECT +- DOMAIN-SUFFIX,youku.com,DIRECT +- DOMAIN-SUFFIX,xiami.com,DIRECT +- DOMAIN-SUFFIX,xiami.net,DIRECT +# > Apple +- DOMAIN-SUFFIX,aaplimg.com,Apple +- DOMAIN-SUFFIX,apple.co,Apple +- DOMAIN-SUFFIX,apple.com,Apple +- DOMAIN-SUFFIX,appstore.com,Apple +- DOMAIN-SUFFIX,cdn-apple.com,Apple +- DOMAIN-SUFFIX,crashlytics.com,Apple +- DOMAIN-SUFFIX,icloud.com,Apple +- DOMAIN-SUFFIX,icloud-content.com,Apple +- DOMAIN-SUFFIX,me.com,Apple +- DOMAIN-SUFFIX,mzstatic.com,Apple +- DOMAIN,www-cdn.icloud.com.akadns.net,Apple +- IP-CIDR,17.0.0.0/8,Apple +# > Baidu +- DOMAIN-SUFFIX,baidu.com,DIRECT +- DOMAIN-SUFFIX,baidubcr.com,DIRECT +- DOMAIN-SUFFIX,bdstatic.com,DIRECT +# > bilibili +- DOMAIN-SUFFIX,acgvideo.com,DIRECT +- DOMAIN-SUFFIX,biliapi.com,DIRECT +- DOMAIN-SUFFIX,biliapi.net,DIRECT +- DOMAIN-SUFFIX,bilibili.com,DIRECT +- DOMAIN-SUFFIX,hdslb.com,DIRECT +# > Blizzard +- DOMAIN-SUFFIX,blizzard.com,DIRECT +- DOMAIN-SUFFIX,battle.net,DIRECT +- DOMAIN,blzddist1-a.akamaihd.net,DIRECT +# > ByteDance +- DOMAIN-SUFFIX,feiliao.com,DIRECT +- DOMAIN-SUFFIX,pstatp.com,DIRECT +- DOMAIN-SUFFIX,snssdk.com,DIRECT +- DOMAIN-SUFFIX,iesdouyin.com,DIRECT +- DOMAIN-SUFFIX,toutiao.com,DIRECT +# > 蛋蛋赞 +- DOMAIN-SUFFIX,343480.com,DIRECT +- DOMAIN-SUFFIX,baduziyuan.com,DIRECT +- DOMAIN-SUFFIX,com-hs-hkdy.com,DIRECT +- DOMAIN-SUFFIX,czybjz.com,DIRECT +- DOMAIN-SUFFIX,dandanzan.com,DIRECT +- DOMAIN-SUFFIX,fjhps.com,DIRECT +- DOMAIN-SUFFIX,kuyunbo.club,DIRECT +# > ChinaNet +- DOMAIN-SUFFIX,21cn.com,DIRECT +# > HunanTV +- DOMAIN-SUFFIX,hitv.com,DIRECT +- DOMAIN-SUFFIX,mgtv.com,DIRECT +# > iQiyi +- DOMAIN-SUFFIX,iqiyi.com,DIRECT +- DOMAIN-SUFFIX,iqiyipic.com,DIRECT +- DOMAIN-SUFFIX,71.am.com,DIRECT +# > JD +- DOMAIN-SUFFIX,jd.com,DIRECT +- DOMAIN-SUFFIX,jd.hk,DIRECT +- DOMAIN-SUFFIX,360buyimg.com,DIRECT +# > Kingsoft +- DOMAIN-SUFFIX,iciba.com,DIRECT +- DOMAIN-SUFFIX,ksosoft.com,DIRECT +# > Meitu +- DOMAIN-SUFFIX,meitu.com,DIRECT +- DOMAIN-SUFFIX,meitudata.com,DIRECT +- DOMAIN-SUFFIX,meitustat.com,DIRECT +- DOMAIN-SUFFIX,meipai.com,DIRECT +# > MI +- DOMAIN-SUFFIX,duokan.com,DIRECT +- DOMAIN-SUFFIX,mi-img.com,DIRECT +- DOMAIN-SUFFIX,miui.com,DIRECT +- DOMAIN-SUFFIX,xiaomi.com,DIRECT +# > Microsoft +- DOMAIN-SUFFIX,microsoft.com,DIRECT +- DOMAIN-SUFFIX,windows.com,DIRECT +- DOMAIN-SUFFIX,windowsupdate.com,DIRECT +- DOMAIN-SUFFIX,visualstudio.com,DIRECT +- DOMAIN-SUFFIX,msecnd.net,DIRECT +- DOMAIN,officecdn-microsoft-com.akamaized.net,DIRECT +# > NetEase +# USER-AGENT,NeteaseMusic*,DIRECT +# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,DIRECT +- DOMAIN-SUFFIX,163.com,DIRECT +- DOMAIN-SUFFIX,126.net,DIRECT +- DOMAIN-SUFFIX,127.net,DIRECT +- DOMAIN-SUFFIX,163yun.com,DIRECT +- DOMAIN-SUFFIX,lofter.com,DIRECT +- DOMAIN-SUFFIX,ydstatic.com,DIRECT +# > Sina +- DOMAIN-SUFFIX,sina.com,DIRECT +- DOMAIN-SUFFIX,weibo.com,DIRECT +# > Sohu +- DOMAIN-SUFFIX,sohu.com,DIRECT +- DOMAIN-SUFFIX,sohucs.com,DIRECT +- DOMAIN-SUFFIX,sohu-inc.com,DIRECT +- DOMAIN-SUFFIX,v-56.com,DIRECT +# > Sogo +- DOMAIN-SUFFIX,sogo.com,DIRECT +- DOMAIN-SUFFIX,sogou.com,DIRECT +- DOMAIN-SUFFIX,sogoucdn.com,DIRECT +# > Steam +- DOMAIN-SUFFIX,steampowered.com,DIRECT +- DOMAIN-SUFFIX,steam-chat.com,DIRECT +- DOMAIN-SUFFIX,steamgames.com,DIRECT +- DOMAIN-SUFFIX,steamusercontent.com,DIRECT +- DOMAIN-SUFFIX,steamcontent.com,DIRECT +- DOMAIN-SUFFIX,steamstatic.com,DIRECT +- DOMAIN-SUFFIX,steamcdn-a.akamaihd.net,DIRECT +# > Tencent +# USER-AGENT,MicroMessenger%20Client,DIRECT +# USER-AGENT,WeChat*,DIRECT +- DOMAIN-SUFFIX,qq.com,DIRECT +- DOMAIN-SUFFIX,tencent.com,DIRECT +# > YYeTs +# USER-AGENT,YYeTs*,DIRECT +- DOMAIN-SUFFIX,jstucdn.com,DIRECT +- DOMAIN-SUFFIX,zimuzu.io,DIRECT +- DOMAIN-SUFFIX,zimuzu.tv,DIRECT +- DOMAIN-SUFFIX,zmz2019.com,DIRECT +- DOMAIN-SUFFIX,zmzapi.com,DIRECT +- DOMAIN-SUFFIX,zmzapi.net,DIRECT +- DOMAIN-SUFFIX,zmzfile.com,DIRECT +# > Content Delivery Network +- DOMAIN-SUFFIX,chinanetcenter.com,DIRECT +- DOMAIN-SUFFIX,wangsu.com,DIRECT +- DOMAIN-SUFFIX,meixincdn.com,DIRECT +# > IP Query +- DOMAIN-SUFFIX,ipip.net,DIRECT +- DOMAIN-SUFFIX,ip.la,DIRECT +- DOMAIN-SUFFIX,ip-cdn.com,DIRECT +- DOMAIN-SUFFIX,ipv6-test.com,DIRECT +- DOMAIN-SUFFIX,test-ipv6.com,DIRECT +- DOMAIN-SUFFIX,whatismyip.com,DIRECT +- DOMAIN,ip.bjango.com,DIRECT +# > Speed Test +# - DOMAIN-SUFFIX,speedtest.net,DIRECT +- DOMAIN-SUFFIX,netspeedtestmaster.com,DIRECT +- DOMAIN,speedtest.macpaw.com,DIRECT +# > Private Tracker +- 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,empornium.me,DIRECT +- DOMAIN-SUFFIX,gazellegames.net,DIRECT +- DOMAIN-SUFFIX,hdchina.org,DIRECT +- DOMAIN-SUFFIX,hdsky.me,DIRECT +- DOMAIN-SUFFIX,jpopsuki.eu,DIRECT +- DOMAIN-SUFFIX,keepfrds.com,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,springsunday.net,DIRECT +- DOMAIN-SUFFIX,tjupt.org,DIRECT +- DOMAIN-SUFFIX,totheglory.im,DIRECT +# > Other +- DOMAIN-SUFFIX,cn,DIRECT +- DOMAIN-SUFFIX,8686c.com,DIRECT +- DOMAIN-SUFFIX,aixifan.com,DIRECT +- DOMAIN-SUFFIX,beitaichufang.com,DIRECT +- DOMAIN-SUFFIX,booking.com,DIRECT +- DOMAIN-SUFFIX,bstatic.com,DIRECT +- DOMAIN-SUFFIX,cailianpress.com,DIRECT +- DOMAIN-SUFFIX,chunyu.mobi,DIRECT +- DOMAIN-SUFFIX,chushou.tv,DIRECT +- DOMAIN-SUFFIX,cmbchina.com,DIRECT +- DOMAIN-SUFFIX,cmbimg.com,DIRECT +- DOMAIN-SUFFIX,ctrip.com,DIRECT +- DOMAIN-SUFFIX,dfcfw.com,DIRECT +- DOMAIN-SUFFIX,douban.com,DIRECT +- DOMAIN-SUFFIX,doubanio.com,DIRECT +- DOMAIN-SUFFIX,douyu.com,DIRECT +- DOMAIN-SUFFIX,dxycdn.com,DIRECT +- DOMAIN-SUFFIX,eastmoney.com,DIRECT +- DOMAIN-SUFFIX,futunn.com,DIRECT +- DOMAIN-SUFFIX,geilicdn.com,DIRECT +- DOMAIN-SUFFIX,hicloud.com,DIRECT +- DOMAIN-SUFFIX,hostbuf.com,DIRECT +- DOMAIN-SUFFIX,huya.com,DIRECT +- DOMAIN-SUFFIX,infinitynewtab.com,DIRECT +- DOMAIN-SUFFIX,ithome.com,DIRECT +- DOMAIN-SUFFIX,keepcdn.com,DIRECT +- DOMAIN-SUFFIX,kkmh.com,DIRECT +- DOMAIN-SUFFIX,luojilab.com,DIRECT +- DOMAIN-SUFFIX,maoyun.tv,DIRECT +- DOMAIN-SUFFIX,meituan.net,DIRECT +- DOMAIN-SUFFIX,mobike.com,DIRECT +- DOMAIN-SUFFIX,mubu.com,DIRECT +- DOMAIN-SUFFIX,myzaker.com,DIRECT +- DOMAIN-SUFFIX,nvidia.com,DIRECT +- DOMAIN-SUFFIX,paypal.com,DIRECT +- DOMAIN-SUFFIX,paypalobjects.com,DIRECT +- DOMAIN-SUFFIX,qyer.com,DIRECT +- DOMAIN-SUFFIX,qyerstatic.com,DIRECT +- DOMAIN-SUFFIX,ronghub.com,DIRECT +- DOMAIN-SUFFIX,ruguoapp.com,DIRECT +- DOMAIN-SUFFIX,smzdm.com,DIRECT +- DOMAIN-SUFFIX,snapdrop.net,DIRECT +- DOMAIN-SUFFIX,sspai.com,DIRECT +- DOMAIN-SUFFIX,teamviewer.com,DIRECT +- DOMAIN-SUFFIX,tianyancha.com,DIRECT +- DOMAIN-SUFFIX,udacity.com,DIRECT +- DOMAIN-SUFFIX,uning.com,DIRECT +- DOMAIN-SUFFIX,weather.com,DIRECT +- DOMAIN-SUFFIX,weidian.com,DIRECT +- DOMAIN-SUFFIX,xmcdn.com,DIRECT +- DOMAIN-SUFFIX,yangkeduo.com,DIRECT +- DOMAIN-SUFFIX,zhangzishi.cc,DIRECT +- DOMAIN-SUFFIX,zhihu.com,DIRECT +- DOMAIN-SUFFIX,zhimg.com,DIRECT +- DOMAIN-SUFFIX,zhuihd.com,DIRECT +- DOMAIN,download.jetbrains.com,DIRECT + +# Local Area Network +- DOMAIN-SUFFIX,local,DIRECT +- IP-CIDR,192.168.0.0/16,DIRECT +- IP-CIDR,10.0.0.0/8,DIRECT +- IP-CIDR,172.16.0.0/12,DIRECT +- IP-CIDR,127.0.0.0/8,DIRECT +- IP-CIDR,100.64.0.0/10,DIRECT + +# GeoIP China +- GEOIP,CN,DIRECT + +- MATCH,Final diff --git a/luci-app-openclash/files/etc/openclash/ConnersHua_return.yaml b/luci-app-openclash/files/etc/openclash/ConnersHua_return.yaml index ddf067a4f6..47cdc0140c 100644 --- a/luci-app-openclash/files/etc/openclash/ConnersHua_return.yaml +++ b/luci-app-openclash/files/etc/openclash/ConnersHua_return.yaml @@ -1,79 +1,79 @@ -Rule: -##source:ConnersHua_return -# (Video) -# AcFun -# USER-AGENT,AcFun*,PROXY -- DOMAIN-SUFFIX,acfun.cn,PROXY -- DOMAIN-SUFFIX,acfun.com,PROXY -- DOMAIN-SUFFIX,aixifan.com,PROXY -# > bilibili -# USER-AGENT,bili-universal,PROXY -# USER-AGENT,Bilibili*,PROXY -- DOMAIN-SUFFIX,acgvideo.com,PROXY -- DOMAIN-SUFFIX,bilibili.com,PROXY -- DOMAIN-SUFFIX,hdslb.com,PROXY -# > HunanTV -# USER-AGENT,MGTV*,PROXY -- DOMAIN-SUFFIX,hitv.com,PROXY -- DOMAIN-SUFFIX,hunantv.com,PROXY -- DOMAIN-SUFFIX,mgtv.com,PROXY -# > Migu -# USER-AGENT,MiguVideo*,PROXY -# USER-AGENT,%E5%92%AA%E5%92%95%E8%A7%86%E9%A2%91,PROXY -- DOMAIN-SUFFIX,cmvideo.cn,PROXY -- DOMAIN-SUFFIX,migu.cn,PROXY -- DOMAIN-SUFFIX,miguvideo.com,PROXY -# > iQiyi -# USER-AGENT,iQiYiPhoneVideo,PROXY -# USER-AGENT,PPStream,PROXY -# USER-AGENT,QIYIVideo,PROXY -# USER-AGENT,QYPlayer,PROXY -- DOMAIN-SUFFIX,iqiyi.com,PROXY -- DOMAIN-SUFFIX,iqiyipic.com,PROXY -- DOMAIN-SUFFIX,qy.net,PROXY -# > Sohu -- DOMAIN-SUFFIX,sohu.com,PROXY -- DOMAIN-SUFFIX,sohu.com.cn,PROXY -- DOMAIN-SUFFIX,itc.cn,PROXY -- DOMAIN-SUFFIX,v-56.com,PROXY -# > Tencent -# USER-AGENT,live4iphone*,PROXY -# USER-AGENT,qqlive4iphone*,PROXY -# USER-AGENT,TencentMidasConnect*,PROXY -- DOMAIN-SUFFIX,video.qq.com,PROXY -# > Youku -# USER-AGENT,Youku*,PROXY -# USER-AGENT,%E4%BC%98%E9%85%B7*,PROXY -- DOMAIN-SUFFIX,soku.com,PROXY -- DOMAIN-SUFFIX,youku.com,PROXY -- DOMAIN-SUFFIX,ykimg.com,PROXY - -# (Music) -# > Alibaba -# USER-AGENT,walkman*,PROXY -# USER-AGENT,xiami*,PROXY -- DOMAIN-SUFFIX,xiami.com,PROXY -- DOMAIN-SUFFIX,xiami.net,PROXY -# > Netease -# USER-AGENT,NeteaseMusic*,PROXY -# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,PROXY -- DOMAIN-SUFFIX,music.126.net,PROXY -- DOMAIN-SUFFIX,music.163.com,PROXY -# > Tencent -# USER-AGENT,MOO%E9%9F%B3%E4%B9%90*,PROXY -# USER-AGENT,QQ%E9%9F%B3%E4%B9%90,PROXY -- DOMAIN-SUFFIX,qqmusic.qq.com,PROXY -- DOMAIN-SUFFIX,y.qq.com,PROXY -- DOMAIN,aqqmusic.tc.qq.com,PROXY -# Kugou and Kuwo -- DOMAIN-SUFFIX,kugou.com,PROXY -# USER-AGENT,%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90*,PROXY -- DOMAIN-SUFFIX,kuwo.cn,PROXY -- DOMAIN-SUFFIX,koowo.com,PROXY -# > Baidu -# USER-AGENT,baiduyinyue,PROXY -- DOMAIN-SUFFIX,qianqian.com,PROXY - -- GEOIP,CN,PROXY - -- MATCH,DIRECT +Rule: +##source:ConnersHua_return +# (Video) +# AcFun +# USER-AGENT,AcFun*,PROXY +- DOMAIN-SUFFIX,acfun.cn,PROXY +- DOMAIN-SUFFIX,acfun.com,PROXY +- DOMAIN-SUFFIX,aixifan.com,PROXY +# > bilibili +# USER-AGENT,bili-universal,PROXY +# USER-AGENT,Bilibili*,PROXY +- DOMAIN-SUFFIX,acgvideo.com,PROXY +- DOMAIN-SUFFIX,bilibili.com,PROXY +- DOMAIN-SUFFIX,hdslb.com,PROXY +# > HunanTV +# USER-AGENT,MGTV*,PROXY +- DOMAIN-SUFFIX,hitv.com,PROXY +- DOMAIN-SUFFIX,hunantv.com,PROXY +- DOMAIN-SUFFIX,mgtv.com,PROXY +# > Migu +# USER-AGENT,MiguVideo*,PROXY +# USER-AGENT,%E5%92%AA%E5%92%95%E8%A7%86%E9%A2%91,PROXY +- DOMAIN-SUFFIX,cmvideo.cn,PROXY +- DOMAIN-SUFFIX,migu.cn,PROXY +- DOMAIN-SUFFIX,miguvideo.com,PROXY +# > iQiyi +# USER-AGENT,iQiYiPhoneVideo,PROXY +# USER-AGENT,PPStream,PROXY +# USER-AGENT,QIYIVideo,PROXY +# USER-AGENT,QYPlayer,PROXY +- DOMAIN-SUFFIX,iqiyi.com,PROXY +- DOMAIN-SUFFIX,iqiyipic.com,PROXY +- DOMAIN-SUFFIX,qy.net,PROXY +# > Sohu +- DOMAIN-SUFFIX,sohu.com,PROXY +- DOMAIN-SUFFIX,sohu.com.cn,PROXY +- DOMAIN-SUFFIX,itc.cn,PROXY +- DOMAIN-SUFFIX,v-56.com,PROXY +# > Tencent +# USER-AGENT,live4iphone*,PROXY +# USER-AGENT,qqlive4iphone*,PROXY +# USER-AGENT,TencentMidasConnect*,PROXY +- DOMAIN-SUFFIX,video.qq.com,PROXY +# > Youku +# USER-AGENT,Youku*,PROXY +# USER-AGENT,%E4%BC%98%E9%85%B7*,PROXY +- DOMAIN-SUFFIX,soku.com,PROXY +- DOMAIN-SUFFIX,youku.com,PROXY +- DOMAIN-SUFFIX,ykimg.com,PROXY + +# (Music) +# > Alibaba +# USER-AGENT,walkman*,PROXY +# USER-AGENT,xiami*,PROXY +- DOMAIN-SUFFIX,xiami.com,PROXY +- DOMAIN-SUFFIX,xiami.net,PROXY +# > Netease +# USER-AGENT,NeteaseMusic*,PROXY +# USER-AGENT,%E7%BD%91%E6%98%93%E4%BA%91%E9%9F%B3%E4%B9%90*,PROXY +- DOMAIN-SUFFIX,music.126.net,PROXY +- DOMAIN-SUFFIX,music.163.com,PROXY +# > Tencent +# USER-AGENT,MOO%E9%9F%B3%E4%B9%90*,PROXY +# USER-AGENT,QQ%E9%9F%B3%E4%B9%90,PROXY +- DOMAIN-SUFFIX,qqmusic.qq.com,PROXY +- DOMAIN-SUFFIX,y.qq.com,PROXY +- DOMAIN,aqqmusic.tc.qq.com,PROXY +# Kugou and Kuwo +- DOMAIN-SUFFIX,kugou.com,PROXY +# USER-AGENT,%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90*,PROXY +- DOMAIN-SUFFIX,kuwo.cn,PROXY +- DOMAIN-SUFFIX,koowo.com,PROXY +# > Baidu +# USER-AGENT,baiduyinyue,PROXY +- DOMAIN-SUFFIX,qianqian.com,PROXY + +- GEOIP,CN,PROXY + +- MATCH,DIRECT diff --git a/luci-app-openclash/files/etc/openclash/default.yaml b/luci-app-openclash/files/etc/openclash/default.yaml index 765c7f0ddd..3bd48e814f 100644 --- a/luci-app-openclash/files/etc/openclash/default.yaml +++ b/luci-app-openclash/files/etc/openclash/default.yaml @@ -1,165 +1,165 @@ -# Copyright (c) 2018 Dreamacro - -# port of HTTP -port: 7890 # 此项将被接管 - -# port of SOCKS5 -socks-port: 7891 # 此项将被接管 - -# redir port for Linux and macOS -redir-port: 7892 # 此项将被接管 - -allow-lan: true # 此项将被接管为true - -# Only applicable when setting allow-lan to true -# "*": bind all IP addresses -# 192.168.122.11: bind a single IPv4 address -# "[aaaa::a8aa:ff:fe09:57d8]": bind a single IPv6 address -bind-address: "*" # HTTP(S)\SOCKS5 监听地址,此项将被接管为all - -# Rule / Global/ Direct (default is Rule) -mode: Rule - -# set log level to stdout (default is info) -# info / warning / error / debug / silent -log-level: info - -# A RESTful API for clash -external-controller: 0.0.0.0:9090 # 此项将被接管 - -# you can put the static web resource (such as clash-dashboard) to a directory, and clash would serve in `${API}/ui` -# input is a relative path to the configuration directory or an absolute path -external-ui: "/usr/share/openclash/dashboard" # 此项将被接管 - -# Secret for RESTful API (Optional) -secret: '123456' # 此项将被接管 - -# experimental feature -experimental: - ignore-resolve-fail: true # ignore dns resolve fail, default value is true - -# authentication of local SOCKS5/HTTP(S) server -authentication: # 此项将被接管 - - "user1:pass1" - - "user2:pass2" - -dns: # 如订阅配置无包括此项的所有DNS设置,OpenClash将自动添加 - enable: true # set true to enable dns (default is false) # 此项将被接管为true - ipv6: false # default is false # 此项将被接管 - listen: 0.0.0.0:53 # 端口为53时将被接管为7874 - enhanced-mode: redir-host # or fake-ip # 此项将被接管 - fake-ip-range: 198.18.0.1/16 # if you don't know what it is, don't change it # 此项将被接管 -# experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com) -# static domain has a higher priority than wildcard domain (foo.example.com > *.example.com) -# NOTE: hosts don't work with `fake-ip` -# hosts: # 此项将被接管 -# '*.clash.dev': 127.0.0.1 -# 'alpha.clash.dev': '::1' - nameserver: - - 114.114.114.114 - - tls://dns.rubyfish.cn:853 # dns over tls - - https://1.1.1.1/dns-query # dns over https - fallback: # concurrent request with nameserver, fallback used when GEOIP country isn't CN - - tcp://1.1.1.1 - -# 以上设置您可直接覆盖到配置文件,无需更改 -# Openclash 不会对下方服务器设置进行任何更改,请确保设置正确 - -Proxy: # 此参数必须保留,不能删除 - -# shadowsocks -# The types of cipher are consistent with go-shadowsocks2 -# support AEAD_AES_128_GCM AEAD_AES_192_GCM AEAD_AES_256_GCM AEAD_CHACHA20_POLY1305 AES-128-CTR AES-192-CTR AES-256-CTR AES-128-CFB AES-192-CFB AES-256-CFB CHACHA20-IETF XCHACHA20 -# In addition to what go-shadowsocks2 supports, it also supports chacha20 rc4-md5 xchacha20-ietf-poly1305 -- { name: "ss1", type: ss, server: server, port: 443, cipher: AEAD_CHACHA20_POLY1305, password: "password", udp: true } - -# old obfs configuration remove after prerelease -- name: "ss2" - type: ss - server: server - port: 443 - cipher: AEAD_CHACHA20_POLY1305 - password: "password" - plugin: obfs - plugin-opts: - mode: tls # or http - # host: bing.com - -- name: "ss3" - type: ss - server: server - port: 443 - cipher: AEAD_CHACHA20_POLY1305 - password: "password" - plugin: v2ray-plugin - plugin-opts: - mode: websocket # no QUIC now - # tls: true # wss - # skip-cert-verify: true - # host: bing.com - # path: "/" - # headers: - # custom: value - -# vmess -# cipher support auto/aes-128-gcm/chacha20-poly1305/none -- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto } -# with tls -- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, tls: true } -# with tls and skip-cert-verify -- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, tls: true, skip-cert-verify: true } -# with ws-path and ws-headers -- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, network: ws, ws-path: /path, ws-headers: { Host: v2ray.com } } -# with ws + tls -- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, network: ws, ws-path: /path, tls: true } - -# socks5 -- { name: "socks", type: socks5, server: server, port: 443 } -# socks5 with authentication -- { name: "socks", type: socks5, server: server, port: 443, username: "username", password: "password" } -# with tls -- { name: "socks", type: socks5, server: server, port: 443, tls: true } -# with tls and skip-cert-verify -- { name: "socks", type: socks5, server: server, port: 443, tls: true, skip-cert-verify: true } - -# http -- { name: "http", type: http, server: server, port: 443 } -# http with authentication -- { name: "http", type: http, server: server, port: 443, username: "username", password: "password" } -# with tls (https) -- { name: "http", type: http, server: server, port: 443, tls: true } -# with tls (https) and skip-cert-verify -- { name: "http", type: http, server: server, port: 443, tls: true, skip-cert-verify: true } - -# Openclash 不会对下方策略组设置进行任何更改,请确保设置正确 - -Proxy Group: # 此参数必须保留,不能删除 - -# url-test select which proxy will be used by benchmarking speed to a URL. -- { name: "auto", type: url-test, proxies: ["ss1", "ss2", "vmess1"], url: "http://www.gstatic.com/generate_204", interval: 300 } - -# fallback select 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: ["ss1", "ss2", "vmess1"], url: "http://www.gstatic.com/generate_204", interval: 300 } - -# load-balance: The request of the same eTLD will be dial on the same proxy. -- { name: "load-balance", type: load-balance, proxies: ["ss1", "ss2", "vmess1"], url: "http://www.gstatic.com/generate_204", interval: 300 } - -# 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: ["ss1", "ss2", "vmess1", "auto"] } - -Rule: # 此参数必须保留,不能删除 -# 如果您将一直使用第三方规则,下方可以留空。 -- DOMAIN-SUFFIX,google.com,auto -- DOMAIN-KEYWORD,google,auto -- DOMAIN,google.com,auto -- DOMAIN-SUFFIX,ad.com,REJECT -- IP-CIDR,127.0.0.0/8,DIRECT -# rename SOURCE-IP-CIDR and would remove after prerelease -- SRC-IP-CIDR,192.168.1.201/32,DIRECT -- GEOIP,CN,DIRECT -- DST-PORT,80,DIRECT -- SRC-PORT,7777,DIRECT -# FINAL would remove after prerelease -# you also can use `FINAL,Proxy` or `FINAL,,Proxy` now +# Copyright (c) 2018 Dreamacro + +# port of HTTP +port: 7890 # 此项将被接管 + +# port of SOCKS5 +socks-port: 7891 # 此项将被接管 + +# redir port for Linux and macOS +redir-port: 7892 # 此项将被接管 + +allow-lan: true # 此项将被接管为true + +# Only applicable when setting allow-lan to true +# "*": bind all IP addresses +# 192.168.122.11: bind a single IPv4 address +# "[aaaa::a8aa:ff:fe09:57d8]": bind a single IPv6 address +bind-address: "*" # HTTP(S)\SOCKS5 监听地址,此项将被接管为all + +# Rule / Global/ Direct (default is Rule) +mode: Rule + +# set log level to stdout (default is info) +# info / warning / error / debug / silent +log-level: info + +# A RESTful API for clash +external-controller: 0.0.0.0:9090 # 此项将被接管 + +# you can put the static web resource (such as clash-dashboard) to a directory, and clash would serve in `${API}/ui` +# input is a relative path to the configuration directory or an absolute path +external-ui: "/usr/share/openclash/dashboard" # 此项将被接管 + +# Secret for RESTful API (Optional) +secret: '123456' # 此项将被接管 + +# experimental feature +experimental: + ignore-resolve-fail: true # ignore dns resolve fail, default value is true + +# authentication of local SOCKS5/HTTP(S) server +authentication: # 此项将被接管 + - "user1:pass1" + - "user2:pass2" + +dns: # 如订阅配置无包括此项的所有DNS设置,OpenClash将自动添加 + enable: true # set true to enable dns (default is false) # 此项将被接管为true + ipv6: false # default is false # 此项将被接管 + listen: 0.0.0.0:53 # 端口为53时将被接管为7874 + enhanced-mode: redir-host # or fake-ip # 此项将被接管 + fake-ip-range: 198.18.0.1/16 # if you don't know what it is, don't change it # 此项将被接管 +# experimental hosts, support wildcard (e.g. *.clash.dev Even *.foo.*.example.com) +# static domain has a higher priority than wildcard domain (foo.example.com > *.example.com) +# NOTE: hosts don't work with `fake-ip` +# hosts: # 此项将被接管 +# '*.clash.dev': 127.0.0.1 +# 'alpha.clash.dev': '::1' + nameserver: + - 114.114.114.114 + - tls://dns.rubyfish.cn:853 # dns over tls + - https://1.1.1.1/dns-query # dns over https + fallback: # concurrent request with nameserver, fallback used when GEOIP country isn't CN + - tcp://1.1.1.1 + +# 以上设置您可直接覆盖到配置文件,无需更改 +# Openclash 不会对下方服务器设置进行任何更改,请确保设置正确 + +Proxy: # 此参数必须保留,不能删除 + +# shadowsocks +# The types of cipher are consistent with go-shadowsocks2 +# support AEAD_AES_128_GCM AEAD_AES_192_GCM AEAD_AES_256_GCM AEAD_CHACHA20_POLY1305 AES-128-CTR AES-192-CTR AES-256-CTR AES-128-CFB AES-192-CFB AES-256-CFB CHACHA20-IETF XCHACHA20 +# In addition to what go-shadowsocks2 supports, it also supports chacha20 rc4-md5 xchacha20-ietf-poly1305 +- { name: "ss1", type: ss, server: server, port: 443, cipher: AEAD_CHACHA20_POLY1305, password: "password", udp: true } + +# old obfs configuration remove after prerelease +- name: "ss2" + type: ss + server: server + port: 443 + cipher: AEAD_CHACHA20_POLY1305 + password: "password" + plugin: obfs + plugin-opts: + mode: tls # or http + # host: bing.com + +- name: "ss3" + type: ss + server: server + port: 443 + cipher: AEAD_CHACHA20_POLY1305 + password: "password" + plugin: v2ray-plugin + plugin-opts: + mode: websocket # no QUIC now + # tls: true # wss + # skip-cert-verify: true + # host: bing.com + # path: "/" + # headers: + # custom: value + +# vmess +# cipher support auto/aes-128-gcm/chacha20-poly1305/none +- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto } +# with tls +- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, tls: true } +# with tls and skip-cert-verify +- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, tls: true, skip-cert-verify: true } +# with ws-path and ws-headers +- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, network: ws, ws-path: /path, ws-headers: { Host: v2ray.com } } +# with ws + tls +- { name: "vmess", type: vmess, server: server, port: 443, uuid: uuid, alterId: 32, cipher: auto, network: ws, ws-path: /path, tls: true } + +# socks5 +- { name: "socks", type: socks5, server: server, port: 443 } +# socks5 with authentication +- { name: "socks", type: socks5, server: server, port: 443, username: "username", password: "password" } +# with tls +- { name: "socks", type: socks5, server: server, port: 443, tls: true } +# with tls and skip-cert-verify +- { name: "socks", type: socks5, server: server, port: 443, tls: true, skip-cert-verify: true } + +# http +- { name: "http", type: http, server: server, port: 443 } +# http with authentication +- { name: "http", type: http, server: server, port: 443, username: "username", password: "password" } +# with tls (https) +- { name: "http", type: http, server: server, port: 443, tls: true } +# with tls (https) and skip-cert-verify +- { name: "http", type: http, server: server, port: 443, tls: true, skip-cert-verify: true } + +# Openclash 不会对下方策略组设置进行任何更改,请确保设置正确 + +Proxy Group: # 此参数必须保留,不能删除 + +# url-test select which proxy will be used by benchmarking speed to a URL. +- { name: "auto", type: url-test, proxies: ["ss1", "ss2", "vmess1"], url: "http://www.gstatic.com/generate_204", interval: 300 } + +# fallback select 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: ["ss1", "ss2", "vmess1"], url: "http://www.gstatic.com/generate_204", interval: 300 } + +# load-balance: The request of the same eTLD will be dial on the same proxy. +- { name: "load-balance", type: load-balance, proxies: ["ss1", "ss2", "vmess1"], url: "http://www.gstatic.com/generate_204", interval: 300 } + +# 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: ["ss1", "ss2", "vmess1", "auto"] } + +Rule: # 此参数必须保留,不能删除 +# 如果您将一直使用第三方规则,下方可以留空。 +- DOMAIN-SUFFIX,google.com,auto +- DOMAIN-KEYWORD,google,auto +- DOMAIN,google.com,auto +- DOMAIN-SUFFIX,ad.com,REJECT +- IP-CIDR,127.0.0.0/8,DIRECT +# rename SOURCE-IP-CIDR and would remove after prerelease +- SRC-IP-CIDR,192.168.1.201/32,DIRECT +- GEOIP,CN,DIRECT +- DST-PORT,80,DIRECT +- SRC-PORT,7777,DIRECT +# FINAL would remove after prerelease +# you also can use `FINAL,Proxy` or `FINAL,,Proxy` now - MATCH,auto \ No newline at end of file diff --git a/luci-app-openclash/files/etc/openclash/lhie1.yaml b/luci-app-openclash/files/etc/openclash/lhie1.yaml index 8b370a4f37..0a60633c33 100644 --- a/luci-app-openclash/files/etc/openclash/lhie1.yaml +++ b/luci-app-openclash/files/etc/openclash/lhie1.yaml @@ -1,583 +1,583 @@ -Rule: -##source:lhie1 -# (GlobalTV) -# > ABC -- DOMAIN-SUFFIX,edgedatg.com,GlobalTV -- DOMAIN-SUFFIX,go.com,GlobalTV - -# > AbemaTV -- DOMAIN,linear-abematv.akamaized.net,GlobalTV -- DOMAIN-SUFFIX,abema.io,GlobalTV -- DOMAIN-SUFFIX,abema.tv,GlobalTV -- DOMAIN-SUFFIX,akamaized.net,GlobalTV -- DOMAIN-SUFFIX,ameba.jp,GlobalTV -- DOMAIN-SUFFIX,hayabusa.io,GlobalTV - -# > Amazon Prime Video -- DOMAIN-SUFFIX,aiv-cdn.net,GlobalTV -- DOMAIN-SUFFIX,amazonaws.com,GlobalTV -- DOMAIN-SUFFIX,amazonvideo.com,GlobalTV -- DOMAIN-SUFFIX,llnwd.net,GlobalTV - -# > Bahamut -- DOMAIN-SUFFIX,bahamut.com.tw,GlobalTV -- DOMAIN-SUFFIX,gamer.com.tw,GlobalTV -- DOMAIN-SUFFIX,hinet.net,GlobalTV - -# > BBC -- DOMAIN-KEYWORD,bbcfmt,GlobalTV -- DOMAIN-KEYWORD,co.uk,GlobalTV -- DOMAIN-KEYWORD,uk-live,GlobalTV -- DOMAIN-SUFFIX,bbc.co,GlobalTV -- DOMAIN-SUFFIX,bbc.co.uk,GlobalTV -- DOMAIN-SUFFIX,bbc.com,GlobalTV -- DOMAIN-SUFFIX,bbci.co,GlobalTV -- DOMAIN-SUFFIX,bbci.co.uk,GlobalTV - -# > CHOCO TV -- DOMAIN-SUFFIX,chocotv.com.tw,GlobalTV - -# > Epicgames -- DOMAIN-KEYWORD,epicgames,GlobalTV -- DOMAIN-SUFFIX,helpshift.com,GlobalTV - -# > Fox+ -- DOMAIN-KEYWORD,foxplus,GlobalTV -- DOMAIN-SUFFIX,config.fox.com,GlobalTV -- DOMAIN-SUFFIX,emome.net,GlobalTV -- DOMAIN-SUFFIX,fox.com,GlobalTV -- DOMAIN-SUFFIX,foxdcg.com,GlobalTV -- DOMAIN-SUFFIX,foxnow.com,GlobalTV -- DOMAIN-SUFFIX,foxplus.com,GlobalTV -- DOMAIN-SUFFIX,foxplay.com,GlobalTV -- DOMAIN-SUFFIX,ipinfo.io,GlobalTV -- DOMAIN-SUFFIX,mstage.io,GlobalTV -- DOMAIN-SUFFIX,now.com,GlobalTV -- DOMAIN-SUFFIX,theplatform.com,GlobalTV -- DOMAIN-SUFFIX,urlload.net,GlobalTV - -# > HBO && HBO Go -- DOMAIN-SUFFIX,execute-api.ap-southeast-1.amazonaws.com,GlobalTV -- DOMAIN-SUFFIX,hbo.com,GlobalTV -- DOMAIN-SUFFIX,hboasia.com,GlobalTV -- DOMAIN-SUFFIX,hbogo.com,GlobalTV -- DOMAIN-SUFFIX,hbogoasia.hk,GlobalTV - -# > Hulu -- DOMAIN-SUFFIX,happyon.jp,GlobalTV -- DOMAIN-SUFFIX,hulu.com,GlobalTV -- DOMAIN-SUFFIX,huluim.com,GlobalTV -- DOMAIN-SUFFIX,hulustream.com,GlobalTV - -# > Imkan -- DOMAIN-SUFFIX,imkan.tv,GlobalTV - -# > JOOX -- DOMAIN-SUFFIX,joox.com,GlobalTV - -# > MytvSUPER -- DOMAIN-KEYWORD,nowtv100,GlobalTV -- DOMAIN-KEYWORD,rthklive,GlobalTV -- DOMAIN-SUFFIX,mytvsuper.com,GlobalTV -- DOMAIN-SUFFIX,tvb.com,GlobalTV - -# > Netflix -- DOMAIN-SUFFIX,netflix.com,GlobalTV -- DOMAIN-SUFFIX,netflix.net,GlobalTV -- DOMAIN-SUFFIX,nflxext.com,GlobalTV -- DOMAIN-SUFFIX,nflximg.com,GlobalTV -- DOMAIN-SUFFIX,nflximg.net,GlobalTV -- DOMAIN-SUFFIX,nflxso.net,GlobalTV -- DOMAIN-SUFFIX,nflxvideo.net,GlobalTV - -# > Pandora -- DOMAIN-SUFFIX,pandora.com,GlobalTV - -# > Sky GO -- DOMAIN-SUFFIX,sky.com,GlobalTV -- DOMAIN-SUFFIX,skygo.co.nz,GlobalTV - -# > Spotify -- DOMAIN-KEYWORD,spotify,GlobalTV -- DOMAIN-SUFFIX,scdn.co,GlobalTV -- DOMAIN-SUFFIX,spoti.fi,GlobalTV - -# > viuTV -- DOMAIN-SUFFIX,viu.tv,GlobalTV - -# > Youtube -- DOMAIN-KEYWORD,youtube,GlobalTV -- DOMAIN-SUFFIX,googlevideo.com,GlobalTV -- DOMAIN-SUFFIX,gvt2.com,GlobalTV -- DOMAIN-SUFFIX,youtu.be,GlobalTV - -# (AsianTV) -# > Bilibili -- DOMAIN-KEYWORD,bilibili,AsianTV -- DOMAIN-SUFFIX,acg.tv,AsianTV -- DOMAIN-SUFFIX,acgvideo.com,AsianTV -- DOMAIN-SUFFIX,b23.tv,AsianTV -- DOMAIN-SUFFIX,biliapi.com,AsianTV -- DOMAIN-SUFFIX,biliapi.net,AsianTV -- DOMAIN-SUFFIX,bilibili.com,AsianTV -- DOMAIN-SUFFIX,biligame.com,AsianTV -- DOMAIN-SUFFIX,biligame.net,AsianTV -- DOMAIN-SUFFIX,hdslb.com,AsianTV -- DOMAIN-SUFFIX,im9.com,AsianTV - -# > IQIYI -- DOMAIN-KEYWORD,qiyi,AsianTV -- DOMAIN-SUFFIX,qy.net,AsianTV - -# > letv -- DOMAIN-SUFFIX,api.mob.app.letv.com,AsianTV - -# > NeteaseMusic -- DOMAIN-SUFFIX,163yun.com,AsianTV -- DOMAIN-SUFFIX,music.126.net,AsianTV -- DOMAIN-SUFFIX,music.163.com,AsianTV - -# > Tencent Video -- DOMAIN-SUFFIX,vv.video.qq.com,AsianTV - -# > 国内网站 -- DOMAIN-SUFFIX,cn,Domestic -- DOMAIN-KEYWORD,-cn,Domestic - -- DOMAIN-SUFFIX,126.com,Domestic -- DOMAIN-SUFFIX,126.net,Domestic -- DOMAIN-SUFFIX,127.net,Domestic -- DOMAIN-SUFFIX,163.com,Domestic -- DOMAIN-SUFFIX,360buyimg.com,Domestic -- DOMAIN-SUFFIX,36kr.com,Domestic -- DOMAIN-SUFFIX,acfun.tv,Domestic -- DOMAIN-SUFFIX,air-matters.com,Domestic -- DOMAIN-SUFFIX,aixifan.com,Domestic -- DOMAIN-SUFFIX,akamaized.net,Domestic -- DOMAIN-KEYWORD,alicdn,Domestic -- DOMAIN-KEYWORD,alipay,Domestic -- DOMAIN-KEYWORD,taobao,Domestic -- DOMAIN-SUFFIX,amap.com,Domestic -- DOMAIN-SUFFIX,autonavi.com,Domestic -- DOMAIN-KEYWORD,baidu,Domestic -- DOMAIN-SUFFIX,bdimg.com,Domestic -- DOMAIN-SUFFIX,bdstatic.com,Domestic -- DOMAIN-SUFFIX,bilibili.com,Domestic -- DOMAIN-SUFFIX,caiyunapp.com,Domestic -- DOMAIN-SUFFIX,clouddn.com,Domestic -- DOMAIN-SUFFIX,cnbeta.com,Domestic -- DOMAIN-SUFFIX,cnbetacdn.com,Domestic -- DOMAIN-SUFFIX,cootekservice.com,Domestic -- DOMAIN-SUFFIX,csdn.net,Domestic -- DOMAIN-SUFFIX,ctrip.com,Domestic -- DOMAIN-SUFFIX,dgtle.com,Domestic -- DOMAIN-SUFFIX,dianping.com,Domestic -- DOMAIN-SUFFIX,douban.com,Domestic -- DOMAIN-SUFFIX,doubanio.com,Domestic -- DOMAIN-SUFFIX,duokan.com,Domestic -- DOMAIN-SUFFIX,easou.com,Domestic -- DOMAIN-SUFFIX,ele.me,Domestic -- DOMAIN-SUFFIX,feng.com,Domestic -- DOMAIN-SUFFIX,fir.im,Domestic -- DOMAIN-SUFFIX,frdic.com,Domestic -- DOMAIN-SUFFIX,g-cores.com,Domestic -- DOMAIN-SUFFIX,godic.net,Domestic -- DOMAIN-SUFFIX,gtimg.com,Domestic -- DOMAIN,cdn.hockeyapp.net,Domestic -- DOMAIN-SUFFIX,hongxiu.com,Domestic -- DOMAIN-SUFFIX,hxcdn.net,Domestic -- DOMAIN-SUFFIX,iciba.com,Domestic -- DOMAIN-SUFFIX,ifeng.com,Domestic -- DOMAIN-SUFFIX,ifengimg.com,Domestic -- DOMAIN-SUFFIX,ipip.net,Domestic -- DOMAIN-SUFFIX,iqiyi.com,Domestic -- DOMAIN-SUFFIX,jd.com,Domestic -- DOMAIN-SUFFIX,jianshu.com,Domestic -- DOMAIN-SUFFIX,knewone.com,Domestic -- DOMAIN-SUFFIX,le.com,Domestic -- DOMAIN-SUFFIX,lecloud.com,Domestic -- DOMAIN-SUFFIX,lemicp.com,Domestic -- DOMAIN-SUFFIX,licdn.com,Domestic -- DOMAIN-SUFFIX,linkedin.com,Domestic -- DOMAIN-SUFFIX,luoo.net,Domestic -- DOMAIN-SUFFIX,meituan.com,Domestic -- DOMAIN-SUFFIX,meituan.net,Domestic -- DOMAIN-SUFFIX,mi.com,Domestic -- DOMAIN-SUFFIX,miaopai.com,Domestic -- DOMAIN-SUFFIX,microsoft.com,Domestic -- DOMAIN-SUFFIX,microsoftonline.com,Domestic -- DOMAIN-SUFFIX,miui.com,Domestic -- DOMAIN-SUFFIX,miwifi.com,Domestic -- DOMAIN-SUFFIX,mob.com,Domestic -- DOMAIN-SUFFIX,netease.com,Domestic -- DOMAIN-SUFFIX,office.com,Domestic -- DOMAIN-SUFFIX,office365.com,Domestic -- DOMAIN-KEYWORD,officecdn,Domestic -- DOMAIN-SUFFIX,oschina.net,Domestic -- DOMAIN-SUFFIX,ppsimg.com,Domestic -- DOMAIN-SUFFIX,pstatp.com,Domestic -- DOMAIN-SUFFIX,qcloud.com,Domestic -- DOMAIN-SUFFIX,qdaily.com,Domestic -- DOMAIN-SUFFIX,qdmm.com,Domestic -- DOMAIN-SUFFIX,qhimg.com,Domestic -- DOMAIN-SUFFIX,qhres.com,Domestic -- DOMAIN-SUFFIX,qidian.com,Domestic -- DOMAIN-SUFFIX,qihucdn.com,Domestic -- DOMAIN-SUFFIX,qiniu.com,Domestic -- DOMAIN-SUFFIX,qiniucdn.com,Domestic -- DOMAIN-SUFFIX,qiyipic.com,Domestic -- DOMAIN-SUFFIX,qq.com,Domestic -- DOMAIN-SUFFIX,qqurl.com,Domestic -- DOMAIN-SUFFIX,rarbg.to,Domestic -- DOMAIN-SUFFIX,ruguoapp.com,Domestic -- DOMAIN-SUFFIX,segmentfault.com,Domestic -- DOMAIN-SUFFIX,sinaapp.com,Domestic -- DOMAIN-SUFFIX,smzdm.com,Domestic -- DOMAIN-SUFFIX,snapdrop.net,Domestic -- DOMAIN-SUFFIX,sogou.com,Domestic -- DOMAIN-SUFFIX,sogoucdn.com,Domestic -- DOMAIN-SUFFIX,sohu.com,Domestic -- DOMAIN-SUFFIX,soku.com,Domestic -- DOMAIN-SUFFIX,sspai.com,Domestic -- DOMAIN-SUFFIX,suning.com,Domestic -- DOMAIN-SUFFIX,taobao.com,Domestic -- DOMAIN-SUFFIX,tencent.com,Domestic -- DOMAIN-SUFFIX,tenpay.com,Domestic -- DOMAIN-SUFFIX,tianyancha.com,Domestic -- DOMAIN-SUFFIX,tmall.com,Domestic -- DOMAIN-SUFFIX,tudou.com,Domestic -- DOMAIN-SUFFIX,umetrip.com,Domestic -- DOMAIN-SUFFIX,upaiyun.com,Domestic -- DOMAIN-SUFFIX,upyun.com,Domestic -- DOMAIN-SUFFIX,veryzhun.com,Domestic -- DOMAIN-SUFFIX,weather.com,Domestic -- DOMAIN-SUFFIX,weibo.com,Domestic -- DOMAIN-SUFFIX,xiami.com,Domestic -- DOMAIN-SUFFIX,xiami.net,Domestic -- DOMAIN-SUFFIX,xiaomicp.com,Domestic -- DOMAIN-SUFFIX,ximalaya.com,Domestic -- DOMAIN-SUFFIX,xmcdn.com,Domestic -- DOMAIN-SUFFIX,xunlei.com,Domestic -- DOMAIN-SUFFIX,yhd.com,Domestic -- DOMAIN-SUFFIX,yihaodianimg.com,Domestic -- DOMAIN-SUFFIX,yinxiang.com,Domestic -- DOMAIN-SUFFIX,ykimg.com,Domestic -- DOMAIN-SUFFIX,youdao.com,Domestic -- DOMAIN-SUFFIX,youku.com,Domestic -- DOMAIN-SUFFIX,zealer.com,Domestic -- DOMAIN-SUFFIX,zhihu.com,Domestic -- DOMAIN-SUFFIX,zhimg.com,Domestic -- DOMAIN-SUFFIX,zimuzu.tv,Domestic - -# > 抗 DNS 污染 -- DOMAIN-KEYWORD,amazon,Proxy -- DOMAIN-KEYWORD,google,Proxy -- DOMAIN-KEYWORD,gmail,Proxy -- DOMAIN-KEYWORD,youtube,Proxy -- DOMAIN-KEYWORD,facebook,Proxy -- DOMAIN-SUFFIX,fb.me,Proxy -- DOMAIN-SUFFIX,fbcdn.net,Proxy -- DOMAIN-KEYWORD,twitter,Proxy -- DOMAIN-KEYWORD,instagram,Proxy -- DOMAIN-KEYWORD,dropbox,Proxy -- DOMAIN-SUFFIX,twimg.com,Proxy -- DOMAIN-KEYWORD,blogspot,Proxy -- DOMAIN-SUFFIX,youtu.be,Proxy -- DOMAIN-KEYWORD,whatsapp,Proxy - -# > Speedtest -- DOMAIN-KEYWORD,speedtest,Proxy -- DOMAIN-SUFFIX,ooklaserver.net,Proxy - -# > 国外网站 -- DOMAIN-SUFFIX,9to5mac.com,Proxy -- DOMAIN-SUFFIX,abpchina.org,Proxy -- DOMAIN-SUFFIX,adblockplus.org,Proxy -- DOMAIN-SUFFIX,adobe.com,Proxy -- DOMAIN-SUFFIX,alfredapp.com,Proxy -- DOMAIN-SUFFIX,amplitude.com,Proxy -- DOMAIN-SUFFIX,ampproject.org,Proxy -- DOMAIN-SUFFIX,android.com,Proxy -- DOMAIN-SUFFIX,angularjs.org,Proxy -- DOMAIN-SUFFIX,aolcdn.com,Proxy -- DOMAIN-SUFFIX,apkpure.com,Proxy -- DOMAIN-SUFFIX,appledaily.com,Proxy -- DOMAIN-SUFFIX,appshopper.com,Proxy -- DOMAIN-SUFFIX,appspot.com,Proxy -- DOMAIN-SUFFIX,arcgis.com,Proxy -- DOMAIN-SUFFIX,archive.org,Proxy -- DOMAIN-SUFFIX,armorgames.com,Proxy -- DOMAIN-SUFFIX,aspnetcdn.com,Proxy -- DOMAIN-SUFFIX,att.com,Proxy -- DOMAIN-SUFFIX,awsstatic.com,Proxy -- DOMAIN-SUFFIX,azureedge.net,Proxy -- DOMAIN-SUFFIX,azurewebsites.net,Proxy -- DOMAIN-SUFFIX,bing.com,Proxy -- DOMAIN-SUFFIX,bintray.com,Proxy -- DOMAIN-SUFFIX,bit.com,Proxy -- DOMAIN-SUFFIX,bit.ly,Proxy -- DOMAIN-SUFFIX,bitbucket.org,Proxy -- DOMAIN-SUFFIX,bjango.com,Proxy -- DOMAIN-SUFFIX,bkrtx.com,Proxy -- DOMAIN-SUFFIX,blog.com,Proxy -- DOMAIN-SUFFIX,blogcdn.com,Proxy -- DOMAIN-SUFFIX,blogger.com,Proxy -- DOMAIN-SUFFIX,blogsmithmedia.com,Proxy -- DOMAIN-SUFFIX,blogspot.com,Proxy -- DOMAIN-SUFFIX,blogspot.hk,Proxy -- DOMAIN-SUFFIX,bloomberg.com,Proxy -- DOMAIN-SUFFIX,box.com,Proxy -- DOMAIN-SUFFIX,box.net,Proxy -- DOMAIN-SUFFIX,cachefly.net,Proxy -- DOMAIN-SUFFIX,chromium.org,Proxy -- DOMAIN-SUFFIX,cl.ly,Proxy -- DOMAIN-SUFFIX,cloudflare.com,Proxy -- DOMAIN-SUFFIX,cloudfront.net,Proxy -- DOMAIN-SUFFIX,cloudmagic.com,Proxy -- DOMAIN-SUFFIX,cmail19.com,Proxy -- DOMAIN-SUFFIX,cnet.com,Proxy -- DOMAIN-SUFFIX,cocoapods.org,Proxy -- DOMAIN-SUFFIX,comodoca.com,Proxy -- DOMAIN-SUFFIX,crashlytics.com,Proxy -- DOMAIN-SUFFIX,culturedcode.com,Proxy -- DOMAIN-SUFFIX,d.pr,Proxy -- DOMAIN-SUFFIX,danilo.to,Proxy -- DOMAIN-SUFFIX,dayone.me,Proxy -- DOMAIN-SUFFIX,db.tt,Proxy -- DOMAIN-SUFFIX,deskconnect.com,Proxy -- DOMAIN-SUFFIX,disq.us,Proxy -- DOMAIN-SUFFIX,disqus.com,Proxy -- DOMAIN-SUFFIX,disquscdn.com,Proxy -- DOMAIN-SUFFIX,dnsimple.com,Proxy -- DOMAIN-SUFFIX,docker.com,Proxy -- DOMAIN-SUFFIX,dribbble.com,Proxy -- DOMAIN-SUFFIX,droplr.com,Proxy -- DOMAIN-SUFFIX,duckduckgo.com,Proxy -- DOMAIN-SUFFIX,dueapp.com,Proxy -- DOMAIN-SUFFIX,dytt8.net,Proxy -- DOMAIN-SUFFIX,edgecastcdn.net,Proxy -- DOMAIN-SUFFIX,edgekey.net,Proxy -- DOMAIN-SUFFIX,edgesuite.net,Proxy -- DOMAIN-SUFFIX,engadget.com,Proxy -- DOMAIN-SUFFIX,entrust.net,Proxy -- DOMAIN-SUFFIX,eurekavpt.com,Proxy -- DOMAIN-SUFFIX,evernote.com,Proxy -- DOMAIN-SUFFIX,fabric.io,Proxy -- DOMAIN-SUFFIX,fast.com,Proxy -- DOMAIN-SUFFIX,fastly.net,Proxy -- DOMAIN-SUFFIX,fc2.com,Proxy -- DOMAIN-SUFFIX,feedburner.com,Proxy -- DOMAIN-SUFFIX,feedly.com,Proxy -- DOMAIN-SUFFIX,feedsportal.com,Proxy -- DOMAIN-SUFFIX,fiftythree.com,Proxy -- DOMAIN-SUFFIX,firebaseio.com,Proxy -- DOMAIN-SUFFIX,flexibits.com,Proxy -- DOMAIN-SUFFIX,flickr.com,Proxy -- DOMAIN-SUFFIX,flipboard.com,Proxy -- DOMAIN-SUFFIX,g.co,Proxy -- DOMAIN-SUFFIX,gabia.net,Proxy -- DOMAIN-SUFFIX,geni.us,Proxy -- DOMAIN-SUFFIX,gfx.ms,Proxy -- DOMAIN-SUFFIX,ggpht.com,Proxy -- DOMAIN-SUFFIX,ghostnoteapp.com,Proxy -- DOMAIN-SUFFIX,git.io,Proxy -- DOMAIN-KEYWORD,github,Proxy -- DOMAIN-SUFFIX,globalsign.com,Proxy -- DOMAIN-SUFFIX,gmodules.com,Proxy -- DOMAIN-SUFFIX,godaddy.com,Proxy -- DOMAIN-SUFFIX,golang.org,Proxy -- DOMAIN-SUFFIX,gongm.in,Proxy -- DOMAIN-SUFFIX,goo.gl,Proxy -- DOMAIN-SUFFIX,goodreaders.com,Proxy -- DOMAIN-SUFFIX,goodreads.com,Proxy -- DOMAIN-SUFFIX,gravatar.com,Proxy -- DOMAIN-SUFFIX,gstatic.com,Proxy -- DOMAIN-SUFFIX,gvt0.com,Proxy -- DOMAIN-SUFFIX,hockeyapp.net,Proxy -- DOMAIN-SUFFIX,hotmail.com,Proxy -- DOMAIN-SUFFIX,icons8.com,Proxy -- DOMAIN-SUFFIX,ifixit.com,Proxy -- DOMAIN-SUFFIX,ift.tt,Proxy -- DOMAIN-SUFFIX,ifttt.com,Proxy -- DOMAIN-SUFFIX,iherb.com,Proxy -- DOMAIN-SUFFIX,imageshack.us,Proxy -- DOMAIN-SUFFIX,img.ly,Proxy -- DOMAIN-SUFFIX,imgur.com,Proxy -- DOMAIN-SUFFIX,imore.com,Proxy -- DOMAIN-SUFFIX,instapaper.com,Proxy -- DOMAIN-SUFFIX,ipn.li,Proxy -- DOMAIN-SUFFIX,is.gd,Proxy -- DOMAIN-SUFFIX,issuu.com,Proxy -- DOMAIN-SUFFIX,itgonglun.com,Proxy -- DOMAIN-SUFFIX,itun.es,Proxy -- DOMAIN-SUFFIX,ixquick.com,Proxy -- DOMAIN-SUFFIX,j.mp,Proxy -- DOMAIN-SUFFIX,js.revsci.net,Proxy -- DOMAIN-SUFFIX,jshint.com,Proxy -- DOMAIN-SUFFIX,jtvnw.net,Proxy -- DOMAIN-SUFFIX,justgetflux.com,Proxy -- DOMAIN-SUFFIX,kat.cr,Proxy -- DOMAIN-SUFFIX,klip.me,Proxy -- DOMAIN-SUFFIX,libsyn.com,Proxy -- DOMAIN-SUFFIX,linode.com,Proxy -- DOMAIN-SUFFIX,lithium.com,Proxy -- DOMAIN-SUFFIX,littlehj.com,Proxy -- DOMAIN-SUFFIX,live.com,Proxy -- DOMAIN-SUFFIX,live.net,Proxy -- DOMAIN-SUFFIX,livefilestore.com,Proxy -- DOMAIN-SUFFIX,llnwd.net,Proxy -- DOMAIN-SUFFIX,macid.co,Proxy -- DOMAIN-SUFFIX,macromedia.com,Proxy -- DOMAIN-SUFFIX,macrumors.com,Proxy -- DOMAIN-SUFFIX,mashable.com,Proxy -- DOMAIN-SUFFIX,mathjax.org,Proxy -- DOMAIN-SUFFIX,medium.com,Proxy -- DOMAIN-SUFFIX,mega.co.nz,Proxy -- DOMAIN-SUFFIX,mega.nz,Proxy -- DOMAIN-SUFFIX,megaupload.com,Proxy -- DOMAIN-SUFFIX,microsofttranslator.com,Proxy -- DOMAIN-SUFFIX,mindnode.com,Proxy -- DOMAIN-SUFFIX,mobile01.com,Proxy -- DOMAIN-SUFFIX,modmyi.com,Proxy -- DOMAIN-SUFFIX,msedge.net,Proxy -- DOMAIN-SUFFIX,myfontastic.com,Proxy -- DOMAIN-SUFFIX,name.com,Proxy -- DOMAIN-SUFFIX,nextmedia.com,Proxy -- DOMAIN-SUFFIX,nsstatic.net,Proxy -- DOMAIN-SUFFIX,nssurge.com,Proxy -- DOMAIN-SUFFIX,nyt.com,Proxy -- DOMAIN-SUFFIX,nytimes.com,Proxy -- DOMAIN-SUFFIX,omnigroup.com,Proxy -- DOMAIN-SUFFIX,onedrive.com,Proxy -- DOMAIN-SUFFIX,onenote.com,Proxy -- DOMAIN-SUFFIX,ooyala.com,Proxy -- DOMAIN-SUFFIX,openvpn.net,Proxy -- DOMAIN-SUFFIX,openwrt.org,Proxy -- DOMAIN-SUFFIX,orkut.com,Proxy -- DOMAIN-SUFFIX,osxdaily.com,Proxy -- DOMAIN-SUFFIX,outlook.com,Proxy -- DOMAIN-SUFFIX,ow.ly,Proxy -- DOMAIN-SUFFIX,paddleapi.com,Proxy -- DOMAIN-SUFFIX,parallels.com,Proxy -- DOMAIN-SUFFIX,parse.com,Proxy -- DOMAIN-SUFFIX,pdfexpert.com,Proxy -- DOMAIN-SUFFIX,periscope.tv,Proxy -- DOMAIN-SUFFIX,pinboard.in,Proxy -- DOMAIN-SUFFIX,pinterest.com,Proxy -- DOMAIN-SUFFIX,pixelmator.com,Proxy -- DOMAIN-SUFFIX,pixiv.net,Proxy -- DOMAIN-SUFFIX,playpcesor.com,Proxy -- DOMAIN-SUFFIX,playstation.com,Proxy -- DOMAIN-SUFFIX,playstation.com.hk,Proxy -- DOMAIN-SUFFIX,playstation.net,Proxy -- DOMAIN-SUFFIX,playstationnetwork.com,Proxy -- DOMAIN-SUFFIX,pushwoosh.com,Proxy -- DOMAIN-SUFFIX,rime.im,Proxy -- DOMAIN-SUFFIX,servebom.com,Proxy -- DOMAIN-SUFFIX,sfx.ms,Proxy -- DOMAIN-SUFFIX,shadowsocks.org,Proxy -- DOMAIN-SUFFIX,sharethis.com,Proxy -- DOMAIN-SUFFIX,shazam.com,Proxy -- DOMAIN-SUFFIX,skype.com,Proxy -- DOMAIN-SUFFIX,smartdnsProxy.com,Proxy -- DOMAIN-SUFFIX,smartmailcloud.com,Proxy -- DOMAIN-SUFFIX,sndcdn.com,Proxy -- DOMAIN-SUFFIX,sony.com,Proxy -- DOMAIN-SUFFIX,soundcloud.com,Proxy -- DOMAIN-SUFFIX,sourceforge.net,Proxy -- DOMAIN-SUFFIX,spotify.com,Proxy -- DOMAIN-SUFFIX,squarespace.com,Proxy -- DOMAIN-SUFFIX,sstatic.net,Proxy -- DOMAIN-SUFFIX,st.luluku.pw,Proxy -- DOMAIN-SUFFIX,stackoverflow.com,Proxy -- DOMAIN-SUFFIX,startpage.com,Proxy -- DOMAIN-SUFFIX,staticflickr.com,Proxy -- DOMAIN-SUFFIX,steamcommunity.com,Proxy -- DOMAIN-SUFFIX,symauth.com,Proxy -- DOMAIN-SUFFIX,symcb.com,Proxy -- DOMAIN-SUFFIX,symcd.com,Proxy -- DOMAIN-SUFFIX,tapbots.com,Proxy -- DOMAIN-SUFFIX,tapbots.net,Proxy -- DOMAIN-SUFFIX,tdesktop.com,Proxy -- DOMAIN-SUFFIX,techcrunch.com,Proxy -- DOMAIN-SUFFIX,techsmith.com,Proxy -- DOMAIN-SUFFIX,thepiratebay.org,Proxy -- DOMAIN-SUFFIX,theverge.com,Proxy -- DOMAIN-SUFFIX,time.com,Proxy -- DOMAIN-SUFFIX,timeinc.net,Proxy -- DOMAIN-SUFFIX,tiny.cc,Proxy -- DOMAIN-SUFFIX,tinypic.com,Proxy -- DOMAIN-SUFFIX,tmblr.co,Proxy -- DOMAIN-SUFFIX,todoist.com,Proxy -- DOMAIN-SUFFIX,trello.com,Proxy -- DOMAIN-SUFFIX,trustasiassl.com,Proxy -- DOMAIN-SUFFIX,tumblr.co,Proxy -- DOMAIN-SUFFIX,tumblr.com,Proxy -- DOMAIN-SUFFIX,tweetdeck.com,Proxy -- DOMAIN-SUFFIX,tweetmarker.net,Proxy -- DOMAIN-SUFFIX,twitch.tv,Proxy -- DOMAIN-SUFFIX,txmblr.com,Proxy -- DOMAIN-SUFFIX,typekit.net,Proxy -- DOMAIN-SUFFIX,ubertags.com,Proxy -- DOMAIN-SUFFIX,ublock.org,Proxy -- DOMAIN-SUFFIX,ubnt.com,Proxy -- DOMAIN-SUFFIX,ulyssesapp.com,Proxy -- DOMAIN-SUFFIX,urchin.com,Proxy -- DOMAIN-SUFFIX,usertrust.com,Proxy -- DOMAIN-SUFFIX,v.gd,Proxy -- DOMAIN-SUFFIX,v2ex.com,Proxy -- DOMAIN-SUFFIX,vimeo.com,Proxy -- DOMAIN-SUFFIX,vimeocdn.com,Proxy -- DOMAIN-SUFFIX,vine.co,Proxy -- DOMAIN-SUFFIX,vivaldi.com,Proxy -- DOMAIN-SUFFIX,vox-cdn.com,Proxy -- DOMAIN-SUFFIX,vsco.co,Proxy -- DOMAIN-SUFFIX,vultr.com,Proxy -- DOMAIN-SUFFIX,w.org,Proxy -- DOMAIN-SUFFIX,w3schools.com,Proxy -- DOMAIN-SUFFIX,webtype.com,Proxy -- DOMAIN-SUFFIX,wikiwand.com,Proxy -- DOMAIN-SUFFIX,wikileaks.org,Proxy -- DOMAIN-SUFFIX,wikimedia.org,Proxy -- DOMAIN-SUFFIX,wikipedia.com,Proxy -- DOMAIN-SUFFIX,wikipedia.org,Proxy -- DOMAIN-SUFFIX,windows.com,Proxy -- DOMAIN-SUFFIX,windows.net,Proxy -- DOMAIN-SUFFIX,wire.com,Proxy -- DOMAIN-SUFFIX,wordpress.com,Proxy -- DOMAIN-SUFFIX,workflowy.com,Proxy -- DOMAIN-SUFFIX,wp.com,Proxy -- DOMAIN-SUFFIX,wsj.com,Proxy -- DOMAIN-SUFFIX,wsj.net,Proxy -- DOMAIN-SUFFIX,xda-developers.com,Proxy -- DOMAIN-SUFFIX,xeeno.com,Proxy -- DOMAIN-SUFFIX,xiti.com,Proxy -- DOMAIN-SUFFIX,yahoo.com,Proxy -- DOMAIN-SUFFIX,yimg.com,Proxy -- DOMAIN-SUFFIX,ying.com,Proxy -- DOMAIN-SUFFIX,yoyo.org,Proxy -- DOMAIN-SUFFIX,ytimg.com,Proxy - -# > Telegram -- DOMAIN-SUFFIX,telegra.ph,Proxy -- DOMAIN-SUFFIX,telegram.org,Proxy - -- IP-CIDR,91.108.56.0/22,Proxy -- IP-CIDR,91.108.4.0/22,Proxy -- IP-CIDR,91.108.8.0/22,Proxy -- IP-CIDR,109.239.140.0/24,Proxy -- IP-CIDR,149.154.160.0/20,Proxy -- IP-CIDR,149.154.164.0/22,Proxy - -# > LAN -- DOMAIN-SUFFIX,local,DIRECT -- IP-CIDR,127.0.0.0/8,DIRECT -- IP-CIDR,172.16.0.0/12,DIRECT -- IP-CIDR,192.168.0.0/16,DIRECT -- IP-CIDR,10.0.0.0/8,DIRECT -- IP-CIDR,17.0.0.0/8,DIRECT -- IP-CIDR,100.64.0.0/10,DIRECT - -# > 最终规则 -- GEOIP,CN,Domestic +Rule: +##source:lhie1 +# (GlobalTV) +# > ABC +- DOMAIN-SUFFIX,edgedatg.com,GlobalTV +- DOMAIN-SUFFIX,go.com,GlobalTV + +# > AbemaTV +- DOMAIN,linear-abematv.akamaized.net,GlobalTV +- DOMAIN-SUFFIX,abema.io,GlobalTV +- DOMAIN-SUFFIX,abema.tv,GlobalTV +- DOMAIN-SUFFIX,akamaized.net,GlobalTV +- DOMAIN-SUFFIX,ameba.jp,GlobalTV +- DOMAIN-SUFFIX,hayabusa.io,GlobalTV + +# > Amazon Prime Video +- DOMAIN-SUFFIX,aiv-cdn.net,GlobalTV +- DOMAIN-SUFFIX,amazonaws.com,GlobalTV +- DOMAIN-SUFFIX,amazonvideo.com,GlobalTV +- DOMAIN-SUFFIX,llnwd.net,GlobalTV + +# > Bahamut +- DOMAIN-SUFFIX,bahamut.com.tw,GlobalTV +- DOMAIN-SUFFIX,gamer.com.tw,GlobalTV +- DOMAIN-SUFFIX,hinet.net,GlobalTV + +# > BBC +- DOMAIN-KEYWORD,bbcfmt,GlobalTV +- DOMAIN-KEYWORD,co.uk,GlobalTV +- DOMAIN-KEYWORD,uk-live,GlobalTV +- DOMAIN-SUFFIX,bbc.co,GlobalTV +- DOMAIN-SUFFIX,bbc.co.uk,GlobalTV +- DOMAIN-SUFFIX,bbc.com,GlobalTV +- DOMAIN-SUFFIX,bbci.co,GlobalTV +- DOMAIN-SUFFIX,bbci.co.uk,GlobalTV + +# > CHOCO TV +- DOMAIN-SUFFIX,chocotv.com.tw,GlobalTV + +# > Epicgames +- DOMAIN-KEYWORD,epicgames,GlobalTV +- DOMAIN-SUFFIX,helpshift.com,GlobalTV + +# > Fox+ +- DOMAIN-KEYWORD,foxplus,GlobalTV +- DOMAIN-SUFFIX,config.fox.com,GlobalTV +- DOMAIN-SUFFIX,emome.net,GlobalTV +- DOMAIN-SUFFIX,fox.com,GlobalTV +- DOMAIN-SUFFIX,foxdcg.com,GlobalTV +- DOMAIN-SUFFIX,foxnow.com,GlobalTV +- DOMAIN-SUFFIX,foxplus.com,GlobalTV +- DOMAIN-SUFFIX,foxplay.com,GlobalTV +- DOMAIN-SUFFIX,ipinfo.io,GlobalTV +- DOMAIN-SUFFIX,mstage.io,GlobalTV +- DOMAIN-SUFFIX,now.com,GlobalTV +- DOMAIN-SUFFIX,theplatform.com,GlobalTV +- DOMAIN-SUFFIX,urlload.net,GlobalTV + +# > HBO && HBO Go +- DOMAIN-SUFFIX,execute-api.ap-southeast-1.amazonaws.com,GlobalTV +- DOMAIN-SUFFIX,hbo.com,GlobalTV +- DOMAIN-SUFFIX,hboasia.com,GlobalTV +- DOMAIN-SUFFIX,hbogo.com,GlobalTV +- DOMAIN-SUFFIX,hbogoasia.hk,GlobalTV + +# > Hulu +- DOMAIN-SUFFIX,happyon.jp,GlobalTV +- DOMAIN-SUFFIX,hulu.com,GlobalTV +- DOMAIN-SUFFIX,huluim.com,GlobalTV +- DOMAIN-SUFFIX,hulustream.com,GlobalTV + +# > Imkan +- DOMAIN-SUFFIX,imkan.tv,GlobalTV + +# > JOOX +- DOMAIN-SUFFIX,joox.com,GlobalTV + +# > MytvSUPER +- DOMAIN-KEYWORD,nowtv100,GlobalTV +- DOMAIN-KEYWORD,rthklive,GlobalTV +- DOMAIN-SUFFIX,mytvsuper.com,GlobalTV +- DOMAIN-SUFFIX,tvb.com,GlobalTV + +# > Netflix +- DOMAIN-SUFFIX,netflix.com,GlobalTV +- DOMAIN-SUFFIX,netflix.net,GlobalTV +- DOMAIN-SUFFIX,nflxext.com,GlobalTV +- DOMAIN-SUFFIX,nflximg.com,GlobalTV +- DOMAIN-SUFFIX,nflximg.net,GlobalTV +- DOMAIN-SUFFIX,nflxso.net,GlobalTV +- DOMAIN-SUFFIX,nflxvideo.net,GlobalTV + +# > Pandora +- DOMAIN-SUFFIX,pandora.com,GlobalTV + +# > Sky GO +- DOMAIN-SUFFIX,sky.com,GlobalTV +- DOMAIN-SUFFIX,skygo.co.nz,GlobalTV + +# > Spotify +- DOMAIN-KEYWORD,spotify,GlobalTV +- DOMAIN-SUFFIX,scdn.co,GlobalTV +- DOMAIN-SUFFIX,spoti.fi,GlobalTV + +# > viuTV +- DOMAIN-SUFFIX,viu.tv,GlobalTV + +# > Youtube +- DOMAIN-KEYWORD,youtube,GlobalTV +- DOMAIN-SUFFIX,googlevideo.com,GlobalTV +- DOMAIN-SUFFIX,gvt2.com,GlobalTV +- DOMAIN-SUFFIX,youtu.be,GlobalTV + +# (AsianTV) +# > Bilibili +- DOMAIN-KEYWORD,bilibili,AsianTV +- DOMAIN-SUFFIX,acg.tv,AsianTV +- DOMAIN-SUFFIX,acgvideo.com,AsianTV +- DOMAIN-SUFFIX,b23.tv,AsianTV +- DOMAIN-SUFFIX,biliapi.com,AsianTV +- DOMAIN-SUFFIX,biliapi.net,AsianTV +- DOMAIN-SUFFIX,bilibili.com,AsianTV +- DOMAIN-SUFFIX,biligame.com,AsianTV +- DOMAIN-SUFFIX,biligame.net,AsianTV +- DOMAIN-SUFFIX,hdslb.com,AsianTV +- DOMAIN-SUFFIX,im9.com,AsianTV + +# > IQIYI +- DOMAIN-KEYWORD,qiyi,AsianTV +- DOMAIN-SUFFIX,qy.net,AsianTV + +# > letv +- DOMAIN-SUFFIX,api.mob.app.letv.com,AsianTV + +# > NeteaseMusic +- DOMAIN-SUFFIX,163yun.com,AsianTV +- DOMAIN-SUFFIX,music.126.net,AsianTV +- DOMAIN-SUFFIX,music.163.com,AsianTV + +# > Tencent Video +- DOMAIN-SUFFIX,vv.video.qq.com,AsianTV + +# > 国内网站 +- DOMAIN-SUFFIX,cn,Domestic +- DOMAIN-KEYWORD,-cn,Domestic + +- DOMAIN-SUFFIX,126.com,Domestic +- DOMAIN-SUFFIX,126.net,Domestic +- DOMAIN-SUFFIX,127.net,Domestic +- DOMAIN-SUFFIX,163.com,Domestic +- DOMAIN-SUFFIX,360buyimg.com,Domestic +- DOMAIN-SUFFIX,36kr.com,Domestic +- DOMAIN-SUFFIX,acfun.tv,Domestic +- DOMAIN-SUFFIX,air-matters.com,Domestic +- DOMAIN-SUFFIX,aixifan.com,Domestic +- DOMAIN-SUFFIX,akamaized.net,Domestic +- DOMAIN-KEYWORD,alicdn,Domestic +- DOMAIN-KEYWORD,alipay,Domestic +- DOMAIN-KEYWORD,taobao,Domestic +- DOMAIN-SUFFIX,amap.com,Domestic +- DOMAIN-SUFFIX,autonavi.com,Domestic +- DOMAIN-KEYWORD,baidu,Domestic +- DOMAIN-SUFFIX,bdimg.com,Domestic +- DOMAIN-SUFFIX,bdstatic.com,Domestic +- DOMAIN-SUFFIX,bilibili.com,Domestic +- DOMAIN-SUFFIX,caiyunapp.com,Domestic +- DOMAIN-SUFFIX,clouddn.com,Domestic +- DOMAIN-SUFFIX,cnbeta.com,Domestic +- DOMAIN-SUFFIX,cnbetacdn.com,Domestic +- DOMAIN-SUFFIX,cootekservice.com,Domestic +- DOMAIN-SUFFIX,csdn.net,Domestic +- DOMAIN-SUFFIX,ctrip.com,Domestic +- DOMAIN-SUFFIX,dgtle.com,Domestic +- DOMAIN-SUFFIX,dianping.com,Domestic +- DOMAIN-SUFFIX,douban.com,Domestic +- DOMAIN-SUFFIX,doubanio.com,Domestic +- DOMAIN-SUFFIX,duokan.com,Domestic +- DOMAIN-SUFFIX,easou.com,Domestic +- DOMAIN-SUFFIX,ele.me,Domestic +- DOMAIN-SUFFIX,feng.com,Domestic +- DOMAIN-SUFFIX,fir.im,Domestic +- DOMAIN-SUFFIX,frdic.com,Domestic +- DOMAIN-SUFFIX,g-cores.com,Domestic +- DOMAIN-SUFFIX,godic.net,Domestic +- DOMAIN-SUFFIX,gtimg.com,Domestic +- DOMAIN,cdn.hockeyapp.net,Domestic +- DOMAIN-SUFFIX,hongxiu.com,Domestic +- DOMAIN-SUFFIX,hxcdn.net,Domestic +- DOMAIN-SUFFIX,iciba.com,Domestic +- DOMAIN-SUFFIX,ifeng.com,Domestic +- DOMAIN-SUFFIX,ifengimg.com,Domestic +- DOMAIN-SUFFIX,ipip.net,Domestic +- DOMAIN-SUFFIX,iqiyi.com,Domestic +- DOMAIN-SUFFIX,jd.com,Domestic +- DOMAIN-SUFFIX,jianshu.com,Domestic +- DOMAIN-SUFFIX,knewone.com,Domestic +- DOMAIN-SUFFIX,le.com,Domestic +- DOMAIN-SUFFIX,lecloud.com,Domestic +- DOMAIN-SUFFIX,lemicp.com,Domestic +- DOMAIN-SUFFIX,licdn.com,Domestic +- DOMAIN-SUFFIX,linkedin.com,Domestic +- DOMAIN-SUFFIX,luoo.net,Domestic +- DOMAIN-SUFFIX,meituan.com,Domestic +- DOMAIN-SUFFIX,meituan.net,Domestic +- DOMAIN-SUFFIX,mi.com,Domestic +- DOMAIN-SUFFIX,miaopai.com,Domestic +- DOMAIN-SUFFIX,microsoft.com,Domestic +- DOMAIN-SUFFIX,microsoftonline.com,Domestic +- DOMAIN-SUFFIX,miui.com,Domestic +- DOMAIN-SUFFIX,miwifi.com,Domestic +- DOMAIN-SUFFIX,mob.com,Domestic +- DOMAIN-SUFFIX,netease.com,Domestic +- DOMAIN-SUFFIX,office.com,Domestic +- DOMAIN-SUFFIX,office365.com,Domestic +- DOMAIN-KEYWORD,officecdn,Domestic +- DOMAIN-SUFFIX,oschina.net,Domestic +- DOMAIN-SUFFIX,ppsimg.com,Domestic +- DOMAIN-SUFFIX,pstatp.com,Domestic +- DOMAIN-SUFFIX,qcloud.com,Domestic +- DOMAIN-SUFFIX,qdaily.com,Domestic +- DOMAIN-SUFFIX,qdmm.com,Domestic +- DOMAIN-SUFFIX,qhimg.com,Domestic +- DOMAIN-SUFFIX,qhres.com,Domestic +- DOMAIN-SUFFIX,qidian.com,Domestic +- DOMAIN-SUFFIX,qihucdn.com,Domestic +- DOMAIN-SUFFIX,qiniu.com,Domestic +- DOMAIN-SUFFIX,qiniucdn.com,Domestic +- DOMAIN-SUFFIX,qiyipic.com,Domestic +- DOMAIN-SUFFIX,qq.com,Domestic +- DOMAIN-SUFFIX,qqurl.com,Domestic +- DOMAIN-SUFFIX,rarbg.to,Domestic +- DOMAIN-SUFFIX,ruguoapp.com,Domestic +- DOMAIN-SUFFIX,segmentfault.com,Domestic +- DOMAIN-SUFFIX,sinaapp.com,Domestic +- DOMAIN-SUFFIX,smzdm.com,Domestic +- DOMAIN-SUFFIX,snapdrop.net,Domestic +- DOMAIN-SUFFIX,sogou.com,Domestic +- DOMAIN-SUFFIX,sogoucdn.com,Domestic +- DOMAIN-SUFFIX,sohu.com,Domestic +- DOMAIN-SUFFIX,soku.com,Domestic +- DOMAIN-SUFFIX,sspai.com,Domestic +- DOMAIN-SUFFIX,suning.com,Domestic +- DOMAIN-SUFFIX,taobao.com,Domestic +- DOMAIN-SUFFIX,tencent.com,Domestic +- DOMAIN-SUFFIX,tenpay.com,Domestic +- DOMAIN-SUFFIX,tianyancha.com,Domestic +- DOMAIN-SUFFIX,tmall.com,Domestic +- DOMAIN-SUFFIX,tudou.com,Domestic +- DOMAIN-SUFFIX,umetrip.com,Domestic +- DOMAIN-SUFFIX,upaiyun.com,Domestic +- DOMAIN-SUFFIX,upyun.com,Domestic +- DOMAIN-SUFFIX,veryzhun.com,Domestic +- DOMAIN-SUFFIX,weather.com,Domestic +- DOMAIN-SUFFIX,weibo.com,Domestic +- DOMAIN-SUFFIX,xiami.com,Domestic +- DOMAIN-SUFFIX,xiami.net,Domestic +- DOMAIN-SUFFIX,xiaomicp.com,Domestic +- DOMAIN-SUFFIX,ximalaya.com,Domestic +- DOMAIN-SUFFIX,xmcdn.com,Domestic +- DOMAIN-SUFFIX,xunlei.com,Domestic +- DOMAIN-SUFFIX,yhd.com,Domestic +- DOMAIN-SUFFIX,yihaodianimg.com,Domestic +- DOMAIN-SUFFIX,yinxiang.com,Domestic +- DOMAIN-SUFFIX,ykimg.com,Domestic +- DOMAIN-SUFFIX,youdao.com,Domestic +- DOMAIN-SUFFIX,youku.com,Domestic +- DOMAIN-SUFFIX,zealer.com,Domestic +- DOMAIN-SUFFIX,zhihu.com,Domestic +- DOMAIN-SUFFIX,zhimg.com,Domestic +- DOMAIN-SUFFIX,zimuzu.tv,Domestic + +# > 抗 DNS 污染 +- DOMAIN-KEYWORD,amazon,Proxy +- DOMAIN-KEYWORD,google,Proxy +- DOMAIN-KEYWORD,gmail,Proxy +- DOMAIN-KEYWORD,youtube,Proxy +- DOMAIN-KEYWORD,facebook,Proxy +- DOMAIN-SUFFIX,fb.me,Proxy +- DOMAIN-SUFFIX,fbcdn.net,Proxy +- DOMAIN-KEYWORD,twitter,Proxy +- DOMAIN-KEYWORD,instagram,Proxy +- DOMAIN-KEYWORD,dropbox,Proxy +- DOMAIN-SUFFIX,twimg.com,Proxy +- DOMAIN-KEYWORD,blogspot,Proxy +- DOMAIN-SUFFIX,youtu.be,Proxy +- DOMAIN-KEYWORD,whatsapp,Proxy + +# > Speedtest +- DOMAIN-KEYWORD,speedtest,Proxy +- DOMAIN-SUFFIX,ooklaserver.net,Proxy + +# > 国外网站 +- DOMAIN-SUFFIX,9to5mac.com,Proxy +- DOMAIN-SUFFIX,abpchina.org,Proxy +- DOMAIN-SUFFIX,adblockplus.org,Proxy +- DOMAIN-SUFFIX,adobe.com,Proxy +- DOMAIN-SUFFIX,alfredapp.com,Proxy +- DOMAIN-SUFFIX,amplitude.com,Proxy +- DOMAIN-SUFFIX,ampproject.org,Proxy +- DOMAIN-SUFFIX,android.com,Proxy +- DOMAIN-SUFFIX,angularjs.org,Proxy +- DOMAIN-SUFFIX,aolcdn.com,Proxy +- DOMAIN-SUFFIX,apkpure.com,Proxy +- DOMAIN-SUFFIX,appledaily.com,Proxy +- DOMAIN-SUFFIX,appshopper.com,Proxy +- DOMAIN-SUFFIX,appspot.com,Proxy +- DOMAIN-SUFFIX,arcgis.com,Proxy +- DOMAIN-SUFFIX,archive.org,Proxy +- DOMAIN-SUFFIX,armorgames.com,Proxy +- DOMAIN-SUFFIX,aspnetcdn.com,Proxy +- DOMAIN-SUFFIX,att.com,Proxy +- DOMAIN-SUFFIX,awsstatic.com,Proxy +- DOMAIN-SUFFIX,azureedge.net,Proxy +- DOMAIN-SUFFIX,azurewebsites.net,Proxy +- DOMAIN-SUFFIX,bing.com,Proxy +- DOMAIN-SUFFIX,bintray.com,Proxy +- DOMAIN-SUFFIX,bit.com,Proxy +- DOMAIN-SUFFIX,bit.ly,Proxy +- DOMAIN-SUFFIX,bitbucket.org,Proxy +- DOMAIN-SUFFIX,bjango.com,Proxy +- DOMAIN-SUFFIX,bkrtx.com,Proxy +- DOMAIN-SUFFIX,blog.com,Proxy +- DOMAIN-SUFFIX,blogcdn.com,Proxy +- DOMAIN-SUFFIX,blogger.com,Proxy +- DOMAIN-SUFFIX,blogsmithmedia.com,Proxy +- DOMAIN-SUFFIX,blogspot.com,Proxy +- DOMAIN-SUFFIX,blogspot.hk,Proxy +- DOMAIN-SUFFIX,bloomberg.com,Proxy +- DOMAIN-SUFFIX,box.com,Proxy +- DOMAIN-SUFFIX,box.net,Proxy +- DOMAIN-SUFFIX,cachefly.net,Proxy +- DOMAIN-SUFFIX,chromium.org,Proxy +- DOMAIN-SUFFIX,cl.ly,Proxy +- DOMAIN-SUFFIX,cloudflare.com,Proxy +- DOMAIN-SUFFIX,cloudfront.net,Proxy +- DOMAIN-SUFFIX,cloudmagic.com,Proxy +- DOMAIN-SUFFIX,cmail19.com,Proxy +- DOMAIN-SUFFIX,cnet.com,Proxy +- DOMAIN-SUFFIX,cocoapods.org,Proxy +- DOMAIN-SUFFIX,comodoca.com,Proxy +- DOMAIN-SUFFIX,crashlytics.com,Proxy +- DOMAIN-SUFFIX,culturedcode.com,Proxy +- DOMAIN-SUFFIX,d.pr,Proxy +- DOMAIN-SUFFIX,danilo.to,Proxy +- DOMAIN-SUFFIX,dayone.me,Proxy +- DOMAIN-SUFFIX,db.tt,Proxy +- DOMAIN-SUFFIX,deskconnect.com,Proxy +- DOMAIN-SUFFIX,disq.us,Proxy +- DOMAIN-SUFFIX,disqus.com,Proxy +- DOMAIN-SUFFIX,disquscdn.com,Proxy +- DOMAIN-SUFFIX,dnsimple.com,Proxy +- DOMAIN-SUFFIX,docker.com,Proxy +- DOMAIN-SUFFIX,dribbble.com,Proxy +- DOMAIN-SUFFIX,droplr.com,Proxy +- DOMAIN-SUFFIX,duckduckgo.com,Proxy +- DOMAIN-SUFFIX,dueapp.com,Proxy +- DOMAIN-SUFFIX,dytt8.net,Proxy +- DOMAIN-SUFFIX,edgecastcdn.net,Proxy +- DOMAIN-SUFFIX,edgekey.net,Proxy +- DOMAIN-SUFFIX,edgesuite.net,Proxy +- DOMAIN-SUFFIX,engadget.com,Proxy +- DOMAIN-SUFFIX,entrust.net,Proxy +- DOMAIN-SUFFIX,eurekavpt.com,Proxy +- DOMAIN-SUFFIX,evernote.com,Proxy +- DOMAIN-SUFFIX,fabric.io,Proxy +- DOMAIN-SUFFIX,fast.com,Proxy +- DOMAIN-SUFFIX,fastly.net,Proxy +- DOMAIN-SUFFIX,fc2.com,Proxy +- DOMAIN-SUFFIX,feedburner.com,Proxy +- DOMAIN-SUFFIX,feedly.com,Proxy +- DOMAIN-SUFFIX,feedsportal.com,Proxy +- DOMAIN-SUFFIX,fiftythree.com,Proxy +- DOMAIN-SUFFIX,firebaseio.com,Proxy +- DOMAIN-SUFFIX,flexibits.com,Proxy +- DOMAIN-SUFFIX,flickr.com,Proxy +- DOMAIN-SUFFIX,flipboard.com,Proxy +- DOMAIN-SUFFIX,g.co,Proxy +- DOMAIN-SUFFIX,gabia.net,Proxy +- DOMAIN-SUFFIX,geni.us,Proxy +- DOMAIN-SUFFIX,gfx.ms,Proxy +- DOMAIN-SUFFIX,ggpht.com,Proxy +- DOMAIN-SUFFIX,ghostnoteapp.com,Proxy +- DOMAIN-SUFFIX,git.io,Proxy +- DOMAIN-KEYWORD,github,Proxy +- DOMAIN-SUFFIX,globalsign.com,Proxy +- DOMAIN-SUFFIX,gmodules.com,Proxy +- DOMAIN-SUFFIX,godaddy.com,Proxy +- DOMAIN-SUFFIX,golang.org,Proxy +- DOMAIN-SUFFIX,gongm.in,Proxy +- DOMAIN-SUFFIX,goo.gl,Proxy +- DOMAIN-SUFFIX,goodreaders.com,Proxy +- DOMAIN-SUFFIX,goodreads.com,Proxy +- DOMAIN-SUFFIX,gravatar.com,Proxy +- DOMAIN-SUFFIX,gstatic.com,Proxy +- DOMAIN-SUFFIX,gvt0.com,Proxy +- DOMAIN-SUFFIX,hockeyapp.net,Proxy +- DOMAIN-SUFFIX,hotmail.com,Proxy +- DOMAIN-SUFFIX,icons8.com,Proxy +- DOMAIN-SUFFIX,ifixit.com,Proxy +- DOMAIN-SUFFIX,ift.tt,Proxy +- DOMAIN-SUFFIX,ifttt.com,Proxy +- DOMAIN-SUFFIX,iherb.com,Proxy +- DOMAIN-SUFFIX,imageshack.us,Proxy +- DOMAIN-SUFFIX,img.ly,Proxy +- DOMAIN-SUFFIX,imgur.com,Proxy +- DOMAIN-SUFFIX,imore.com,Proxy +- DOMAIN-SUFFIX,instapaper.com,Proxy +- DOMAIN-SUFFIX,ipn.li,Proxy +- DOMAIN-SUFFIX,is.gd,Proxy +- DOMAIN-SUFFIX,issuu.com,Proxy +- DOMAIN-SUFFIX,itgonglun.com,Proxy +- DOMAIN-SUFFIX,itun.es,Proxy +- DOMAIN-SUFFIX,ixquick.com,Proxy +- DOMAIN-SUFFIX,j.mp,Proxy +- DOMAIN-SUFFIX,js.revsci.net,Proxy +- DOMAIN-SUFFIX,jshint.com,Proxy +- DOMAIN-SUFFIX,jtvnw.net,Proxy +- DOMAIN-SUFFIX,justgetflux.com,Proxy +- DOMAIN-SUFFIX,kat.cr,Proxy +- DOMAIN-SUFFIX,klip.me,Proxy +- DOMAIN-SUFFIX,libsyn.com,Proxy +- DOMAIN-SUFFIX,linode.com,Proxy +- DOMAIN-SUFFIX,lithium.com,Proxy +- DOMAIN-SUFFIX,littlehj.com,Proxy +- DOMAIN-SUFFIX,live.com,Proxy +- DOMAIN-SUFFIX,live.net,Proxy +- DOMAIN-SUFFIX,livefilestore.com,Proxy +- DOMAIN-SUFFIX,llnwd.net,Proxy +- DOMAIN-SUFFIX,macid.co,Proxy +- DOMAIN-SUFFIX,macromedia.com,Proxy +- DOMAIN-SUFFIX,macrumors.com,Proxy +- DOMAIN-SUFFIX,mashable.com,Proxy +- DOMAIN-SUFFIX,mathjax.org,Proxy +- DOMAIN-SUFFIX,medium.com,Proxy +- DOMAIN-SUFFIX,mega.co.nz,Proxy +- DOMAIN-SUFFIX,mega.nz,Proxy +- DOMAIN-SUFFIX,megaupload.com,Proxy +- DOMAIN-SUFFIX,microsofttranslator.com,Proxy +- DOMAIN-SUFFIX,mindnode.com,Proxy +- DOMAIN-SUFFIX,mobile01.com,Proxy +- DOMAIN-SUFFIX,modmyi.com,Proxy +- DOMAIN-SUFFIX,msedge.net,Proxy +- DOMAIN-SUFFIX,myfontastic.com,Proxy +- DOMAIN-SUFFIX,name.com,Proxy +- DOMAIN-SUFFIX,nextmedia.com,Proxy +- DOMAIN-SUFFIX,nsstatic.net,Proxy +- DOMAIN-SUFFIX,nssurge.com,Proxy +- DOMAIN-SUFFIX,nyt.com,Proxy +- DOMAIN-SUFFIX,nytimes.com,Proxy +- DOMAIN-SUFFIX,omnigroup.com,Proxy +- DOMAIN-SUFFIX,onedrive.com,Proxy +- DOMAIN-SUFFIX,onenote.com,Proxy +- DOMAIN-SUFFIX,ooyala.com,Proxy +- DOMAIN-SUFFIX,openvpn.net,Proxy +- DOMAIN-SUFFIX,openwrt.org,Proxy +- DOMAIN-SUFFIX,orkut.com,Proxy +- DOMAIN-SUFFIX,osxdaily.com,Proxy +- DOMAIN-SUFFIX,outlook.com,Proxy +- DOMAIN-SUFFIX,ow.ly,Proxy +- DOMAIN-SUFFIX,paddleapi.com,Proxy +- DOMAIN-SUFFIX,parallels.com,Proxy +- DOMAIN-SUFFIX,parse.com,Proxy +- DOMAIN-SUFFIX,pdfexpert.com,Proxy +- DOMAIN-SUFFIX,periscope.tv,Proxy +- DOMAIN-SUFFIX,pinboard.in,Proxy +- DOMAIN-SUFFIX,pinterest.com,Proxy +- DOMAIN-SUFFIX,pixelmator.com,Proxy +- DOMAIN-SUFFIX,pixiv.net,Proxy +- DOMAIN-SUFFIX,playpcesor.com,Proxy +- DOMAIN-SUFFIX,playstation.com,Proxy +- DOMAIN-SUFFIX,playstation.com.hk,Proxy +- DOMAIN-SUFFIX,playstation.net,Proxy +- DOMAIN-SUFFIX,playstationnetwork.com,Proxy +- DOMAIN-SUFFIX,pushwoosh.com,Proxy +- DOMAIN-SUFFIX,rime.im,Proxy +- DOMAIN-SUFFIX,servebom.com,Proxy +- DOMAIN-SUFFIX,sfx.ms,Proxy +- DOMAIN-SUFFIX,shadowsocks.org,Proxy +- DOMAIN-SUFFIX,sharethis.com,Proxy +- DOMAIN-SUFFIX,shazam.com,Proxy +- DOMAIN-SUFFIX,skype.com,Proxy +- DOMAIN-SUFFIX,smartdnsProxy.com,Proxy +- DOMAIN-SUFFIX,smartmailcloud.com,Proxy +- DOMAIN-SUFFIX,sndcdn.com,Proxy +- DOMAIN-SUFFIX,sony.com,Proxy +- DOMAIN-SUFFIX,soundcloud.com,Proxy +- DOMAIN-SUFFIX,sourceforge.net,Proxy +- DOMAIN-SUFFIX,spotify.com,Proxy +- DOMAIN-SUFFIX,squarespace.com,Proxy +- DOMAIN-SUFFIX,sstatic.net,Proxy +- DOMAIN-SUFFIX,st.luluku.pw,Proxy +- DOMAIN-SUFFIX,stackoverflow.com,Proxy +- DOMAIN-SUFFIX,startpage.com,Proxy +- DOMAIN-SUFFIX,staticflickr.com,Proxy +- DOMAIN-SUFFIX,steamcommunity.com,Proxy +- DOMAIN-SUFFIX,symauth.com,Proxy +- DOMAIN-SUFFIX,symcb.com,Proxy +- DOMAIN-SUFFIX,symcd.com,Proxy +- DOMAIN-SUFFIX,tapbots.com,Proxy +- DOMAIN-SUFFIX,tapbots.net,Proxy +- DOMAIN-SUFFIX,tdesktop.com,Proxy +- DOMAIN-SUFFIX,techcrunch.com,Proxy +- DOMAIN-SUFFIX,techsmith.com,Proxy +- DOMAIN-SUFFIX,thepiratebay.org,Proxy +- DOMAIN-SUFFIX,theverge.com,Proxy +- DOMAIN-SUFFIX,time.com,Proxy +- DOMAIN-SUFFIX,timeinc.net,Proxy +- DOMAIN-SUFFIX,tiny.cc,Proxy +- DOMAIN-SUFFIX,tinypic.com,Proxy +- DOMAIN-SUFFIX,tmblr.co,Proxy +- DOMAIN-SUFFIX,todoist.com,Proxy +- DOMAIN-SUFFIX,trello.com,Proxy +- DOMAIN-SUFFIX,trustasiassl.com,Proxy +- DOMAIN-SUFFIX,tumblr.co,Proxy +- DOMAIN-SUFFIX,tumblr.com,Proxy +- DOMAIN-SUFFIX,tweetdeck.com,Proxy +- DOMAIN-SUFFIX,tweetmarker.net,Proxy +- DOMAIN-SUFFIX,twitch.tv,Proxy +- DOMAIN-SUFFIX,txmblr.com,Proxy +- DOMAIN-SUFFIX,typekit.net,Proxy +- DOMAIN-SUFFIX,ubertags.com,Proxy +- DOMAIN-SUFFIX,ublock.org,Proxy +- DOMAIN-SUFFIX,ubnt.com,Proxy +- DOMAIN-SUFFIX,ulyssesapp.com,Proxy +- DOMAIN-SUFFIX,urchin.com,Proxy +- DOMAIN-SUFFIX,usertrust.com,Proxy +- DOMAIN-SUFFIX,v.gd,Proxy +- DOMAIN-SUFFIX,v2ex.com,Proxy +- DOMAIN-SUFFIX,vimeo.com,Proxy +- DOMAIN-SUFFIX,vimeocdn.com,Proxy +- DOMAIN-SUFFIX,vine.co,Proxy +- DOMAIN-SUFFIX,vivaldi.com,Proxy +- DOMAIN-SUFFIX,vox-cdn.com,Proxy +- DOMAIN-SUFFIX,vsco.co,Proxy +- DOMAIN-SUFFIX,vultr.com,Proxy +- DOMAIN-SUFFIX,w.org,Proxy +- DOMAIN-SUFFIX,w3schools.com,Proxy +- DOMAIN-SUFFIX,webtype.com,Proxy +- DOMAIN-SUFFIX,wikiwand.com,Proxy +- DOMAIN-SUFFIX,wikileaks.org,Proxy +- DOMAIN-SUFFIX,wikimedia.org,Proxy +- DOMAIN-SUFFIX,wikipedia.com,Proxy +- DOMAIN-SUFFIX,wikipedia.org,Proxy +- DOMAIN-SUFFIX,windows.com,Proxy +- DOMAIN-SUFFIX,windows.net,Proxy +- DOMAIN-SUFFIX,wire.com,Proxy +- DOMAIN-SUFFIX,wordpress.com,Proxy +- DOMAIN-SUFFIX,workflowy.com,Proxy +- DOMAIN-SUFFIX,wp.com,Proxy +- DOMAIN-SUFFIX,wsj.com,Proxy +- DOMAIN-SUFFIX,wsj.net,Proxy +- DOMAIN-SUFFIX,xda-developers.com,Proxy +- DOMAIN-SUFFIX,xeeno.com,Proxy +- DOMAIN-SUFFIX,xiti.com,Proxy +- DOMAIN-SUFFIX,yahoo.com,Proxy +- DOMAIN-SUFFIX,yimg.com,Proxy +- DOMAIN-SUFFIX,ying.com,Proxy +- DOMAIN-SUFFIX,yoyo.org,Proxy +- DOMAIN-SUFFIX,ytimg.com,Proxy + +# > Telegram +- DOMAIN-SUFFIX,telegra.ph,Proxy +- DOMAIN-SUFFIX,telegram.org,Proxy + +- IP-CIDR,91.108.56.0/22,Proxy +- IP-CIDR,91.108.4.0/22,Proxy +- IP-CIDR,91.108.8.0/22,Proxy +- IP-CIDR,109.239.140.0/24,Proxy +- IP-CIDR,149.154.160.0/20,Proxy +- IP-CIDR,149.154.164.0/22,Proxy + +# > LAN +- DOMAIN-SUFFIX,local,DIRECT +- IP-CIDR,127.0.0.0/8,DIRECT +- IP-CIDR,172.16.0.0/12,DIRECT +- IP-CIDR,192.168.0.0/16,DIRECT +- IP-CIDR,10.0.0.0/8,DIRECT +- IP-CIDR,17.0.0.0/8,DIRECT +- IP-CIDR,100.64.0.0/10,DIRECT + +# > 最终规则 +- GEOIP,CN,Domestic - MATCH,Others \ No newline at end of file diff --git a/luci-app-openclash/files/etc/openclash/openclash_version b/luci-app-openclash/files/etc/openclash/openclash_version index 1b9b19add5..b7c5538e78 100644 --- a/luci-app-openclash/files/etc/openclash/openclash_version +++ b/luci-app-openclash/files/etc/openclash/openclash_version @@ -1,2 +1,2 @@ -v0.34.3-beta +v0.34.3-beta data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWoAAAAqCAMAAACtKeEJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFQjVDNUUxOUQ3RTQxMUU5QjQ3NEQ2REIwQTgyNUQ4QSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFQjVDNUUxQUQ3RTQxMUU5QjQ3NEQ2REIwQTgyNUQ4QSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkVCNUM1RTE3RDdFNDExRTlCNDc0RDZEQjBBODI1RDhBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkVCNUM1RTE4RDdFNDExRTlCNDc0RDZEQjBBODI1RDhBIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+jLCS5gAAAwBQTFRFlMXhSEhIeXl5PT09lZWV4e/3hLzdY5WyBWmiioqKgICABFyOB2edRYChK43GBnCsV6XSoaGhkrXJCXWzHXKiCXKuwdXh0ebzYmJiysrKampqG4XBk7zT0dHRB1aE7/T3CWSZbW1tBlWCdrbaB16QFWqaBW2pzs7OB1yNnp6eNXWaoszlxsbGVIuqJHqqPz8/stPm5+fnIHanRUVFJIS7JGqSh7/fBFOAdKfERkZGOpXKhISEF4C9Y57AkpKSubm5ZKvTpaWlRZG9qampwMDAtbW1cnJy2tragoKCrKysNXymZWVlR4uzS0tLpM7m39/fRZrKQUFB8PX34ODgscrYV5W5NpHFBnKwBGCUCWqhQ0NDCWGUg6rBob/QBWWbtra2dHR0wsLCBFqKdKG6d3d3vr6+Z63WstXpGG2dr6+vsc3cJnGd0N/oosbbB2ylSp/PCViFSZ7OBGKYR5zNosnfo8DRBXSz3d3dRYSpgq7HicHiQ36gJm6XocPXg7PPdLHUGGKNSJzNAnO0AXKzUVFRU1NTVFRUVVVVC3y9UlJSBXa3Cnu8B3i5VlZWA3W1Dn/ABHW2BHa2DoDAA3S1A3S0EoPDEoPEEoTEAHKyE4TFBne4V1dXDn+/DX6/DX6+DH2+DH29CXu7CHm5CHm6CXq7CXq6Ojo6qqqq1dXV1NTUq6urOzs7fn5+6urq8Pf7wt7unZ2dwd7uTExM8/PzgqnA9PT0f39/g7zcwNTfwd3t9fX1dLPY1tbWjIyM4Orwwd3uwt/vhoaGFF6JRpvLhb7ehKzCg6/I4OrvhL3dR5vM0eDocp64B1mIhLTQ6Ojow9/vg6vCRJnKwdrpg7vcwtzraK/XBXS0CGifss/gJ4rDwt7vNYa0VaLPSJ3OpMrggLnZ0OTwRomw4OzzC3m4BWefG3CgZafNJ3WiEHu3hLjWCm6ohKvCMJPLf7jYl5eXEYLDEIHCD4DBWVlZWlpaX19fW1tbXFxcXl5eTU1NT09PUFBQWFhYXV1dTk5O////////RlLbigAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAv2SURBVHja7FcLWFRlGj6Hw4hcFIG4CDoCThB4IRx1AgwhLoLGTQkBBXVjNbuQWHZv24uD4DC7a3uHLovcFYabJGpqmRqZlbW1ZVu7udm227buVmxyiY/9/v8/Z+acGSCffB630+P7PJz/+97vdv53zpyf4UZHD24O7Fcx5v/u24+zD1lGR7nRVan9qsb836gBn/qPcgdTL6ob83+tCnxq4TZfVLvUv1IHHuJSv1I55v9bHfiU++qq1FcI3wGp/6MScF+qHVelvmJY8JlKwP1X7bgq9ZWT+nGVgPtC7VjwM5VgTKmdvNLTLzj9XwV0irvU+QueGAePT31r8eK77dnPgqYttqM/C7rbPu3x2NmLF7811b74bnjtiW8M7nMHeLUBRVt6yOeXiZD0C9+w8ll49hIzFzw5Dji6C02sgpz6GtucZpqM9AdQls62sKzMICVfBq+NN+3JssVlT04IB6kDngWIXhcRsaEbIP1ypY67ZMEuQ+qnxsZxWHnDzbe8A5YgOVsGcOrEiW0rAcqsXCaKqqx9DlZuO3HiFMBzSr7MnlDMO/7UhOCG7ZAMEC9QPB+dPnyZSIPmb1ipF/SXmLmg4umxMBUgcgvCDzLldNm2Rwj7wyM2mgMUXln8ZxeStOVWgKkKHqV+ejyg1E9PCM5BHHheyOEzMmKihIyQSxUmJC0tQOaWpJV8rdRpUo4CJVIjm9TY226UsuSa34+J2ZB7+hNf3+ApYJGxT/lu2aIrKAg+fQKeE6mNcGoegLJ4zZbTwQUFui347Cv4MlIVVCYny8pimYFSW8nYsrIyhzuyl3o6hAtdzBzJyRge3gN7mAcgXtOmAwrohn8XVgGNHqYv92SqUTO4XSBuWwl1GNwOQ5vYvw0O4zUgmR4GxJR3YqdEG+kpzZX3Ri6NtDzorJC6giEIH0FmZQJXUbEJ/ulDnDUAsRU2+AZ/aMLlwxlwLyPeh5WRDwBUKBD8CV0WAJw1yfn34d3Yd/EOLMfFmZnsvY+muFXSyF960SubcjVK4EM9INk7KmtqcHtSgF3XkS7NNW6wigqJUZRtbuLmV2FVACY0A2ozMxz1CKmpWbcKDjYjSmrawI12KYE2cj0IbZsT5wI4o2PrhK2XJiZm0UniXGfau4313kN63x+Oh8hh2R1LUqPCogAWork/3MK0PQXTKhwQa1n5sWhApO4le6mtHb19K5RS43n5gR++cI6LxZoZr7wDsLGiol0DmnYEUd3yziuvzNCA/4RSlwB8qSAcpIalXwhCoNkNoMerS+ADalyhO4C82sPBi0rd45UhCPwy4hWG4HcEMTQYAcm0SzJEDNbUrIJ1hA6Bg1RqsVMIQAihd4Rb54aQ1xntlkw5WDqM7jqYLpfaxPDhFNBQYyP4eZhMADdVUNcP+kxK9PW1g19kMDGDNOBy2uceAJM9ftSXqZl1RutTIScx8a47tFrtNvwG1ZpM/rANHS2+o0wm7Rk4QxzMciGrFo+DaYqOnFkB3HeXgsAtMwOAXVcQNQox8dUBYvHmLIgT9DwfFQBZmNAMThguFOKh2WzmU2FmIWK7Gd88ARgN6IFhs9kVooUontcLG8DVbOuEs4UYns8RBOvcZNhAe6PkgZQThJxCIYDdiwhJalOwuLd2cPEhUmcz+k0HqfF58UeBTab6IH/Ux8c0ltR9mDVjkYeSvAf8tFqd7rT2CMw2mabBEe11HgVrtLk4WHcSTuoQmKU9vabgbY/rztgNdpTaOLHUQgwmbMfEcIEvN5cbcd8Z20mokGY0QwjS5vJUIjVmNbNqfgM44+IMG3izOQWaYgg5FEGaWzsFAnwfBTUbC61zsyCefPLlOd3kQ9kDEWS4OUYpda0I31shE5ezMEuHC8A9jG6Hvlolzp1z8QP/oIba2kwo0pbW1qLUtfZYeO4B71mwkXZgqCWJfsE+uAYXkVEceAfTwWvJiD7rnNLavNl9mW8esRvM7VAApe5XEE3QxAwAdh2SEmcapQor0G2GVsKanaCZBptZemUcZNGoUyW5WtEk6zRIjoGs5IhA21yA9SwUTtwmSKLeELsXEdfUS3gEYEl9fR94l6ID8BJjUep6JUJDQ6+7HTLr61+CO0Pfricr2KXUN7wdGqpdjscibUVBE9tZ+CQx2m376CNzxTkN0zQ2VgY7qQcBXCeW2vqZNFs/nCaGiAgqppssbs3aoe9G1QIhWk9zmllFYoST/OMQ4pbRO4yQSe1kprGZTGrFvUhSN0goyIVDDQ0aeIQ4L8ILjO2EvzUo4etZqpsHloaGF2SPCUxSJvn4egZr7yQNG6YwNJCCThb9BzE6oXMSxQ/W3tTQMEnq8B6A3w3nluMbRdmSK1dgBA8gBYHbYwaA7Yp4BlokA/i9ItBtgWdkcWtWeUYSNm6Cji6akyRV8PIcPRIh8dH4KEtz8b3BQlnQ4XAvIj6qk+AzDzR1L4BfMXH8YBJj8Xysc8TNAHW78/ze6CTA/846OxMck3xZk1AGtFBqFuHg+rq6TvAWQ6EedXWTpIH+kEu5tRIhwk7q8ji6URF0yykTSz2C3wNexARSl++Anv42qCGmF0RLFSOKnIwoIn80UZTJGi5O78fHe1ypd1uRj4/yHDwUiX0S5lAuD6B0tyMSYNbu3Z6iUFMAUK0xsv4Kj+HVkwEtlJoFNHBD3e4fwIseIjC4H/azGMAU3WRPXxshgjMqERUNPeuZuT4ryWiMhzbqROB5iWBXRCu0MGMgBdouigX41wKtsniqWI3Qh8N0PBSJ+Tm+Ixh5MVDWaT2pHOCFZSSaBDjc+Dz00N5J+OFInPwuCD6qsiJsLWzCQ5Hay8GyhKwc5Hriknf0aAJxD52l0SUaKKqqWq1jwJ8wOl0pST56lETzEli/QwDzq+TIBhqvSgD4uKrqDoBDjF+CXR+DOcwBuJFyR2G/othe6ox+/IWQ7NzaGoE/CpPotqajQ36zjS210dgNWa4XjYHOLS0OUg90E9lcUVDjEH5fwGmIxPgkbJ2KOSk9rbJOaJA+SdDdL8katQyyWo0XMd9p4BKkrsKDEQ9Fanrkgn9e1RJUawoTiW38AGw6lJ293wKzFtXJFARmHGBGNmi497ITNmGz83ZSw5yE7PfmAKzFgIc3Ns1DlrNkV1X9CfC6BD+kIrDgCM4CXyO1UTCGSwdFCm6Zj6Nmj+u4Uhf2LxPzpztIPcKqKRXVDdE5NDbY2CGNSJV1Su1mXHec9QnmY8TecYJxPKlvq7ahOBdgETM9j93JSl10xH0d4A9kvVcc/GJkvq0Mg8w4QI2debPELG/D6mo5Xgd5YLVhn+TnVVefL6JWdbU4+I1H2UQruEo7jAiN/R3J4eEpcTGNMZWV2xsDU8LD4/nGjg4SZVfEig5X0RoUGp3SZ7bM9eqPQs+1Y4U8LgSmtLR4UYp36nDKYCX6RmP83JaW9LiYLlmnrpg40ic+RhisrCzpKCFcVGPc0paZEcZGUilysrsgkEu9OnLfy1tFW2dwuevAGw8uMoQRb+G+fTeR1X3Ry0W9vUUux0Lvs5VhkBk3MiPMMG9fb2/vvkjDVoVYmOiy3BvLHzYUE3erYdGttx89MMPlGM7wNLjcfuD6B6ur84+93Nv76Dztw2zi+FJXDkY1iigcJApRcy8uJMiuRJfGKKlgQBDzc6g2XfI4q2bU3kZBKomRRgzIOg3sbRRn0YwYwg2JvflKGye7Cyr1Tht26QyG1aL9x+8ZKCZTL8xgKCZrPiMNWk9ZGQaZ4U6NXZ6hYtbWnUqEGZSBYsn3tLa2DnbPZxOt4LY7YkCfExWVww8xLwMdtPV64rArYkTP2woy9JivHyAmrx9RxEm1SGXoM6wVIzzh6QhbpyFeb51rTebHaGC9CwK51Ds9i8/bnMn57u7FovKri4vDmHEe2fzJ98mrMChWSEZpsTvWetopjYmTPbdieZiVOK9zd98qdpusc9eR+vvOY0rprrDisK+VWl24bZdKwA2pHbf9XCX4Dkj9U5WAG1Q7rv2FSvAdkPqXKgG3YkTluPbH6sBCLvGq1FcGf+F61P5YX/sTVWChhRu9P2BA1VCH1As/GOVGR3sSh1Ut9W+//fj7vyyjo/8TYABZ2pR1CUUSzAAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua b/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua index e93044c06d..7d23749696 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua @@ -1,283 +1,283 @@ -module("luci.controller.openclash", package.seeall) - -function index() - if not nixio.fs.access("/etc/config/openclash") then - return - end - - - entry({"admin", "services", "openclash"},alias("admin", "services", "openclash", "client"), _("OpenClash"), 50).dependent = true - entry({"admin", "services", "openclash", "client"},form("openclash/client"),_("Overviews"), 20).leaf = true - entry({"admin", "services", "openclash", "status"},call("action_status")).leaf=true - entry({"admin", "services", "openclash", "state"},call("action_state")).leaf=true - entry({"admin", "services", "openclash", "startlog"},call("action_start")).leaf=true - entry({"admin", "services", "openclash", "currentversion"},call("action_currentversion")) - entry({"admin", "services", "openclash", "lastversion"},call("action_lastversion")) - entry({"admin", "services", "openclash", "update"},call("action_update")) - entry({"admin", "services", "openclash", "update_ma"},call("action_update_ma")) - entry({"admin", "services", "openclash", "opupdate"},call("action_opupdate")) - entry({"admin", "services", "openclash", "coreupdate"},call("action_coreupdate")) - entry({"admin", "services", "openclash", "settings"},cbi("openclash/settings"),_("Global Settings"), 30).leaf = true - entry({"admin", "services", "openclash", "servers"},cbi("openclash/servers"),_("Severs&Groups"), 40).leaf = true - entry({"admin", "services", "openclash", "servers-config"},cbi("openclash/servers-config"), nil).leaf = true - entry({"admin", "services", "openclash", "groups-config"},cbi("openclash/groups-config"), nil).leaf = true - entry({"admin", "services", "openclash", "config"},form("openclash/config"),_("Server Config"), 50).leaf = true - entry({"admin", "services", "openclash", "log"},form("openclash/log"),_("Logs"), 60).leaf = true - - -end - - -local function is_running() - return luci.sys.call("pidof clash >/dev/null") == 0 -end - -local function is_web() - return luci.sys.call("pidof clash >/dev/null") == 0 -end - -local function is_watchdog() - return luci.sys.exec("ps |grep openclash_watchdog.sh |grep -v grep 2>/dev/null") -end - -local function config_check() - local yaml = luci.sys.call("ls -l /etc/openclash/config.yaml >/dev/null 2>&1") - local yml = luci.sys.call("ls -l /etc/openclash/config.yml >/dev/null 2>&1") - local proxy,group,rule - if (yaml == 0) then - proxy = luci.sys.call("egrep '^ {0,}Proxy:' /etc/openclash/config.yaml >/dev/null 2>&1") - group = luci.sys.call("egrep '^ {0,}Proxy Group:' /etc/openclash/config.yaml >/dev/null 2>&1") - rule = luci.sys.call("egrep '^ {0,}Rule:' /etc/openclash/config.yaml >/dev/null 2>&1") - else - if (yml == 0) then - proxy = luci.sys.call("egrep '^ {0,}Proxy:' /etc/openclash/config.yml >/dev/null 2>&1") - group = luci.sys.call("egrep '^ {0,}Proxy Group:' /etc/openclash/config.yml >/dev/null 2>&1") - rule = luci.sys.call("egrep '^ {0,}Rule:' /etc/openclash/config.yml >/dev/null 2>&1") - end - end - if (yaml == 0) or (yml == 0) then - if (proxy == 0) then - proxy = "" - else - proxy = " - 代理服务器" - end - if (group == 0) then - group = "" - else - group = " - 策略组" - end - if (rule == 0) then - rule = "" - else - rule = " - 规则" - end - return proxy..group..rule - elseif (yaml ~= 0) and (yml ~= 0) then - return "1" - end -end - -local function cn_port() - return luci.sys.exec("uci get openclash.config.cn_port 2>/dev/null") -end - -local function mode() - return luci.sys.exec("uci get openclash.config.en_mode 2>/dev/null") -end - -local function config() - local config_update = luci.sys.exec("ls -l --full-time /etc/openclash/config.bak 2>/dev/null |awk '{print $6,$7;}'") - if (config_update ~= "") then - return config_update - else - local yaml = luci.sys.call("ls -l /etc/openclash/config.yaml >/dev/null 2>&1") - if (yaml == 0) then - return "0" - else - local yml = luci.sys.call("ls -l /etc/openclash/config.yml >/dev/null 2>&1") - if (yml == 0) then - return "0" - else - return "1" - end - end - end -end - -local function ipdb() - return luci.sys.exec("ls -l --full-time /etc/openclash/Country.mmdb 2>/dev/null |awk '{print $6,$7;}'") -end - -local function lhie1() - return luci.sys.exec("ls -l --full-time /etc/openclash/lhie1.yaml 2>/dev/null |awk '{print $6,$7;}'") -end - -local function ConnersHua() - return luci.sys.exec("ls -l --full-time /etc/openclash/ConnersHua.yaml 2>/dev/null |awk '{print $6,$7;}'") -end - -local function ConnersHua_return() - return luci.sys.exec("ls -l --full-time /etc/openclash/ConnersHua_return.yaml 2>/dev/null |awk '{print $6,$7;}'") -end - -local function daip() - return luci.sys.exec("uci get network.lan.ipaddr") -end - -local function dase() - return luci.sys.exec("uci get openclash.config.dashboard_password 2>/dev/null") -end - -local function check_lastversion() - return luci.sys.exec("sh /usr/share/openclash/openclash_version.sh && sed -n '/^https:/,$p' /tmp/openclash_last_version 2>/dev/null") -end - -local function check_currentversion() - return luci.sys.exec("sed -n '/^data:image/,$p' /etc/openclash/openclash_version 2>/dev/null") -end - -local function startlog() - return luci.sys.exec("sed -n '$p' /tmp/openclash_start.log 2>/dev/null") -end - -local function coremodel() - local coremodel = luci.sys.exec("cat /proc/cpuinfo |grep 'cpu model' 2>/dev/null |awk -F ': ' '{print $2}' 2>/dev/null") - if (coremodel ~= "") then - return coremodel - else - return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") - end -end - -local function coremodel2() - return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") -end - -local function corecv() -if not nixio.fs.access("/etc/openclash/clash") then - return "0" -else - return luci.sys.exec("/etc/openclash/clash -v 2>/dev/null 2>/dev/null |awk -F ' ' '{print $2}'") -end -end - -local function corelv() - return luci.sys.exec("sh /usr/share/openclash/clash_version.sh && sed -n 1p /tmp/clash_last_version 2>/dev/null") -end - -local function opcv() - return luci.sys.exec("sed -n 1p /etc/openclash/openclash_version 2>/dev/null") -end - -local function oplv() - return luci.sys.exec("sh /usr/share/openclash/openclash_version.sh && sed -n 1p /tmp/openclash_last_version 2>/dev/null |sed 's/^v//g' 2>/dev/null") -end - -local function opup() - return luci.sys.exec("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/openclash_version.sh && sh /usr/share/openclash/openclash_update.sh >/dev/null 2>&1 &") -end - -local function coreup() - return luci.sys.exec("uci set openclash.config.enable=1 && uci commit openclash && rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh && sh /usr/share/openclash/openclash_core.sh >/dev/null 2>&1 &") -end - -local function corever() - return luci.sys.exec("uci get openclash.config.core_version 2>/dev/null") -end - -local function upchecktime() - local corecheck = luci.sys.exec("ls -l --full-time /tmp/clash_last_version 2>/dev/null |awk '{print $6,$7;}'") - local opcheck - if not corecheck or corecheck == "" then - opcheck = luci.sys.exec("ls -l --full-time /tmp/openclash_last_version 2>/dev/null |awk '{print $6,$7;}'") - if not opcheck or opcheck == "" then - return "1" - else - return opcheck - end - else - return corecheck - end -end - - -function action_status() - luci.http.prepare_content("application/json") - luci.http.write_json({ - clash = is_running(), - watchdog = is_watchdog(), - daip = daip(), - dase = dase(), - web = is_web(), - cn_port = cn_port(), - mode = mode(); - }) -end -function action_state() - luci.http.prepare_content("application/json") - luci.http.write_json({ - config_check = config_check(), - config = config(), - lhie1 = lhie1(), - ConnersHua = ConnersHua(), - ConnersHua_return = ConnersHua_return(), - ipdb = ipdb(); - }) -end - -function action_lastversion() - luci.http.prepare_content("application/json") - luci.http.write_json({ - lastversion = check_lastversion(); - }) -end - -function action_currentversion() - luci.http.prepare_content("application/json") - luci.http.write_json({ - currentversion = check_currentversion(); - }) -end - -function action_start() - luci.http.prepare_content("application/json") - luci.http.write_json({ - startlog = startlog(); - }) -end - -function action_update() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coremodel = coremodel(), - coremodel2 = coremodel2(), - corecv = corecv(), - corelv = corelv(), - opcv = opcv(), - corever = corever(), - upchecktime = upchecktime(), - oplv = oplv(); - }) -end - -function action_update_ma() - luci.http.prepare_content("application/json") - luci.http.write_json({ - oplv = oplv(), - corever = corever(); - }) -end - -function action_opupdate() - luci.http.prepare_content("application/json") - luci.http.write_json({ - opup = opup(); - }) -end - -function action_coreupdate() - luci.http.prepare_content("application/json") - luci.http.write_json({ - coreup = coreup(); - }) +module("luci.controller.openclash", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/openclash") then + return + end + + + entry({"admin", "services", "openclash"},alias("admin", "services", "openclash", "client"), _("OpenClash"), 50).dependent = true + entry({"admin", "services", "openclash", "client"},form("openclash/client"),_("Overviews"), 20).leaf = true + entry({"admin", "services", "openclash", "status"},call("action_status")).leaf=true + entry({"admin", "services", "openclash", "state"},call("action_state")).leaf=true + entry({"admin", "services", "openclash", "startlog"},call("action_start")).leaf=true + entry({"admin", "services", "openclash", "currentversion"},call("action_currentversion")) + entry({"admin", "services", "openclash", "lastversion"},call("action_lastversion")) + entry({"admin", "services", "openclash", "update"},call("action_update")) + entry({"admin", "services", "openclash", "update_ma"},call("action_update_ma")) + entry({"admin", "services", "openclash", "opupdate"},call("action_opupdate")) + entry({"admin", "services", "openclash", "coreupdate"},call("action_coreupdate")) + entry({"admin", "services", "openclash", "settings"},cbi("openclash/settings"),_("Global Settings"), 30).leaf = true + entry({"admin", "services", "openclash", "servers"},cbi("openclash/servers"),_("Severs&Groups"), 40).leaf = true + entry({"admin", "services", "openclash", "servers-config"},cbi("openclash/servers-config"), nil).leaf = true + entry({"admin", "services", "openclash", "groups-config"},cbi("openclash/groups-config"), nil).leaf = true + entry({"admin", "services", "openclash", "config"},form("openclash/config"),_("Server Config"), 50).leaf = true + entry({"admin", "services", "openclash", "log"},form("openclash/log"),_("Logs"), 60).leaf = true + + +end + + +local function is_running() + return luci.sys.call("pidof clash >/dev/null") == 0 +end + +local function is_web() + return luci.sys.call("pidof clash >/dev/null") == 0 +end + +local function is_watchdog() + return luci.sys.exec("ps |grep openclash_watchdog.sh |grep -v grep 2>/dev/null") +end + +local function config_check() + local yaml = luci.sys.call("ls -l /etc/openclash/config.yaml >/dev/null 2>&1") + local yml = luci.sys.call("ls -l /etc/openclash/config.yml >/dev/null 2>&1") + local proxy,group,rule + if (yaml == 0) then + proxy = luci.sys.call("egrep '^ {0,}Proxy:' /etc/openclash/config.yaml >/dev/null 2>&1") + group = luci.sys.call("egrep '^ {0,}Proxy Group:' /etc/openclash/config.yaml >/dev/null 2>&1") + rule = luci.sys.call("egrep '^ {0,}Rule:' /etc/openclash/config.yaml >/dev/null 2>&1") + else + if (yml == 0) then + proxy = luci.sys.call("egrep '^ {0,}Proxy:' /etc/openclash/config.yml >/dev/null 2>&1") + group = luci.sys.call("egrep '^ {0,}Proxy Group:' /etc/openclash/config.yml >/dev/null 2>&1") + rule = luci.sys.call("egrep '^ {0,}Rule:' /etc/openclash/config.yml >/dev/null 2>&1") + end + end + if (yaml == 0) or (yml == 0) then + if (proxy == 0) then + proxy = "" + else + proxy = " - 代理服务器" + end + if (group == 0) then + group = "" + else + group = " - 策略组" + end + if (rule == 0) then + rule = "" + else + rule = " - 规则" + end + return proxy..group..rule + elseif (yaml ~= 0) and (yml ~= 0) then + return "1" + end +end + +local function cn_port() + return luci.sys.exec("uci get openclash.config.cn_port 2>/dev/null") +end + +local function mode() + return luci.sys.exec("uci get openclash.config.en_mode 2>/dev/null") +end + +local function config() + local config_update = luci.sys.exec("ls -l --full-time /etc/openclash/config.bak 2>/dev/null |awk '{print $6,$7;}'") + if (config_update ~= "") then + return config_update + else + local yaml = luci.sys.call("ls -l /etc/openclash/config.yaml >/dev/null 2>&1") + if (yaml == 0) then + return "0" + else + local yml = luci.sys.call("ls -l /etc/openclash/config.yml >/dev/null 2>&1") + if (yml == 0) then + return "0" + else + return "1" + end + end + end +end + +local function ipdb() + return luci.sys.exec("ls -l --full-time /etc/openclash/Country.mmdb 2>/dev/null |awk '{print $6,$7;}'") +end + +local function lhie1() + return luci.sys.exec("ls -l --full-time /etc/openclash/lhie1.yaml 2>/dev/null |awk '{print $6,$7;}'") +end + +local function ConnersHua() + return luci.sys.exec("ls -l --full-time /etc/openclash/ConnersHua.yaml 2>/dev/null |awk '{print $6,$7;}'") +end + +local function ConnersHua_return() + return luci.sys.exec("ls -l --full-time /etc/openclash/ConnersHua_return.yaml 2>/dev/null |awk '{print $6,$7;}'") +end + +local function daip() + return luci.sys.exec("uci get network.lan.ipaddr") +end + +local function dase() + return luci.sys.exec("uci get openclash.config.dashboard_password 2>/dev/null") +end + +local function check_lastversion() + return luci.sys.exec("sh /usr/share/openclash/openclash_version.sh && sed -n '/^https:/,$p' /tmp/openclash_last_version 2>/dev/null") +end + +local function check_currentversion() + return luci.sys.exec("sed -n '/^data:image/,$p' /etc/openclash/openclash_version 2>/dev/null") +end + +local function startlog() + return luci.sys.exec("sed -n '$p' /tmp/openclash_start.log 2>/dev/null") +end + +local function coremodel() + local coremodel = luci.sys.exec("cat /proc/cpuinfo |grep 'cpu model' 2>/dev/null |awk -F ': ' '{print $2}' 2>/dev/null") + if (coremodel ~= "") then + return coremodel + else + return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") + end +end + +local function coremodel2() + return luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") +end + +local function corecv() +if not nixio.fs.access("/etc/openclash/clash") then + return "0" +else + return luci.sys.exec("/etc/openclash/clash -v 2>/dev/null 2>/dev/null |awk -F ' ' '{print $2}'") +end +end + +local function corelv() + return luci.sys.exec("sh /usr/share/openclash/clash_version.sh && sed -n 1p /tmp/clash_last_version 2>/dev/null") +end + +local function opcv() + return luci.sys.exec("sed -n 1p /etc/openclash/openclash_version 2>/dev/null") +end + +local function oplv() + return luci.sys.exec("sh /usr/share/openclash/openclash_version.sh && sed -n 1p /tmp/openclash_last_version 2>/dev/null |sed 's/^v//g' 2>/dev/null") +end + +local function opup() + return luci.sys.exec("rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/openclash_version.sh && sh /usr/share/openclash/openclash_update.sh >/dev/null 2>&1 &") +end + +local function coreup() + return luci.sys.exec("uci set openclash.config.enable=1 && uci commit openclash && rm -rf /tmp/*_last_version 2>/dev/null && sh /usr/share/openclash/clash_version.sh && sh /usr/share/openclash/openclash_core.sh >/dev/null 2>&1 &") +end + +local function corever() + return luci.sys.exec("uci get openclash.config.core_version 2>/dev/null") +end + +local function upchecktime() + local corecheck = luci.sys.exec("ls -l --full-time /tmp/clash_last_version 2>/dev/null |awk '{print $6,$7;}'") + local opcheck + if not corecheck or corecheck == "" then + opcheck = luci.sys.exec("ls -l --full-time /tmp/openclash_last_version 2>/dev/null |awk '{print $6,$7;}'") + if not opcheck or opcheck == "" then + return "1" + else + return opcheck + end + else + return corecheck + end +end + + +function action_status() + luci.http.prepare_content("application/json") + luci.http.write_json({ + clash = is_running(), + watchdog = is_watchdog(), + daip = daip(), + dase = dase(), + web = is_web(), + cn_port = cn_port(), + mode = mode(); + }) +end +function action_state() + luci.http.prepare_content("application/json") + luci.http.write_json({ + config_check = config_check(), + config = config(), + lhie1 = lhie1(), + ConnersHua = ConnersHua(), + ConnersHua_return = ConnersHua_return(), + ipdb = ipdb(); + }) +end + +function action_lastversion() + luci.http.prepare_content("application/json") + luci.http.write_json({ + lastversion = check_lastversion(); + }) +end + +function action_currentversion() + luci.http.prepare_content("application/json") + luci.http.write_json({ + currentversion = check_currentversion(); + }) +end + +function action_start() + luci.http.prepare_content("application/json") + luci.http.write_json({ + startlog = startlog(); + }) +end + +function action_update() + luci.http.prepare_content("application/json") + luci.http.write_json({ + coremodel = coremodel(), + coremodel2 = coremodel2(), + corecv = corecv(), + corelv = corelv(), + opcv = opcv(), + corever = corever(), + upchecktime = upchecktime(), + oplv = oplv(); + }) +end + +function action_update_ma() + luci.http.prepare_content("application/json") + luci.http.write_json({ + oplv = oplv(), + corever = corever(); + }) +end + +function action_opupdate() + luci.http.prepare_content("application/json") + luci.http.write_json({ + opup = opup(); + }) +end + +function action_coreupdate() + luci.http.prepare_content("application/json") + luci.http.write_json({ + coreup = coreup(); + }) end \ No newline at end of file diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua index b8ae7b32eb..a128244c04 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/client.lua @@ -1,50 +1,50 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local uci = require("luci.model.uci").cursor() - -local t = { - {enable, disable} -} - -a = SimpleForm("apply") -a.reset = false -a.submit = false -s = a:section(Table, t) - -o = s:option(Button, "enable") -o.inputtitle = translate("Enable Clash") -o.inputstyle = "apply" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") -end - -o = s:option(Button, "disable") -o.inputtitle = translate("Disable Clash") -o.inputstyle = "reset" -o.write = function() - uci:set("openclash", "config", "enable", 0) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash stop >/dev/null 2>&1 &") -end - -m = Map("openclash") -m.title = translate("OpenClash") -m.description = translate("A Clash Client For OpenWrt") -m.pageaction = false - -m:section(SimpleSection).template = "openclash/status" -m:section(SimpleSection).template = "openclash/state" -m:section(SimpleSection).template = "openclash/myip" - -d = Map("openclash") -d.title = translate("Technical Support") -d.pageaction = false -d:section(SimpleSection).template = "openclash/developer" - -return m, a, d + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" +local uci = require("luci.model.uci").cursor() + +local t = { + {enable, disable} +} + +a = SimpleForm("apply") +a.reset = false +a.submit = false +s = a:section(Table, t) + +o = s:option(Button, "enable") +o.inputtitle = translate("Enable Clash") +o.inputstyle = "apply" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") +end + +o = s:option(Button, "disable") +o.inputtitle = translate("Disable Clash") +o.inputstyle = "reset" +o.write = function() + uci:set("openclash", "config", "enable", 0) + uci:commit("openclash") + SYS.call("/etc/init.d/openclash stop >/dev/null 2>&1 &") +end + +m = Map("openclash") +m.title = translate("OpenClash") +m.description = translate("A Clash Client For OpenWrt") +m.pageaction = false + +m:section(SimpleSection).template = "openclash/status" +m:section(SimpleSection).template = "openclash/state" +m:section(SimpleSection).template = "openclash/myip" + +d = Map("openclash") +d.title = translate("Technical Support") +d.pageaction = false +d:section(SimpleSection).template = "openclash/developer" + +return m, a, d diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua index 84902c3488..e0f3e87602 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/config.lua @@ -1,157 +1,157 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local fs = require "luci.openclash" -local CHIF = "0" - -ful = SimpleForm("upload", translate("Server Configuration"), nil) -ful.reset = false -ful.submit = false - -sul =ful:section(SimpleSection, "") -o = sul:option(FileUpload, "") -o.template = "openclash/upload" -um = sul:option(DummyValue, "", nil) -um.template = "openclash/dvalue" - -local dir, fd, clash -clash = "/etc/openclash/clash" -dir = "/etc/openclash/" -HTTP.setfilehandler( - function(meta, chunk, eof) - if not fd then - if not meta then return end - - if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end - - if not fd then - um.value = translate("upload file error.") - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - fd = nil - if (meta.file == "config.yml") then - SYS.call("cp /etc/openclash/config.yml /etc/openclash/config.bak") - SYS.call("mv /etc/openclash/config.yml /etc/openclash/config.yaml") - elseif (meta.file == "config.yaml") then - SYS.call("cp /etc/openclash/config.yaml /etc/openclash/config.bak") - end - if (meta.file == "clash") then - NXFS.chmod(clash, 755) - end - um.value = translate("File saved to") .. ' "/etc/openclash"' - CHIF = "1" - end - end -) - -if HTTP.formvalue("upload") then - local f = HTTP.formvalue("ulfile") - if #f <= 0 then - um.value = translate("No specify upload file.") - end -end - -m = SimpleForm("openclash") -m.reset = false -m.submit = false - -local tab = { - {user, default} -} - -s = m:section(Table, tab) - -local conf = "/etc/openclash/config.yaml" -local yconf = "/etc/openclash/config.yml" -local dconf = "/etc/openclash/default.yaml" -local bconf = "/etc/openclash/config.bak" - -sev = s:option(Value, "user") -sev.template = "cbi/tvalue" -sev.description = translate("You Can Modify config file Here, Except The Settings That Were Taken Over") -sev.rows = 20 -sev.wrap = "off" -sev.cfgvalue = function(self, section) - return NXFS.readfile(conf) or NXFS.readfile(yconf) or NXFS.readfile(bconf) or NXFS.readfile(dconf) or "" -end -sev.write = function(self, section, value) -if (CHIF == "0") then - value = value:gsub("\r\n?", "\n") - NXFS.writefile("/etc/openclash/config.yaml", value) -end -end - -def = s:option(Value, "default") -def.template = "cbi/tvalue" -def.description = translate("Default Config File With Correct General-Settings") -def.rows = 20 -def.wrap = "off" -def.readonly = true -def.cfgvalue = function(self, section) - return NXFS.readfile(dconf) or "" -end -def.write = function(self, section, value) -end - - -local t = { - {Commit, Apply, Download} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - SYS.call("uci commit openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - SYS.call("uci set openclash.config.enable=1 && uci commit openclash && /etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = a:option(Button, "Download") -o.inputtitle = translate("Download Configurations") -o.inputstyle = "apply" -o.write = function () - local sPath, sFile, fd, block - sPath = "/etc/openclash/config.yaml" - sFile = NXFS.basename(sPath) - if fs.isdirectory(sPath) then - fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") - sFile = sFile .. ".tar.gz" - else - fd = nixio.open(sPath, "r") - end - if not fd then - return - end - HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) - HTTP.prepare_content("application/octet-stream") - while true do - block = fd:read(nixio.const.buffersize) - if (not block) or (#block ==0) then - break - else - HTTP.write(block) - end - end - fd:close() - HTTP.close() -end - -return ful , m + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" +local fs = require "luci.openclash" +local CHIF = "0" + +ful = SimpleForm("upload", translate("Server Configuration"), nil) +ful.reset = false +ful.submit = false + +sul =ful:section(SimpleSection, "") +o = sul:option(FileUpload, "") +o.template = "openclash/upload" +um = sul:option(DummyValue, "", nil) +um.template = "openclash/dvalue" + +local dir, fd, clash +clash = "/etc/openclash/clash" +dir = "/etc/openclash/" +HTTP.setfilehandler( + function(meta, chunk, eof) + if not fd then + if not meta then return end + + if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end + + if not fd then + um.value = translate("upload file error.") + return + end + end + if chunk and fd then + fd:write(chunk) + end + if eof and fd then + fd:close() + fd = nil + if (meta.file == "config.yml") then + SYS.call("cp /etc/openclash/config.yml /etc/openclash/config.bak") + SYS.call("mv /etc/openclash/config.yml /etc/openclash/config.yaml") + elseif (meta.file == "config.yaml") then + SYS.call("cp /etc/openclash/config.yaml /etc/openclash/config.bak") + end + if (meta.file == "clash") then + NXFS.chmod(clash, 755) + end + um.value = translate("File saved to") .. ' "/etc/openclash"' + CHIF = "1" + end + end +) + +if HTTP.formvalue("upload") then + local f = HTTP.formvalue("ulfile") + if #f <= 0 then + um.value = translate("No specify upload file.") + end +end + +m = SimpleForm("openclash") +m.reset = false +m.submit = false + +local tab = { + {user, default} +} + +s = m:section(Table, tab) + +local conf = "/etc/openclash/config.yaml" +local yconf = "/etc/openclash/config.yml" +local dconf = "/etc/openclash/default.yaml" +local bconf = "/etc/openclash/config.bak" + +sev = s:option(Value, "user") +sev.template = "cbi/tvalue" +sev.description = translate("You Can Modify config file Here, Except The Settings That Were Taken Over") +sev.rows = 20 +sev.wrap = "off" +sev.cfgvalue = function(self, section) + return NXFS.readfile(conf) or NXFS.readfile(yconf) or NXFS.readfile(bconf) or NXFS.readfile(dconf) or "" +end +sev.write = function(self, section, value) +if (CHIF == "0") then + value = value:gsub("\r\n?", "\n") + NXFS.writefile("/etc/openclash/config.yaml", value) +end +end + +def = s:option(Value, "default") +def.template = "cbi/tvalue" +def.description = translate("Default Config File With Correct General-Settings") +def.rows = 20 +def.wrap = "off" +def.readonly = true +def.cfgvalue = function(self, section) + return NXFS.readfile(dconf) or "" +end +def.write = function(self, section, value) +end + + +local t = { + {Commit, Apply, Download} +} + +a = m:section(Table, t) + +o = a:option(Button, "Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + SYS.call("uci commit openclash") +end + +o = a:option(Button, "Apply") +o.inputtitle = translate("Apply Configurations") +o.inputstyle = "apply" +o.write = function() + SYS.call("uci set openclash.config.enable=1 && uci commit openclash && /etc/init.d/openclash restart >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +o = a:option(Button, "Download") +o.inputtitle = translate("Download Configurations") +o.inputstyle = "apply" +o.write = function () + local sPath, sFile, fd, block + sPath = "/etc/openclash/config.yaml" + sFile = NXFS.basename(sPath) + if fs.isdirectory(sPath) then + fd = io.popen('tar -C "%s" -cz .' % {sPath}, "r") + sFile = sFile .. ".tar.gz" + else + fd = nixio.open(sPath, "r") + end + if not fd then + return + end + HTTP.header('Content-Disposition', 'attachment; filename="%s"' % {sFile}) + HTTP.prepare_content("application/octet-stream") + while true do + block = fd:read(nixio.const.buffersize) + if (not block) or (#block ==0) then + break + else + HTTP.write(block) + end + end + fd:close() + HTTP.close() +end + +return ful , m diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/groups-config.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/groups-config.lua index d22d192068..4d5dd6ac18 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/groups-config.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/groups-config.lua @@ -1,85 +1,85 @@ --- Copyright (C) 2017 yushi studio github.com/ywb94 --- Licensed to the public under the GNU General Public License v3. - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "nixio.fs" -local sys = require "luci.sys" -local sid = arg[1] - - -m = Map(openclash, translate("Edit Group")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") -if m.uci:get(openclash, sid) ~= "groups" then - luci.http.redirect(m.redirect) - return -end - --- [[ Groups Setting ]]-- -s = m:section(NamedSection, sid, "groups") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "type", translate("Group Type")) -o.rmempty = true -o.description = translate("Choose The Operation Mode") -o:value("select", translate("Select")) -o:value("url-test", translate("URL-Test")) -o:value("fallback", translate("Fallback")) -o:value("load-balance", translate("Load-Balance")) - -o = s:option(Value, "name", translate("Group Name")) -o.rmempty = false - -o = s:option(Value, "test_url", translate("Test URL")) -o.default = "http://www.gstatic.com/generate_204" -o.rmempty = true -o:depends("type", "url-test") -o:depends("type", "fallback") -o:depends("type", "load-balance") - -o = s:option(Value, "test_interval", translate("Test Interval(s)")) -o.default = "300" -o.rmempty = true -o:depends("type", "url-test") -o:depends("type", "fallback") -o:depends("type", "load-balance") - -o = s:option(DynamicList, "other_group", translate("Other Group")) -o.description = translate("The added Proxy Groups Must Exist") -uci:foreach("openclash", "groups", - function(s) - if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(openclash, sid, "name") then - o:value(s.name) - end - end) -o:value("DIRECT") -o:value("REJECT") -o:depends("type", "select") -o.rmempty = true - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - uci:commit(openclash, sid) - sys.call("/usr/share/openclash/yml_groups_name_ch.sh start") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - uci:revert(openclash, sid) - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -return m +-- Copyright (C) 2017 yushi studio github.com/ywb94 +-- Licensed to the public under the GNU General Public License v3. + +local m, s, o +local openclash = "openclash" +local uci = luci.model.uci.cursor() +local fs = require "nixio.fs" +local sys = require "luci.sys" +local sid = arg[1] + + +m = Map(openclash, translate("Edit Group")) +m.pageaction = false +m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") +if m.uci:get(openclash, sid) ~= "groups" then + luci.http.redirect(m.redirect) + return +end + +-- [[ Groups Setting ]]-- +s = m:section(NamedSection, sid, "groups") +s.anonymous = true +s.addremove = false + +o = s:option(ListValue, "type", translate("Group Type")) +o.rmempty = true +o.description = translate("Choose The Operation Mode") +o:value("select", translate("Select")) +o:value("url-test", translate("URL-Test")) +o:value("fallback", translate("Fallback")) +o:value("load-balance", translate("Load-Balance")) + +o = s:option(Value, "name", translate("Group Name")) +o.rmempty = false + +o = s:option(Value, "test_url", translate("Test URL")) +o.default = "http://www.gstatic.com/generate_204" +o.rmempty = true +o:depends("type", "url-test") +o:depends("type", "fallback") +o:depends("type", "load-balance") + +o = s:option(Value, "test_interval", translate("Test Interval(s)")) +o.default = "300" +o.rmempty = true +o:depends("type", "url-test") +o:depends("type", "fallback") +o:depends("type", "load-balance") + +o = s:option(DynamicList, "other_group", translate("Other Group")) +o.description = translate("The added Proxy Groups Must Exist") +uci:foreach("openclash", "groups", + function(s) + if s.name ~= "" and s.name ~= nil and s.name ~= m.uci:get(openclash, sid, "name") then + o:value(s.name) + end + end) +o:value("DIRECT") +o:value("REJECT") +o:depends("type", "select") +o.rmempty = true + +local t = { + {Commit, Back} +} +a = m:section(Table, t) + +o = a:option(Button,"Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + uci:commit(openclash, sid) + sys.call("/usr/share/openclash/yml_groups_name_ch.sh start") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +o = a:option(Button,"Back") +o.inputtitle = translate("Back Configurations") +o.inputstyle = "reset" +o.write = function() + uci:revert(openclash, sid) + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +return m diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua index d943fc4710..28d7d6014d 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua @@ -1,27 +1,27 @@ --- -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" - - -m = Map("openclash", translate("Server logs")) -s = m:section(TypedSection, "openclash") -m.pageaction = false -s.anonymous = true -s.addremove=false - -local clog = "/tmp/openclash.log" -log = s:option(TextValue, "clog") -log.readonly=true -log.description = translate("") -log.rows = 29 -log.wrap = "off" -log.cfgvalue = function(self, section) - return NXFS.readfile(clog) or "" -end -log.write = function(self, section, value) -end - +-- +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" + + +m = Map("openclash", translate("Server logs")) +s = m:section(TypedSection, "openclash") +m.pageaction = false +s.anonymous = true +s.addremove=false + +local clog = "/tmp/openclash.log" +log = s:option(TextValue, "clog") +log.readonly=true +log.description = translate("") +log.rows = 29 +log.wrap = "off" +log.cfgvalue = function(self, section) + return NXFS.readfile(clog) or "" +end +log.write = function(self, section, value) +end + return m \ No newline at end of file diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua index 322c46a25f..d2d78046e0 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers-config.lua @@ -1,210 +1,210 @@ --- Copyright (C) 2017 yushi studio github.com/ywb94 --- Licensed to the public under the GNU General Public License v3. - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() -local fs = require "nixio.fs" -local sys = require "luci.sys" -local sid = arg[1] -local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") - -local encrypt_methods_ss = { - -- aead - "AEAD_AES_128_GCM", - "AEAD_AES_192_GCM", - "AEAD_AES_256_GCM", - "AEAD_CHACHA20_POLY1305", - - -- stream - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20", - "chacha20-ietf", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305", -} - -local securitys = { - "auto", - "none", - "aes-128-gcm", - "chacha20-poly1305" -} - -m = Map(openclash, translate("Edit Server")) -m.pageaction = false -m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") - -if m.uci:get(openclash, sid) ~= "servers" then - luci.http.redirect(m.redirect) - return -end - --- [[ Servers Setting ]] -- -s = m:section(NamedSection, sid, "servers") -s.anonymous = true -s.addremove = false - -o = s:option(ListValue, "type", translate("Server Node Type")) -o:value("ss", translate("Shadowsocks")) -o:value("vmess", translate("Vmess")) -o:value("socks5", translate("Socks5")) -o:value("http", translate("HTTP(S)")) - -o.description = translate("Using incorrect encryption mothod may causes service fail to start") - -o = s:option(Value, "name", translate("Server Alias")) -o.rmempty = false - -o = s:option(Value, "server", translate("Server Address")) -o.datatype = "host" -o.rmempty = false - -o = s:option(Value, "port", translate("Server Port")) -o.datatype = "port" -o.rmempty = false - -o = s:option(Value, "password", translate("Password")) -o.password = true -o.rmempty = true -o:depends("type", "ss") - -o = s:option(ListValue, "cipher", translate("Encrypt Method")) -for _, v in ipairs(encrypt_methods_ss) do o:value(v) end -o.rmempty = true -o:depends("type", "ss") - -o = s:option(ListValue, "securitys", translate("Encrypt Method")) -for _, v in ipairs(securitys) do o:value(v, v:upper()) end -o.rmempty = true -o:depends("type", "vmess") - -o = s:option(ListValue, "udp", translate("UDP Enable")) -o.rmempty = false -o.default = "false" -o:value("true") -o:value("false") -o:depends("type", "ss") - -o = s:option(ListValue, "obfs", translate("obfs-mode")) -o.rmempty = false -o.default = "none" -o:value("none") -o:value("tls") -o:value("http") -o:value("websocket", translate("websocket (ws)")) -o:depends("type", "ss") - -o = s:option(ListValue, "obfs_vmess", translate("obfs-mode")) -o.rmempty = false -o.default = "none" -o:value("none") -o:value("websocket", translate("websocket (ws)")) -o:depends("type", "vmess") - -o = s:option(Value, "host", translate("obfs-hosts")) -o.datatype = "host" -o.rmempty = true -o:depends("obfs", "tls") -o:depends("obfs", "http") -o:depends("obfs", "websocket") - -o = s:option(Value, "custom", translate("ws-headers")) -o.rmempty = true -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "websocket") - --- [[ WS部分 ]]-- - --- WS路径 -o = s:option(Value, "path", translate("ws-path")) -o.rmempty = true -o:depends("obfs", "websocket") -o:depends("obfs_vmess", "websocket") - --- AlterId -o = s:option(Value, "alterId", translate("AlterId")) -o.datatype = "port" -o.default = 16 -o.rmempty = true -o:depends("type", "vmess") - --- VmessId -o = s:option(Value, "uuid", translate("VmessId (UUID)")) -o.rmempty = true -o.default = uuid -o:depends("type", "vmess") - --- 验证用户名 -o = s:option(Value, "auth_name", translate("Auth Username")) -o:depends("type", "socks5") -o:depends("type", "http") -o.rmempty = true - --- 验证密码 -o = s:option(Value, "auth_pass", translate("Auth Password")) -o:depends("type", "socks5") -o:depends("type", "http") -o.rmempty = true - --- [[ skip-cert-verify ]]-- -o = s:option(ListValue, "skip_cert_verify", translate("Skip Cert Verify")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") -o:depends("type", "vmess") -o:depends("type", "socks5") -o:depends("type", "http") - --- [[ TLS ]]-- -o = s:option(ListValue, "tls", translate("TLS")) -o.rmempty = true -o.default = "false" -o:value("true") -o:value("false") -o:depends("obfs", "websocket") -o:depends("type", "vmess") -o:depends("type", "socks5") -o:depends("type", "http") - -o = s:option(DynamicList, "groups", translate("Proxy Group")) -o.description = translate("No Need Set when Config Create, The added Proxy Groups Must Exist") -o.rmempty = true -uci:foreach("openclash", "groups", - function(s) - o:value(s.name) - end) - -local t = { - {Commit, Back} -} -a = m:section(Table, t) - -o = a:option(Button,"Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - uci:commit(openclash, sid) - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = a:option(Button,"Back") -o.inputtitle = translate("Back Configurations") -o.inputstyle = "reset" -o.write = function() - uci:revert(openclash, sid) - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -return m +-- Copyright (C) 2017 yushi studio github.com/ywb94 +-- Licensed to the public under the GNU General Public License v3. + +local m, s, o +local openclash = "openclash" +local uci = luci.model.uci.cursor() +local fs = require "nixio.fs" +local sys = require "luci.sys" +local sid = arg[1] +local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") + +local encrypt_methods_ss = { + -- aead + "AEAD_AES_128_GCM", + "AEAD_AES_192_GCM", + "AEAD_AES_256_GCM", + "AEAD_CHACHA20_POLY1305", + + -- stream + "rc4-md5", + "aes-128-cfb", + "aes-192-cfb", + "aes-256-cfb", + "aes-128-ctr", + "aes-192-ctr", + "aes-256-ctr", + "aes-128-gcm", + "aes-192-gcm", + "aes-256-gcm", + "chacha20", + "chacha20-ietf", + "chacha20-ietf-poly1305", + "xchacha20-ietf-poly1305", +} + +local securitys = { + "auto", + "none", + "aes-128-gcm", + "chacha20-poly1305" +} + +m = Map(openclash, translate("Edit Server")) +m.pageaction = false +m.redirect = luci.dispatcher.build_url("admin/services/openclash/servers") + +if m.uci:get(openclash, sid) ~= "servers" then + luci.http.redirect(m.redirect) + return +end + +-- [[ Servers Setting ]] -- +s = m:section(NamedSection, sid, "servers") +s.anonymous = true +s.addremove = false + +o = s:option(ListValue, "type", translate("Server Node Type")) +o:value("ss", translate("Shadowsocks")) +o:value("vmess", translate("Vmess")) +o:value("socks5", translate("Socks5")) +o:value("http", translate("HTTP(S)")) + +o.description = translate("Using incorrect encryption mothod may causes service fail to start") + +o = s:option(Value, "name", translate("Server Alias")) +o.rmempty = false + +o = s:option(Value, "server", translate("Server Address")) +o.datatype = "host" +o.rmempty = false + +o = s:option(Value, "port", translate("Server Port")) +o.datatype = "port" +o.rmempty = false + +o = s:option(Value, "password", translate("Password")) +o.password = true +o.rmempty = true +o:depends("type", "ss") + +o = s:option(ListValue, "cipher", translate("Encrypt Method")) +for _, v in ipairs(encrypt_methods_ss) do o:value(v) end +o.rmempty = true +o:depends("type", "ss") + +o = s:option(ListValue, "securitys", translate("Encrypt Method")) +for _, v in ipairs(securitys) do o:value(v, v:upper()) end +o.rmempty = true +o:depends("type", "vmess") + +o = s:option(ListValue, "udp", translate("UDP Enable")) +o.rmempty = false +o.default = "false" +o:value("true") +o:value("false") +o:depends("type", "ss") + +o = s:option(ListValue, "obfs", translate("obfs-mode")) +o.rmempty = false +o.default = "none" +o:value("none") +o:value("tls") +o:value("http") +o:value("websocket", translate("websocket (ws)")) +o:depends("type", "ss") + +o = s:option(ListValue, "obfs_vmess", translate("obfs-mode")) +o.rmempty = false +o.default = "none" +o:value("none") +o:value("websocket", translate("websocket (ws)")) +o:depends("type", "vmess") + +o = s:option(Value, "host", translate("obfs-hosts")) +o.datatype = "host" +o.rmempty = true +o:depends("obfs", "tls") +o:depends("obfs", "http") +o:depends("obfs", "websocket") + +o = s:option(Value, "custom", translate("ws-headers")) +o.rmempty = true +o:depends("obfs", "websocket") +o:depends("obfs_vmess", "websocket") + +-- [[ WS部分 ]]-- + +-- WS路径 +o = s:option(Value, "path", translate("ws-path")) +o.rmempty = true +o:depends("obfs", "websocket") +o:depends("obfs_vmess", "websocket") + +-- AlterId +o = s:option(Value, "alterId", translate("AlterId")) +o.datatype = "port" +o.default = 16 +o.rmempty = true +o:depends("type", "vmess") + +-- VmessId +o = s:option(Value, "uuid", translate("VmessId (UUID)")) +o.rmempty = true +o.default = uuid +o:depends("type", "vmess") + +-- 验证用户名 +o = s:option(Value, "auth_name", translate("Auth Username")) +o:depends("type", "socks5") +o:depends("type", "http") +o.rmempty = true + +-- 验证密码 +o = s:option(Value, "auth_pass", translate("Auth Password")) +o:depends("type", "socks5") +o:depends("type", "http") +o.rmempty = true + +-- [[ skip-cert-verify ]]-- +o = s:option(ListValue, "skip_cert_verify", translate("Skip Cert Verify")) +o.rmempty = true +o.default = "false" +o:value("true") +o:value("false") +o:depends("obfs", "websocket") +o:depends("type", "vmess") +o:depends("type", "socks5") +o:depends("type", "http") + +-- [[ TLS ]]-- +o = s:option(ListValue, "tls", translate("TLS")) +o.rmempty = true +o.default = "false" +o:value("true") +o:value("false") +o:depends("obfs", "websocket") +o:depends("type", "vmess") +o:depends("type", "socks5") +o:depends("type", "http") + +o = s:option(DynamicList, "groups", translate("Proxy Group")) +o.description = translate("No Need Set when Config Create, The added Proxy Groups Must Exist") +o.rmempty = true +uci:foreach("openclash", "groups", + function(s) + o:value(s.name) + end) + +local t = { + {Commit, Back} +} +a = m:section(Table, t) + +o = a:option(Button,"Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + uci:commit(openclash, sid) + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +o = a:option(Button,"Back") +o.inputtitle = translate("Back Configurations") +o.inputstyle = "reset" +o.write = function() + uci:revert(openclash, sid) + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +return m diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua index e762adbfe0..5281181f55 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/servers.lua @@ -1,149 +1,149 @@ --- Licensed to the public under the GNU General Public License v3. - -local m, s, o -local openclash = "openclash" -local uci = luci.model.uci.cursor() - - -m = Map(openclash, translate("Servers manage and Config create")) -m.pageaction = false - -s = m:section(TypedSection, "openclash") -s.anonymous = true - -o = s:option(Flag, "create_config", translate("Create Config")) -o.description = translate("Create Config By One-Click Only Need Proxys") -o.default = 0 - -o = s:option(ListValue, "rule_sources", translate("Choose Template For Create Config")) -o.description = translate("Use Other Rules To Create Config") -o:depends("create_config", 1) -o:value("lhie1", translate("lhie1 Rules")) -o:value("ConnersHua", translate("ConnersHua Rules")) -o:value("ConnersHua_return", translate("ConnersHua Return Rules")) - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - uci:commit("openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - local refresh_config = uci:get("openclash", "config", "create_config") - if (refresh_config == "1") then - luci.sys.call("/usr/share/openclash/yml_proxys_set.sh >/dev/null 2>&1") - uci:delete_all("openclash", "servers", function(s) return true end) - uci:delete_all("openclash", "groups", function(s) return true end) - luci.sys.call("sh /usr/share/openclash/yml_groups_get.sh >/dev/null 2>&1 &") - else - luci.sys.call("/usr/share/openclash/yml_proxys_set.sh >/dev/null 2>&1 &") - end - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash")) -end - -local tt = { - {Load_Config, Delete_Severs, Delete_Groups} -} -b = m:section(Table, tt) - -o = b:option(Button,"Load_Config") -o.inputtitle = translate("Load Config") -o.inputstyle = "apply" -o.write = function() - uci:delete_all("openclash", "servers", function(s) return true end) - uci:delete_all("openclash", "groups", function(s) return true end) - luci.sys.call("sh /usr/share/openclash/yml_groups_get.sh 2>/dev/null") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Severs") -o.inputtitle = translate("Delete Severs") -o.inputstyle = "reset" -o.write = function() - uci:delete_all("openclash", "servers", function(s) return true end) - luci.sys.call("uci commit openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - -o = b:option(Button,"Delete_Groups") -o.inputtitle = translate("Delete Groups") -o.inputstyle = "reset" -o.write = function() - uci:delete_all("openclash", "groups", function(s) return true end) - luci.sys.call("uci commit openclash") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) -end - --- [[ Groups Manage ]]-- -s = m:section(TypedSection, "groups", translate("Proxy Groups(No Need Set when Config Create)")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/groups-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(DummyValue, "type", translate("Group Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Group Name")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - --- [[ Servers Manage ]]-- -s = m:section(TypedSection, "servers", translate("Proxys")) -s.anonymous = true -s.addremove = true -s.sortable = true -s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/openclash/servers-config/%s") -function s.create(...) - local sid = TypedSection.create(...) - if sid then - luci.http.redirect(s.extedit % sid) - return - end -end - -o = s:option(DummyValue, "type", translate("Type")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "name", translate("Server Alias")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "server", translate("Server Address")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -o = s:option(DummyValue, "port", translate("Server Port")) -function o.cfgvalue(...) - return Value.cfgvalue(...) or translate("None") -end - -return m +-- Licensed to the public under the GNU General Public License v3. + +local m, s, o +local openclash = "openclash" +local uci = luci.model.uci.cursor() + + +m = Map(openclash, translate("Servers manage and Config create")) +m.pageaction = false + +s = m:section(TypedSection, "openclash") +s.anonymous = true + +o = s:option(Flag, "create_config", translate("Create Config")) +o.description = translate("Create Config By One-Click Only Need Proxys") +o.default = 0 + +o = s:option(ListValue, "rule_sources", translate("Choose Template For Create Config")) +o.description = translate("Use Other Rules To Create Config") +o:depends("create_config", 1) +o:value("lhie1", translate("lhie1 Rules")) +o:value("ConnersHua", translate("ConnersHua Rules")) +o:value("ConnersHua_return", translate("ConnersHua Return Rules")) + +local t = { + {Commit, Apply} +} + +a = m:section(Table, t) + +o = a:option(Button, "Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + uci:commit("openclash") +end + +o = a:option(Button, "Apply") +o.inputtitle = translate("Apply Configurations") +o.inputstyle = "apply" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + local refresh_config = uci:get("openclash", "config", "create_config") + if (refresh_config == "1") then + luci.sys.call("/usr/share/openclash/yml_proxys_set.sh >/dev/null 2>&1") + uci:delete_all("openclash", "servers", function(s) return true end) + uci:delete_all("openclash", "groups", function(s) return true end) + luci.sys.call("sh /usr/share/openclash/yml_groups_get.sh >/dev/null 2>&1 &") + else + luci.sys.call("/usr/share/openclash/yml_proxys_set.sh >/dev/null 2>&1 &") + end + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash")) +end + +local tt = { + {Load_Config, Delete_Severs, Delete_Groups} +} +b = m:section(Table, tt) + +o = b:option(Button,"Load_Config") +o.inputtitle = translate("Load Config") +o.inputstyle = "apply" +o.write = function() + uci:delete_all("openclash", "servers", function(s) return true end) + uci:delete_all("openclash", "groups", function(s) return true end) + luci.sys.call("sh /usr/share/openclash/yml_groups_get.sh 2>/dev/null") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +o = b:option(Button,"Delete_Severs") +o.inputtitle = translate("Delete Severs") +o.inputstyle = "reset" +o.write = function() + uci:delete_all("openclash", "servers", function(s) return true end) + luci.sys.call("uci commit openclash") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +o = b:option(Button,"Delete_Groups") +o.inputtitle = translate("Delete Groups") +o.inputstyle = "reset" +o.write = function() + uci:delete_all("openclash", "groups", function(s) return true end) + luci.sys.call("uci commit openclash") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "openclash", "servers")) +end + +-- [[ Groups Manage ]]-- +s = m:section(TypedSection, "groups", translate("Proxy Groups(No Need Set when Config Create)")) +s.anonymous = true +s.addremove = true +s.sortable = true +s.template = "cbi/tblsection" +s.extedit = luci.dispatcher.build_url("admin/services/openclash/groups-config/%s") +function s.create(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(s.extedit % sid) + return + end +end + +o = s:option(DummyValue, "type", translate("Group Type")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +o = s:option(DummyValue, "name", translate("Group Name")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +-- [[ Servers Manage ]]-- +s = m:section(TypedSection, "servers", translate("Proxys")) +s.anonymous = true +s.addremove = true +s.sortable = true +s.template = "cbi/tblsection" +s.extedit = luci.dispatcher.build_url("admin/services/openclash/servers-config/%s") +function s.create(...) + local sid = TypedSection.create(...) + if sid then + luci.http.redirect(s.extedit % sid) + return + end +end + +o = s:option(DummyValue, "type", translate("Type")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +o = s:option(DummyValue, "name", translate("Server Alias")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +o = s:option(DummyValue, "server", translate("Server Address")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +o = s:option(DummyValue, "port", translate("Server Port")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + +return m diff --git a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua index e1edb76b98..b2bf1dc0f1 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua @@ -1,472 +1,472 @@ - -local NXFS = require "nixio.fs" -local SYS = require "luci.sys" -local HTTP = require "luci.http" -local DISP = require "luci.dispatcher" -local UTIL = require "luci.util" -local uci = require("luci.model.uci").cursor() - -m = Map("openclash", translate("Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)")) -m.pageaction = false -s = m:section(TypedSection, "openclash") -s.anonymous = true - -s:tab("settings", translate("General Settings")) -s:tab("dns", translate("DNS Setting")) -s:tab("rules", translate("Rules Setting")) -s:tab("dashboard", translate("Dashboard Settings")) -s:tab("config_update", translate("Config Update")) -s:tab("rules_update", translate("Rules Update")) -s:tab("geo_update", translate("GEOIP Update")) -s:tab("version_update", translate("Version Update")) - ----- General Settings -local cpu_model=SYS.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") -o = s:taboption("settings", ListValue, "core_version", translate("Chose to Download")) -o.description = translate("CPU Model")..': '..cpu_model..', '..translate("Select Based On Your CPU Model For Core Update, Wrong Version Will Not Work") -o:value("linux-386") -o:value("linux-amd64", translate("linux-amd64(x86-64)")) -o:value("linux-armv5") -o:value("linux-armv6") -o:value("linux-armv7") -o:value("linux-armv8") -o:value("linux-mips-hardfloat") -o:value("linux-mips-softfloat") -o:value("linux-mips64") -o:value("linux-mips64le") -o:value("linux-mipsle-softfloat") -o:value("linux-mipsle-hardfloat") -o:value("0", translate("Not Set")) -o.default=0 - -o = s:taboption("settings", ListValue, "en_mode", translate("Select Mode")) -o.description = translate("Select Mode For OpenClash Work, Network Error Try Flush DNS Cache") -o:value("redir-host", translate("redir-host")) -o:value("fake-ip", translate("fake-ip")) -o.default = "redir-host" - -o = s:taboption("settings", Value, "proxy_port") -o.title = translate("Redir Port") -o.default = 7892 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "http_port") -o.title = translate("HTTP(S) Port") -o.default = 7890 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - -o = s:taboption("settings", Value, "socks_port") -o.title = translate("SOCKS5 Port") -o.default = 7891 -o.datatype = "port" -o.rmempty = false -o.description = translate("Please Make Sure Ports Available") - ----- DNS Settings -o = s:taboption("dns", ListValue, "enable_redirect_dns", translate("Redirect Local DNS Setting")) -o.description = translate("Set Local DNS Redirect") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default = 1 - -o = s:taboption("dns", ListValue, "enable_custom_dns", translate("Custom DNS Setting")) -o.description = translate("Set OpenClash Upstream DNS Resolve Server") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default = 0 - -o = s:taboption("dns", ListValue, "ipv6_enable", translate("Enable ipv6 Resolve")) -o.description = translate("Force Enable to Resolve ipv6 DNS Requests") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default=0 - -o = s:taboption("dns", ListValue, "dns_advanced_setting", translate("Advanced Setting")) -o.description = translate("DNS Advanced Settings") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default=0 - -o = s:taboption("dns", Value, "direct_dns", translate("Specify DNS Server")) -o.description = translate("Specify DNS Server For List, Only One IP Server Address Support") -o.default="114.114.114.114" -o.placeholder = translate("114.114.114.114 or 127.0.0.1#5300") -o:depends("dns_advanced_setting", "1") - -o = s:taboption("dns", Button, translate("Fake-IP Block List Update")) -o.title = translate("Fake-IP Block List Update") -o:depends("dns_advanced_setting", "1") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("sh /usr/share/openclash/openclash_fake_block.sh && /etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -custom_fake_black = s:taboption("dns", Value, "custom_fake_black") -custom_fake_black.template = "cbi/tvalue" -custom_fake_black.description = translate("Domain Names In The List Do Not Return Fake-IP, One rule per line") -custom_fake_black.rows = 20 -custom_fake_black.wrap = "off" -custom_fake_black:depends("dns_advanced_setting", "1") - -function custom_fake_black.cfgvalue(self, section) - return NXFS.readfile("/etc/config/openclash_custom_fake_black.conf") or "" -end -function custom_fake_black.write(self, section, value) - - if value then - value = value:gsub("\r\n?", "\n") - NXFS.writefile("/etc/config/openclash_custom_fake_black.conf", value) - end -end - ----- Rules Settings -o = s:taboption("rules", ListValue, "enable_custom_clash_rules", translate("Custom Clash Rules")) -o.description = translate("Use Custom Rules") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default = 0 - -o = s:taboption("rules", ListValue, "rule_source", translate("Enable Other Rules")) -o.description = translate("Use Other Rules") -o:value("0", translate("Disable Other Rules")) -o:value("lhie1", translate("lhie1 Rules")) -o:value("ConnersHua", translate("ConnersHua Rules")) -o:value("ConnersHua_return", translate("ConnersHua Return Rules")) - -SYS.call("awk '/Proxy Group:/,/Rule:/{print}' /etc/openclash/config.yaml 2>/dev/null |egrep '^ {0,}-' |grep name: |awk -F 'name: ' '{print $2}' |sed 's/,.*//' |sed 's/\"//g' >/tmp/Proxy_Group 2>&1") -SYS.call("echo 'DIRECT' >>/tmp/Proxy_Group") -SYS.call("echo 'REJECT' >>/tmp/Proxy_Group") -file = io.open("/tmp/Proxy_Group", "r"); - -o = s:taboption("rules", ListValue, "GlobalTV", translate("GlobalTV")) -o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") - for l in file:lines() do - o:value(l) - end - file:seek("set") -o = s:taboption("rules", ListValue, "AsianTV", translate("AsianTV")) -o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") - for l in file:lines() do - o:value(l) - end - file:seek("set") -o = s:taboption("rules", ListValue, "Proxy", translate("Proxy")) -o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") -o:depends("rule_source", "ConnersHua_return") - for l in file:lines() do - o:value(l) - end - file:seek("set") -o = s:taboption("rules", ListValue, "Apple", translate("Apple")) ----- o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") - for l in file:lines() do - o:value(l) - end - file:seek("set") -o = s:taboption("rules", ListValue, "AdBlock", translate("AdBlock")) ----- o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") - for l in file:lines() do - o:value(l) - end - file:seek("set") -o = s:taboption("rules", ListValue, "Domestic", translate("Domestic")) -o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") - for l in file:lines() do - o:value(l) - end - file:seek("set") -o = s:taboption("rules", ListValue, "Others", translate("Others")) -o:depends("rule_source", "lhie1") -o:depends("rule_source", "ConnersHua") -o:depends("rule_source", "ConnersHua_return") -o.description = translate("Choose Proxy Group, Base On Your Servers Group in config.yaml") - for l in file:lines() do - o:value(l) - end - file:close() - ----- update Settings -o = s:taboption("config_update", ListValue, "auto_update", translate("Auto Update")) -o.description = translate("Auto Update Server subscription") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default=0 - -o = s:taboption("config_update", ListValue, "config_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("config_update", ListValue, "auto_update_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 -o.rmempty = false - -o = s:taboption("config_update", ListValue, "config_update_url_type", translate("Update Url Type")) -o:value("clash", translate("Clash")) -o:value("v2ray", translate("V2ray")) -o:value("surge", translate("Surge")) -o.description = translate("Power By fndroid,Use Other Rules If V2ray Subcription") -o.default="clash" - -o = s:taboption("config_update", Value, "subscribe_url") -o.title = translate("Subcription Url") -o.description = translate("Server Subscription Address") -o.rmempty = true - -o = s:taboption("config_update", Button, translate("Config File Update")) -o.title = translate("Update Subcription") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("sh /usr/share/openclash/openclash.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = s:taboption("rules_update", ListValue, "other_rule_auto_update", translate("Auto Update")) -o.description = translate("Auto Update Other Rules") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default=0 - -o = s:taboption("rules_update", ListValue, "other_rule_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("rules_update", ListValue, "other_rule_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("rules_update", Button, translate("Other Rules Update")) -o.title = translate("Update Other Rules") -o.inputtitle = translate("Check And Update") -o.description = translate("Other Rules Update(Only in Use)") -o.inputstyle = "reload" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("sh /usr/share/openclash/openclash_rule.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - -o = s:taboption("geo_update", ListValue, "geo_auto_update", translate("Auto Update")) -o.description = translate("Auto Update GEOIP Database") -o:value("0", translate("Disable")) -o:value("1", translate("Enable")) -o.default=0 - -o = s:taboption("geo_update", ListValue, "geo_update_week_time", translate("Update Time (Every Week)")) -o:value("*", translate("Every Day")) -o:value("1", translate("Every Monday")) -o:value("2", translate("Every Tuesday")) -o:value("3", translate("Every Wednesday")) -o:value("4", translate("Every Thursday")) -o:value("5", translate("Every Friday")) -o:value("6", translate("Every Saturday")) -o:value("0", translate("Every Sunday")) -o.default=1 - -o = s:taboption("geo_update", ListValue, "geo_update_day_time", translate("Update time (every day)")) -for t = 0,23 do -o:value(t, t..":00") -end -o.default=0 - -o = s:taboption("geo_update", Button, translate("GEOIP Update")) -o.title = translate("Update GEOIP Database") -o.inputtitle = translate("Check And Update") -o.inputstyle = "reload" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("sh /usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end - ----- Dashboard Settings -o = s:taboption("dashboard", Value, "cn_port") -o.title = translate("Dashboard Port") -o.default = 9090 -o.datatype = "port" -o.rmempty = false -o.description = translate("Dashboard Address Example: 192.168.1.1/openclash、192.168.1.1:9090/ui") - -o = s:taboption("dashboard", Value, "dashboard_password") -o.title = translate("Dashboard Secret") -o.rmempty = true -o.description = translate("Set Dashboard Secret") - ----- version update -core_update = s:taboption("version_update", DummyValue, "", nil) -core_update.template = "openclash/update" - --- [[ Edit Server ]] -- -s = m:section(TypedSection, "dns_servers", translate("Add Custom DNS Servers")) -s.anonymous = true -s.addremove = true -s.sortable = false -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable"), translate("(Enable or Disable)")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- group -o = s:option(ListValue, "group", translate("DNS Server Group")) -o.description = translate("(NameServer Group Must Be Set)") -o:value("nameserver", translate("NameServer")) -o:value("fallback", translate("FallBack")) -o.default = "nameserver" -o.rempty = false - ----- IP address -o = s:option(Value, "ip", translate("DNS Server Address")) -o.description = translate("(Do Not Add Type Ahead)") -o.placeholder = translate("Not Null") -o.datatype = "or(host, string)" -o.rmempty = true - ----- port -o = s:option(Value, "port", translate("DNS Server Port")) -o.description = translate("(Require When Use Non-Standard Port)") -o.datatype = "port" -o.rempty = true - ----- type -o = s:option(ListValue, "type", translate("DNS Server Type")) -o.description = translate("(Communication protocol)") -o:value("udp", translate("UDP")) -o:value("tcp", translate("TCP")) -o:value("tls", translate("TLS")) -o:value("https", translate("HTTPS")) -o.default = "udp" -o.rempty = false - --- [[ Edit Authentication ]] -- -s = m:section(TypedSection, "authentication", translate("Set Authentication of SOCKS5/HTTP(S)")) -s.anonymous = true -s.addremove = true -s.sortable = false -s.template = "cbi/tblsection" -s.rmempty = false - ----- enable flag -o = s:option(Flag, "enabled", translate("Enable")) -o.rmempty = false -o.default = o.enabled -o.cfgvalue = function(...) - return Flag.cfgvalue(...) or "1" -end - ----- username -o = s:option(Value, "username", translate("Username")) -o.placeholder = translate("Not Null") -o.rempty = true - ----- password -o = s:option(Value, "password", translate("Password")) -o.placeholder = translate("Not Null") -o.rmempty = true - -s = m:section(TypedSection, "openclash", translate("Set Custom Rules, Will Add When Flag Turn on")) -s.anonymous = true - -custom_rules = s:option(Value, "custom_rules") -custom_rules.template = "cbi/tvalue" -custom_rules.description = translate("Custom Rules Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com") -custom_rules.rows = 20 -custom_rules.wrap = "off" - -function custom_rules.cfgvalue(self, section) - return NXFS.readfile("/etc/config/openclash_custom_rules.list") or "" -end -function custom_rules.write(self, section, value) - - if value then - value = value:gsub("\r\n?", "\n") - NXFS.writefile("/etc/config/openclash_custom_rules.list", value) - end -end - -s = m:section(TypedSection, "openclash", translate("Set Custom Hosts, Only Work with Redir-Host Mode")) -s.anonymous = true - -custom_hosts = s:option(Value, "custom_hosts") -custom_hosts.template = "cbi/tvalue" -custom_hosts.description = translate("Custom Hosts Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md") -custom_hosts.rows = 20 -custom_hosts.wrap = "off" - -function custom_hosts.cfgvalue(self, section) - return NXFS.readfile("/etc/config/openclash_custom_hosts.list") or "" -end -function custom_hosts.write(self, section, value) - if value then - value = value:gsub("\r\n?", "\n") - NXFS.writefile("/etc/config/openclash_custom_hosts.list", value) - end -end - -local t = { - {Commit, Apply} -} - -a = m:section(Table, t) - -o = a:option(Button, "Commit") -o.inputtitle = translate("Commit Configurations") -o.inputstyle = "apply" -o.write = function() - uci:commit("openclash") -end - -o = a:option(Button, "Apply") -o.inputtitle = translate("Apply Configurations") -o.inputstyle = "apply" -o.write = function() - uci:set("openclash", "config", "enable", 1) - uci:commit("openclash") - SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") - HTTP.redirect(DISP.build_url("admin", "services", "openclash")) -end -return m - - + +local NXFS = require "nixio.fs" +local SYS = require "luci.sys" +local HTTP = require "luci.http" +local DISP = require "luci.dispatcher" +local UTIL = require "luci.util" +local uci = require("luci.model.uci").cursor() + +m = Map("openclash", translate("Global Settings(Will Modify The Config File Or Subscribe According To The Settings On This Page)")) +m.pageaction = false +s = m:section(TypedSection, "openclash") +s.anonymous = true + +s:tab("settings", translate("General Settings")) +s:tab("dns", translate("DNS Setting")) +s:tab("rules", translate("Rules Setting")) +s:tab("dashboard", translate("Dashboard Settings")) +s:tab("config_update", translate("Config Update")) +s:tab("rules_update", translate("Rules Update")) +s:tab("geo_update", translate("GEOIP Update")) +s:tab("version_update", translate("Version Update")) + +---- General Settings +local cpu_model=SYS.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null") +o = s:taboption("settings", ListValue, "core_version", translate("Chose to Download")) +o.description = translate("CPU Model")..': '..cpu_model..', '..translate("Select Based On Your CPU Model For Core Update, Wrong Version Will Not Work") +o:value("linux-386") +o:value("linux-amd64", translate("linux-amd64(x86-64)")) +o:value("linux-armv5") +o:value("linux-armv6") +o:value("linux-armv7") +o:value("linux-armv8") +o:value("linux-mips-hardfloat") +o:value("linux-mips-softfloat") +o:value("linux-mips64") +o:value("linux-mips64le") +o:value("linux-mipsle-softfloat") +o:value("linux-mipsle-hardfloat") +o:value("0", translate("Not Set")) +o.default=0 + +o = s:taboption("settings", ListValue, "en_mode", translate("Select Mode")) +o.description = translate("Select Mode For OpenClash Work, Network Error Try Flush DNS Cache") +o:value("redir-host", translate("redir-host")) +o:value("fake-ip", translate("fake-ip")) +o.default = "redir-host" + +o = s:taboption("settings", Value, "proxy_port") +o.title = translate("Redir Port") +o.default = 7892 +o.datatype = "port" +o.rmempty = false +o.description = translate("Please Make Sure Ports Available") + +o = s:taboption("settings", Value, "http_port") +o.title = translate("HTTP(S) Port") +o.default = 7890 +o.datatype = "port" +o.rmempty = false +o.description = translate("Please Make Sure Ports Available") + +o = s:taboption("settings", Value, "socks_port") +o.title = translate("SOCKS5 Port") +o.default = 7891 +o.datatype = "port" +o.rmempty = false +o.description = translate("Please Make Sure Ports Available") + +---- DNS Settings +o = s:taboption("dns", ListValue, "enable_redirect_dns", translate("Redirect Local DNS Setting")) +o.description = translate("Set Local DNS Redirect") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default = 1 + +o = s:taboption("dns", ListValue, "enable_custom_dns", translate("Custom DNS Setting")) +o.description = translate("Set OpenClash Upstream DNS Resolve Server") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default = 0 + +o = s:taboption("dns", ListValue, "ipv6_enable", translate("Enable ipv6 Resolve")) +o.description = translate("Force Enable to Resolve ipv6 DNS Requests") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default=0 + +o = s:taboption("dns", ListValue, "dns_advanced_setting", translate("Advanced Setting")) +o.description = translate("DNS Advanced Settings") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default=0 + +o = s:taboption("dns", Value, "direct_dns", translate("Specify DNS Server")) +o.description = translate("Specify DNS Server For List, Only One IP Server Address Support") +o.default="114.114.114.114" +o.placeholder = translate("114.114.114.114 or 127.0.0.1#5300") +o:depends("dns_advanced_setting", "1") + +o = s:taboption("dns", Button, translate("Fake-IP Block List Update")) +o.title = translate("Fake-IP Block List Update") +o:depends("dns_advanced_setting", "1") +o.inputtitle = translate("Check And Update") +o.inputstyle = "reload" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + SYS.call("sh /usr/share/openclash/openclash_fake_block.sh && /etc/init.d/openclash restart >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +custom_fake_black = s:taboption("dns", Value, "custom_fake_black") +custom_fake_black.template = "cbi/tvalue" +custom_fake_black.description = translate("Domain Names In The List Do Not Return Fake-IP, One rule per line") +custom_fake_black.rows = 20 +custom_fake_black.wrap = "off" +custom_fake_black:depends("dns_advanced_setting", "1") + +function custom_fake_black.cfgvalue(self, section) + return NXFS.readfile("/etc/config/openclash_custom_fake_black.conf") or "" +end +function custom_fake_black.write(self, section, value) + + if value then + value = value:gsub("\r\n?", "\n") + NXFS.writefile("/etc/config/openclash_custom_fake_black.conf", value) + end +end + +---- Rules Settings +o = s:taboption("rules", ListValue, "enable_custom_clash_rules", translate("Custom Clash Rules")) +o.description = translate("Use Custom Rules") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default = 0 + +o = s:taboption("rules", ListValue, "rule_source", translate("Enable Other Rules")) +o.description = translate("Use Other Rules") +o:value("0", translate("Disable Other Rules")) +o:value("lhie1", translate("lhie1 Rules")) +o:value("ConnersHua", translate("ConnersHua Rules")) +o:value("ConnersHua_return", translate("ConnersHua Return Rules")) + +SYS.call("awk '/Proxy Group:/,/Rule:/{print}' /etc/openclash/config.yaml 2>/dev/null |egrep '^ {0,}-' |grep name: |awk -F 'name: ' '{print $2}' |sed 's/,.*//' |sed 's/\"//g' >/tmp/Proxy_Group 2>&1") +SYS.call("echo 'DIRECT' >>/tmp/Proxy_Group") +SYS.call("echo 'REJECT' >>/tmp/Proxy_Group") +file = io.open("/tmp/Proxy_Group", "r"); + +o = s:taboption("rules", ListValue, "GlobalTV", translate("GlobalTV")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "AsianTV", translate("AsianTV")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "Proxy", translate("Proxy")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") +o:depends("rule_source", "ConnersHua_return") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "Apple", translate("Apple")) +---- o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "AdBlock", translate("AdBlock")) +---- o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "Domestic", translate("Domestic")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") + for l in file:lines() do + o:value(l) + end + file:seek("set") +o = s:taboption("rules", ListValue, "Others", translate("Others")) +o:depends("rule_source", "lhie1") +o:depends("rule_source", "ConnersHua") +o:depends("rule_source", "ConnersHua_return") +o.description = translate("Choose Proxy Group, Base On Your Servers Group in config.yaml") + for l in file:lines() do + o:value(l) + end + file:close() + +---- update Settings +o = s:taboption("config_update", ListValue, "auto_update", translate("Auto Update")) +o.description = translate("Auto Update Server subscription") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default=0 + +o = s:taboption("config_update", ListValue, "config_update_week_time", translate("Update Time (Every Week)")) +o:value("*", translate("Every Day")) +o:value("1", translate("Every Monday")) +o:value("2", translate("Every Tuesday")) +o:value("3", translate("Every Wednesday")) +o:value("4", translate("Every Thursday")) +o:value("5", translate("Every Friday")) +o:value("6", translate("Every Saturday")) +o:value("0", translate("Every Sunday")) +o.default=1 + +o = s:taboption("config_update", ListValue, "auto_update_time", translate("Update time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 +o.rmempty = false + +o = s:taboption("config_update", ListValue, "config_update_url_type", translate("Update Url Type")) +o:value("clash", translate("Clash")) +o:value("v2ray", translate("V2ray")) +o:value("surge", translate("Surge")) +o.description = translate("Power By fndroid,Use Other Rules If V2ray Subcription") +o.default="clash" + +o = s:taboption("config_update", Value, "subscribe_url") +o.title = translate("Subcription Url") +o.description = translate("Server Subscription Address") +o.rmempty = true + +o = s:taboption("config_update", Button, translate("Config File Update")) +o.title = translate("Update Subcription") +o.inputtitle = translate("Check And Update") +o.inputstyle = "reload" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + SYS.call("sh /usr/share/openclash/openclash.sh >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +o = s:taboption("rules_update", ListValue, "other_rule_auto_update", translate("Auto Update")) +o.description = translate("Auto Update Other Rules") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default=0 + +o = s:taboption("rules_update", ListValue, "other_rule_update_week_time", translate("Update Time (Every Week)")) +o:value("*", translate("Every Day")) +o:value("1", translate("Every Monday")) +o:value("2", translate("Every Tuesday")) +o:value("3", translate("Every Wednesday")) +o:value("4", translate("Every Thursday")) +o:value("5", translate("Every Friday")) +o:value("6", translate("Every Saturday")) +o:value("0", translate("Every Sunday")) +o.default=1 + +o = s:taboption("rules_update", ListValue, "other_rule_update_day_time", translate("Update time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 + +o = s:taboption("rules_update", Button, translate("Other Rules Update")) +o.title = translate("Update Other Rules") +o.inputtitle = translate("Check And Update") +o.description = translate("Other Rules Update(Only in Use)") +o.inputstyle = "reload" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + SYS.call("sh /usr/share/openclash/openclash_rule.sh >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +o = s:taboption("geo_update", ListValue, "geo_auto_update", translate("Auto Update")) +o.description = translate("Auto Update GEOIP Database") +o:value("0", translate("Disable")) +o:value("1", translate("Enable")) +o.default=0 + +o = s:taboption("geo_update", ListValue, "geo_update_week_time", translate("Update Time (Every Week)")) +o:value("*", translate("Every Day")) +o:value("1", translate("Every Monday")) +o:value("2", translate("Every Tuesday")) +o:value("3", translate("Every Wednesday")) +o:value("4", translate("Every Thursday")) +o:value("5", translate("Every Friday")) +o:value("6", translate("Every Saturday")) +o:value("0", translate("Every Sunday")) +o.default=1 + +o = s:taboption("geo_update", ListValue, "geo_update_day_time", translate("Update time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 + +o = s:taboption("geo_update", Button, translate("GEOIP Update")) +o.title = translate("Update GEOIP Database") +o.inputtitle = translate("Check And Update") +o.inputstyle = "reload" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + SYS.call("sh /usr/share/openclash/openclash_ipdb.sh >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end + +---- Dashboard Settings +o = s:taboption("dashboard", Value, "cn_port") +o.title = translate("Dashboard Port") +o.default = 9090 +o.datatype = "port" +o.rmempty = false +o.description = translate("Dashboard Address Example: 192.168.1.1/openclash、192.168.1.1:9090/ui") + +o = s:taboption("dashboard", Value, "dashboard_password") +o.title = translate("Dashboard Secret") +o.rmempty = true +o.description = translate("Set Dashboard Secret") + +---- version update +core_update = s:taboption("version_update", DummyValue, "", nil) +core_update.template = "openclash/update" + +-- [[ Edit Server ]] -- +s = m:section(TypedSection, "dns_servers", translate("Add Custom DNS Servers")) +s.anonymous = true +s.addremove = true +s.sortable = false +s.template = "cbi/tblsection" +s.rmempty = false + +---- enable flag +o = s:option(Flag, "enabled", translate("Enable"), translate("(Enable or Disable)")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- group +o = s:option(ListValue, "group", translate("DNS Server Group")) +o.description = translate("(NameServer Group Must Be Set)") +o:value("nameserver", translate("NameServer")) +o:value("fallback", translate("FallBack")) +o.default = "nameserver" +o.rempty = false + +---- IP address +o = s:option(Value, "ip", translate("DNS Server Address")) +o.description = translate("(Do Not Add Type Ahead)") +o.placeholder = translate("Not Null") +o.datatype = "or(host, string)" +o.rmempty = true + +---- port +o = s:option(Value, "port", translate("DNS Server Port")) +o.description = translate("(Require When Use Non-Standard Port)") +o.datatype = "port" +o.rempty = true + +---- type +o = s:option(ListValue, "type", translate("DNS Server Type")) +o.description = translate("(Communication protocol)") +o:value("udp", translate("UDP")) +o:value("tcp", translate("TCP")) +o:value("tls", translate("TLS")) +o:value("https", translate("HTTPS")) +o.default = "udp" +o.rempty = false + +-- [[ Edit Authentication ]] -- +s = m:section(TypedSection, "authentication", translate("Set Authentication of SOCKS5/HTTP(S)")) +s.anonymous = true +s.addremove = true +s.sortable = false +s.template = "cbi/tblsection" +s.rmempty = false + +---- enable flag +o = s:option(Flag, "enabled", translate("Enable")) +o.rmempty = false +o.default = o.enabled +o.cfgvalue = function(...) + return Flag.cfgvalue(...) or "1" +end + +---- username +o = s:option(Value, "username", translate("Username")) +o.placeholder = translate("Not Null") +o.rempty = true + +---- password +o = s:option(Value, "password", translate("Password")) +o.placeholder = translate("Not Null") +o.rmempty = true + +s = m:section(TypedSection, "openclash", translate("Set Custom Rules, Will Add When Flag Turn on")) +s.anonymous = true + +custom_rules = s:option(Value, "custom_rules") +custom_rules.template = "cbi/tvalue" +custom_rules.description = translate("Custom Rules Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md, IP To CIDR: http://ip2cidr.com") +custom_rules.rows = 20 +custom_rules.wrap = "off" + +function custom_rules.cfgvalue(self, section) + return NXFS.readfile("/etc/config/openclash_custom_rules.list") or "" +end +function custom_rules.write(self, section, value) + + if value then + value = value:gsub("\r\n?", "\n") + NXFS.writefile("/etc/config/openclash_custom_rules.list", value) + end +end + +s = m:section(TypedSection, "openclash", translate("Set Custom Hosts, Only Work with Redir-Host Mode")) +s.anonymous = true + +custom_hosts = s:option(Value, "custom_hosts") +custom_hosts.template = "cbi/tvalue" +custom_hosts.description = translate("Custom Hosts Here, For More Go Github:https://github.com/Dreamacro/clash/blob/master/README.md") +custom_hosts.rows = 20 +custom_hosts.wrap = "off" + +function custom_hosts.cfgvalue(self, section) + return NXFS.readfile("/etc/config/openclash_custom_hosts.list") or "" +end +function custom_hosts.write(self, section, value) + if value then + value = value:gsub("\r\n?", "\n") + NXFS.writefile("/etc/config/openclash_custom_hosts.list", value) + end +end + +local t = { + {Commit, Apply} +} + +a = m:section(Table, t) + +o = a:option(Button, "Commit") +o.inputtitle = translate("Commit Configurations") +o.inputstyle = "apply" +o.write = function() + uci:commit("openclash") +end + +o = a:option(Button, "Apply") +o.inputtitle = translate("Apply Configurations") +o.inputstyle = "apply" +o.write = function() + uci:set("openclash", "config", "enable", 1) + uci:commit("openclash") + SYS.call("/etc/init.d/openclash restart >/dev/null 2>&1 &") + HTTP.redirect(DISP.build_url("admin", "services", "openclash")) +end +return m + + diff --git a/luci-app-openclash/files/usr/lib/lua/luci/openclash.lua b/luci-app-openclash/files/usr/lib/lua/luci/openclash.lua index 51cbf72beb..0be7fe675d 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/openclash.lua +++ b/luci-app-openclash/files/usr/lib/lua/luci/openclash.lua @@ -1,39 +1,39 @@ ---[[ -LuCI - Filesystem tools - -Description: -A module offering often needed filesystem manipulation functions - -FileId: -$Id$ - -License: -Copyright 2008 Steven Barth - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -]]-- - -local fs = require "nixio.fs" - -local type = type - ---- LuCI filesystem library. -module "luci.openclash" - ---- Checks wheather the given path exists and points to a directory. --- @param dirname String containing the path of the directory to test --- @return Boolean indicating wheather given path points to directory -function isdirectory(dirname) - return fs.stat(dirname, "type") == "dir" -end +--[[ +LuCI - Filesystem tools + +Description: +A module offering often needed filesystem manipulation functions + +FileId: +$Id$ + +License: +Copyright 2008 Steven Barth + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +]]-- + +local fs = require "nixio.fs" + +local type = type + +--- LuCI filesystem library. +module "luci.openclash" + +--- Checks wheather the given path exists and points to a directory. +-- @param dirname String containing the path of the directory to test +-- @return Boolean indicating wheather given path points to directory +function isdirectory(dirname) + return fs.stat(dirname, "type") == "dir" +end diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm index 2c1ea7a57e..ae70254ee0 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/developer.htm @@ -1,61 +1,61 @@ -
- - - - -
Clash 核心发布: <%:Collecting data...%> OpenClash 客户端发布: <%:Collecting data...%>
Clash 核心开发: Dreamacro <%:Collecting data...%> OpenClash 客户端开发: vernesong <%:Collecting data...%>
Luci For Clash: frainzy1477 <%:Collecting data...%> MyIP: SukkaW <%:Collecting data...%>
-
- - \ No newline at end of file diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/dvalue.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/dvalue.htm index ed22b9d956..4a437e2b9f 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/dvalue.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/dvalue.htm @@ -1,13 +1,13 @@ -<%+cbi/valueheader%> -
-
-<%:Rename your config file to config.yaml before upload what would be save to /etc/openclash%> -
-
-<% - local val = self:cfgvalue(section) or self.default or "" - write(pcdata(val)) -%> -
-
-<%+cbi/valuefooter%> +<%+cbi/valueheader%> +
+
+<%:Rename your config file to config.yaml before upload what would be save to /etc/openclash%> +
+
+<% + local val = self:cfgvalue(section) or self.default or "" + write(pcdata(val)) +%> +
+
+<%+cbi/valuefooter%> diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm index 909fb8d331..da1db07dd4 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/myip.htm @@ -1,347 +1,347 @@ - - - - - - - - - - - - - - - - - - - - - - - - - IP 地址查询 - - -
- - -
- -
-
-

IP 地址

-

- IP   登录设备: -

-

- IPIP      国内: -

-

- 太平洋  国内: -

-

- IP.SB    海外: -

-

- IPIFY    海外: -

-
-
-

网站访问检查

-

- 百度搜索: -

-

- 网易云音乐: -

-

- GitHub: -

-

- Facebook: -

-

- YouTube: -

-
-
-
-

Powered by ip.skk.moe

-
-
-
- - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + IP 地址查询 + + +
+ + +
+ +
+
+

IP 地址

+

+ IP   登录设备: +

+

+ IPIP      国内: +

+

+ 太平洋  国内: +

+

+ IP.SB    海外: +

+

+ IPIFY    海外: +

+
+
+

网站访问检查

+

+ 百度搜索: +

+

+ 网易云音乐: +

+

+ GitHub: +

+

+ Facebook: +

+

+ YouTube: +

+
+
+
+

Powered by ip.skk.moe

+
+
+
+ + + + + + diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm index 53d89b7553..1a785fefa8 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/state.htm @@ -1,74 +1,74 @@ - -
- - - - - -
-

- 一些必要的状态显示,运行前请确保各项目显示正常,需要更新请到全局设置页面操作 -

-
启动参数检查(配置文件) <%:Collecting data...%> 配置文件更新日期 <%:Collecting data...%>
GEOIP(By MaxMind)数据库日期 <%:Collecting data...%> lhie1 规则更新日期 <%:Collecting data...%>
ConnersHua 规则更新日期 <%:Collecting data...%> ConnersHua 回国规则更新日期 <%:Collecting data...%>
-
- - \ No newline at end of file diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm index 7ea8a6d0a3..cb048faae5 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm @@ -1,223 +1,223 @@ -
- - - - - - - - - -
-

- -

-

- <%:Collecting data...%> -

-
-

- star -     - Wiki -     - Telegram -     - -

-
-

- Tip: OpenClash 成功启动后请耐心等待下方网站访问检查连接正常后再使用 -

-
OpenClash 主程序 <%:Collecting data...%> 控制面板登录IP <%:Collecting data...%>
OpenClash 守护程序 <%:Collecting data...%> 控制面板登录端口 <%:Collecting data...%>
OpenClash 运行模式 <%:Collecting data...%> 控制面板登录密钥 <%:Collecting data...%>
Yacd 控制面板 <%:Collecting data...%> Dashboard 控制面板 <%:Collecting data...%>
-
- - +
+ + + + + + + + + +
+

+ +

+

+ <%:Collecting data...%> +

+
+

+ star +     + Wiki +     + Telegram +     + +

+
+

+ Tip: OpenClash 成功启动后请耐心等待下方网站访问检查连接正常后再使用 +

+
OpenClash 主程序 <%:Collecting data...%> 控制面板登录IP <%:Collecting data...%>
OpenClash 守护程序 <%:Collecting data...%> 控制面板登录端口 <%:Collecting data...%>
OpenClash 运行模式 <%:Collecting data...%> 控制面板登录密钥 <%:Collecting data...%>
Yacd 控制面板 <%:Collecting data...%> Dashboard 控制面板 <%:Collecting data...%>
+
+ + diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm index e77426b3fd..2214368990 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm @@ -1,211 +1,211 @@ - -
- - - - - - - - - -
注意:如更新失败可手动下载并上传,内核路径为:/etc/openclash
已选择编译版本 <%:Collecting data...%> 上次检查更新时间 <%:Collecting data...%>
处理器架构(PROC) <%:Collecting data...%> 处理器架构(OPKG) <%:Collecting data...%>
当前内核版本 <%:Collecting data...%> 当前客户端版本 <%:Collecting data...%>
最新内核版本 <%:Collecting data...%> 最新客户端版本 <%:Collecting data...%>
更新内核<%:Collecting data...%> 更新客户端 <%:Collecting data...%>
下载最新版本内核<%:Collecting data...%> 下载最新版本客户端 <%:Collecting data...%>
- -
- - + +
+ + + + + + + + + +
注意:如更新失败可手动下载并上传,内核路径为:/etc/openclash
已选择编译版本 <%:Collecting data...%> 上次检查更新时间 <%:Collecting data...%>
处理器架构(PROC) <%:Collecting data...%> 处理器架构(OPKG) <%:Collecting data...%>
当前内核版本 <%:Collecting data...%> 当前客户端版本 <%:Collecting data...%>
最新内核版本 <%:Collecting data...%> 最新客户端版本 <%:Collecting data...%>
更新内核<%:Collecting data...%> 更新客户端 <%:Collecting data...%>
下载最新版本内核<%:Collecting data...%> 下载最新版本客户端 <%:Collecting data...%>
+ +
+ + \ No newline at end of file diff --git a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/upload.htm b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/upload.htm index d0890243f4..3401bd9833 100644 --- a/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/upload.htm +++ b/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/upload.htm @@ -1,7 +1,7 @@ -<%+cbi/valueheader%> -
-
-<%+cbi/valuefooter%> +<%+cbi/valueheader%> +
+
+<%+cbi/valuefooter%> diff --git a/luci-app-openclash/files/usr/share/openclash/clash_version.sh b/luci-app-openclash/files/usr/share/openclash/clash_version.sh index b732453e7a..3444e34f23 100644 --- a/luci-app-openclash/files/usr/share/openclash/clash_version.sh +++ b/luci-app-openclash/files/usr/share/openclash/clash_version.sh @@ -1,12 +1,12 @@ -#!/bin/sh -CKTIME=$(date "+%Y-%m-%d-%H") -LAST_OPVER="/tmp/clash_last_version" -version_url="https://github.com/vernesong/OpenClash/raw/master/core_version" -if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then - wget-ssl --no-check-certificate --quiet --timeout=5 --tries=2 "$version_url" -O $LAST_OPVER - if [ "$?" -eq "0" ] && [ "$(ls -l $LAST_OPVER 2>/dev/null |awk '{print int($5)}')" -gt 0 ]; then - echo "CheckTime:$CKTIME" >>$LAST_OPVER - else - rm -rf $LAST_OPVER - fi +#!/bin/sh +CKTIME=$(date "+%Y-%m-%d-%H") +LAST_OPVER="/tmp/clash_last_version" +version_url="https://github.com/vernesong/OpenClash/raw/master/core_version" +if [ "$CKTIME" != "$(grep "CheckTime" $LAST_OPVER 2>/dev/null |awk -F ':' '{print $2}')" ]; then + wget-ssl --no-check-certificate --quiet --timeout=5 --tries=2 "$version_url" -O $LAST_OPVER + if [ "$?" -eq "0" ] && [ "$(ls -l $LAST_OPVER 2>/dev/null |awk '{print int($5)}')" -gt 0 ]; then + echo "CheckTime:$CKTIME" >>$LAST_OPVER + else + rm -rf $LAST_OPVER + fi fi \ No newline at end of file diff --git a/luci-app-openclash/files/usr/share/openclash/dashboard/index.html b/luci-app-openclash/files/usr/share/openclash/dashboard/index.html index de036aa04d..050681c909 100644 --- a/luci-app-openclash/files/usr/share/openclash/dashboard/index.html +++ b/luci-app-openclash/files/usr/share/openclash/dashboard/index.html @@ -1,12 +1,12 @@ - - - - - - - Clash - - -
- - + + + + + + + Clash + + +
+ + diff --git a/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.45da5278717379ab5871.min.js b/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.45da5278717379ab5871.min.js index 1fc89cabe9..e7a4bcca59 100644 --- a/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.45da5278717379ab5871.min.js +++ b/luci-app-openclash/files/usr/share/openclash/dashboard/js/1.bundle.45da5278717379ab5871.min.js @@ -1,57 +1,57 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],[function(e,t,n){"use strict";e.exports=n(47)},function(e,t,n){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}n.d(t,"a",function(){return r})},,,function(e,t,n){e.exports=n(51)()},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(48)},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){var r=n(40)(Object,"create");e.exports=r},function(e,t,n){var r=n(105);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},function(e,t,n){var r=n(111);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},,,function(e,t){var n=Array.isArray;e.exports=n},function(e,t,n){var r=n(39),o=n(84),i="[object Symbol]";e.exports=function(e){return"symbol"==typeof e||o(e)&&r(e)==i}},function(e,t,n){var r=n(22).Symbol;e.exports=r},function(e,t,n){var r=n(81),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},function(e,t,n){"use strict";n.r(t);var r=n(3),o=n(0),i=n.n(o),a=n(24),l=n.n(a),u=n(11),s=n.n(u),c=n(43),f=n.n(c),d=1073741823;var p=i.a.createContext||function(e,t){var n,r,i="__create-react-context-"+f()()+"__",a=function(e){function n(){var t,n,r;return(t=e.apply(this,arguments)||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter(function(t){return t!==e})},get:function(){return n},set:function(e,t){n=e,r.forEach(function(e){return e(n,t)})}}),t}l()(n,e);var r=n.prototype;return r.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},r.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((i=r)===(a=o)?0!==i||1/i==1/a:i!=i&&a!=a)?n=0:(n="function"==typeof t?t(r,o):d,0!==(n|=0)&&this.emitter.set(e.value,n))}var i,a},r.render=function(){return this.props.children},n}(o.Component);a.childContextTypes=((n={})[i]=s.a.object.isRequired,n);var u=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}l()(n,t);var r=n.prototype;return r.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?d:t},r.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?d:e},r.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},r.getValue=function(){return this.context[i]?this.context[i].get():e},r.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((r={})[i]=s.a.object,r),{Provider:a,Consumer:u}},h=n(1);function m(e){return"/"===e.charAt(0)}function v(e,t){for(var n=t,r=n+1,o=e.length;r1&&void 0!==arguments[1]?arguments[1]:"",n=e&&e.split("/")||[],r=t&&t.split("/")||[],o=e&&m(e),i=t&&m(t),a=o||i;if(e&&m(e)?r=n:n.length&&(r.pop(),r=r.concat(n)),!r.length)return"/";var l=void 0;if(r.length){var u=r[r.length-1];l="."===u||".."===u||""===u}else l=!1;for(var s=0,c=r.length;c>=0;c--){var f=r[c];"."===f?v(r,c):".."===f?(v(r,c),s++):s&&(v(r,c),s--)}if(!a)for(;s--;s)r.unshift("..");!a||""===r[0]||r[0]&&m(r[0])||r.unshift("");var d=r.join("/");return l&&"/"!==d.substr(-1)&&(d+="/"),d},g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};var b=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every(function(t,r){return e(t,n[r])});var r=void 0===t?"undefined":g(t);if(r!==(void 0===n?"undefined":g(n)))return!1;if("object"===r){var o=t.valueOf(),i=n.valueOf();if(o!==t||i!==n)return e(o,i);var a=Object.keys(t),l=Object.keys(n);return a.length===l.length&&a.every(function(r){return e(t[r],n[r])})}return!1},w=!0,x="Invariant failed";var _=function(e,t){if(!e)throw w?new Error(x):new Error(x+": "+(t||""))};function S(e){return"/"===e.charAt(0)?e:"/"+e}function T(e){return"/"===e.charAt(0)?e.substr(1):e}function k(e,t){return function(e,t){return new RegExp("^"+t+"(\\/|\\?|#|$)","i").test(e)}(e,t)?e.substr(t.length):e}function C(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function E(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function P(e,t,n,r){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e)).state=t:(void 0===(o=Object(h.a)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(i){throw i instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):i}return n&&(o.key=n),r?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=y(o.pathname,r.pathname)):o.pathname=r.pathname:o.pathname||(o.pathname="/"),o}function O(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&b(e.state,t.state)}function R(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,o):o(!0):o(!1!==i)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter(function(e){return e!==r})}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r=0?t:0)+"#"+e)}function $(e){void 0===e&&(e={}),M||_(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),r=n.getUserConfirmation,o=void 0===r?I:r,i=n.hashType,a=void 0===i?"slash":i,l=e.basename?C(S(e.basename)):"",u=L[a],s=u.encodePath,c=u.decodePath;function f(){var e=c(U());return l&&(e=k(e,l)),P(e)}var d=R();function p(e){Object(h.a)(j,e),j.length=t.length,d.notifyListeners(j.location,j.action)}var m=!1,v=null;function y(){var e=U(),t=s(e);if(e!==t)F(t);else{var n=f(),r=j.location;if(!m&&O(r,n))return;if(v===E(n))return;v=null,function(e){if(m)m=!1,p();else{d.confirmTransitionTo(e,"POP",o,function(t){t?p({action:"POP",location:e}):function(e){var t=j.location,n=x.lastIndexOf(E(t));-1===n&&(n=0);var r=x.lastIndexOf(E(e));-1===r&&(r=0);var o=n-r;o&&(m=!0,T(o))}(e)})}}(n)}}var g=U(),b=s(g);g!==b&&F(b);var w=f(),x=[E(w)];function T(e){t.go(e)}var z=0;function N(e){1===(z+=e)&&1===e?window.addEventListener(D,y):0===z&&window.removeEventListener(D,y)}var A=!1;var j={length:t.length,action:"POP",location:w,createHref:function(e){return"#"+s(l+E(e))},push:function(e,t){var n=P(e,void 0,void 0,j.location);d.confirmTransitionTo(n,"PUSH",o,function(e){if(e){var t=E(n),r=s(l+t);if(U()!==r){v=t,function(e){window.location.hash=e}(r);var o=x.lastIndexOf(E(j.location)),i=x.slice(0,-1===o?0:o+1);i.push(t),x=i,p({action:"PUSH",location:n})}else p()}})},replace:function(e,t){var n=P(e,void 0,void 0,j.location);d.confirmTransitionTo(n,"REPLACE",o,function(e){if(e){var t=E(n),r=s(l+t);U()!==r&&(v=t,F(r));var o=x.indexOf(E(j.location));-1!==o&&(x[o]=t),p({action:"REPLACE",location:n})}})},go:T,goBack:function(){T(-1)},goForward:function(){T(1)},block:function(e){void 0===e&&(e=!1);var t=d.setPrompt(e);return A||(N(1),A=!0),function(){return A&&(A=!1,N(-1)),t()}},listen:function(e){var t=d.appendListener(e);return N(1),function(){N(-1),t()}}};return j}function W(e,t,n){return Math.min(Math.max(e,t),n)}var H=n(25),B=n.n(H),V=(n(28),n(8)),q=n(44),Q=n.n(q),K=function(e){var t=p();return t.displayName=e,t}("Router"),Y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen(function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e})),n}Object(r.a)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&this.unlisten()},n.render=function(){return i.a.createElement(K.Provider,{children:this.props.children||null,value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}})},t}(i.a.Component);var X=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;ot?n.splice(t,n.length-t,r):n.push(r),c({action:"PUSH",location:r,index:t,entries:n})}})},replace:function(e,t){var r=P(e,t,f(),y.location);s.confirmTransitionTo(r,"REPLACE",n,function(e){e&&(y.entries[y.index]=r,c({action:"REPLACE",location:r}))})},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=y.index+e;return t>=0&&t=0;t--){var n=e[t][i];n.modified||(Array.isArray(n.base)?P(n)&&_(n):E(n)&&_(n))}}function E(e){for(var t=e.base,n=e.draft,r=Object.keys(n),o=r.length-1;o>=0;o--){var a=r[o],l=t[a];if(void 0===l&&!p(t,a))return!0;var u=n[a],s=u&&u[i];if(s?s.base!==l:!h(u,l))return!0}return r.length!==Object.keys(t).length}function P(e){var t=e.draft;if(t.length!==e.base.length)return!0;var n=Object.getOwnPropertyDescriptor(t,t.length-1);return!(!n||n.get)}var O=Object.freeze({willFinalize:function(e,t,n){e.drafts.forEach(function(e){e[i].finalizing=!0}),n?a(t)&&t[i].scope===e&&C(e.drafts):(e.patches&&function e(t){if(!t||"object"!=typeof t)return;var n=t[i];if(!n)return;var r=n.base;var o=n.draft;var a=n.assigned;if(Array.isArray(t)){if(P(n)){if(_(n),a.length=!0,o.lengthc&&a[f-1]===l[f+s-1];)--f;for(var d=c;d=f;--v){var y=t.concat([v]);n[m+v-f]={op:"add",path:y,value:l[v]},h&&r.push({op:"remove",path:y})}h||r.push({op:"replace",path:t.concat(["length"]),value:a.length})}(e,t,n,r):function(e,t,n,r){var o=e.base,i=e.copy;f(e.assigned,function(e,a){var l=o[e],u=i[e],s=a?e in o?"replace":"add":"remove";if(l!==u||"replace"!==s){var c=t.concat(e);n.push("remove"===s?{op:s,path:c}:{op:s,path:c,value:u}),r.push("add"===s?{op:"remove",path:c}:"remove"===s?{op:"add",path:c,value:l}:{op:"replace",path:c,value:l})}})}(e,t,n,r)}function L(e,t){for(var n=0;n0;)r[o]=arguments[o+1];return u.produce(e,function(e){return t.call.apply(t,[n,e].concat(r))})}}if("function"!=typeof t)throw new Error("The first or second argument to `produce` must be a function");if(void 0!==n&&"function"!=typeof n)throw new Error("The third argument to `produce` must be a function or undefined");if(l(e)){var s=m.enter(),c=this.createProxy(e),f=!0;try{o=t(c),f=!1}finally{f?s.revoke():s.leave()}return o instanceof Promise?o.then(function(e){return s.usePatches(n),i.processResult(e,s)},function(e){throw s.revoke(),e}):(s.usePatches(n),this.processResult(o,s))}return void 0===(o=t(e))?e:o!==r?o:void 0},F.prototype.produceWithPatches=function(e,t,n){var r,o,i=this;if("function"==typeof e)return function(t){for(var n=[],r=arguments.length-1;r-- >0;)n[r]=arguments[r+1];return i.produceWithPatches(t,function(t){return e.apply(void 0,[t].concat(n))})};if(n)throw new Error("A patch listener cannot be passed to produceWithPatches");return[this.produce(e,t,function(e,t){r=e,o=t}),r,o]},F.prototype.createDraft=function(e){if(!l(e))throw new Error("First argument to `createDraft` must be a plain object, an array, or an immerable object");var t=m.enter(),n=this.createProxy(e);return n[i].isManual=!0,t.leave(),n},F.prototype.finishDraft=function(e,t){var n=e&&e[i];if(!n||!n.isManual)throw new Error("First argument to `finishDraft` must be a draft returned by `createDraft`");if(n.finalized)throw new Error("The given draft is already finalized");var r=n.scope;return r.usePatches(t),this.processResult(void 0,r)},F.prototype.setAutoFreeze=function(e){this.autoFreeze=e},F.prototype.setUseProxies=function(e){this.useProxies=e,u(this,e?j:O)},F.prototype.applyPatches=function(e,t){var n;for(n=t.length-1;n>=0;n--){var r=t[n];if(0===r.path.length&&"replace"===r.op){e=r.value;break}}return a(e)?L(e,t):this.produce(e,function(e){return L(e,t.slice(n+1))})},F.prototype.processResult=function(e,t){var n=t.drafts[0],o=void 0!==e&&e!==n;if(this.willFinalize(t,e,o),o){if(n[i].modified)throw t.revoke(),new Error("An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.");l(e)&&(e=this.finalize(e,null,t)),t.patches&&(t.patches.push({op:"replace",path:[],value:e}),t.inversePatches.push({op:"replace",path:[],value:n[i].base}))}else e=this.finalize(n,[],t);return t.revoke(),t.patches&&t.patchListener(t.patches,t.inversePatches),e!==r?e:void 0},F.prototype.finalize=function(e,t,n){var r=this,o=e[i];if(!o)return Object.isFrozen(e)?e:this.finalizeTree(e,null,n);if(o.scope!==n)return e;if(!o.modified)return o.base;if(!o.finalized){if(o.finalized=!0,this.finalizeTree(o.draft,t,n),this.onDelete)if(this.useProxies){var a=o.assigned;for(var l in a)a[l]||this.onDelete(o,l)}else{var u=o.base,s=o.copy;f(u,function(e){p(s,e)||r.onDelete(o,e)})}this.onCopy&&this.onCopy(o),this.autoFreeze&&n.canAutoFreeze&&Object.freeze(o.copy),t&&n.patches&&D(o,t,n.patches,n.inversePatches)}return o.copy},F.prototype.finalizeTree=function(e,t,n){var r=this,o=e[i];o&&(this.useProxies||(o.copy=c(o.draft,!0)),e=o.copy);var u=!!t&&!!n.patches,s=function(i,c,p){if(c===p)throw Error("Immer forbids circular references");var m=!!o&&p===e;if(a(c)){var v=m&&u&&!o.assigned[i]?t.concat(i):null;if(a(c=r.finalize(c,v,n))&&(n.canAutoFreeze=!1),Array.isArray(p)||d(p,i)?p[i]=c:Object.defineProperty(p,i,{value:c}),m&&c===o.base[i])return}else{if(m&&h(c,o.base[i]))return;l(c)&&!Object.isFrozen(c)&&f(c,s)}m&&r.onAssign&&r.onAssign(o,i,c)};return f(e,s),e};var $=new F,W=$.produce;$.produceWithPatches.bind($),$.setAutoFreeze.bind($),$.setUseProxies.bind($),$.applyPatches.bind($),$.createDraft.bind($),$.finishDraft.bind($);t.a=W}).call(this,n(33))},function(e,t,n){"use strict"; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,t){for(var n,l,u=a(e),s=1;s=200&&e<300}};u.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],function(e){u.headers[e]={}}),r.forEach(["post","put","patch"],function(e){u.headers[e]=r.merge(i)}),e.exports=u}).call(this,n(33))},function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function l(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var u,s=[],c=!1,f=-1;function d(){c&&u&&(c=!1,u.length?s=u.concat(s):f=-1,s.length&&p())}function p(){if(!c){var e=l(d);c=!0;for(var t=s.length;t;){for(u=s,s=[];++f1)for(var n=1;nI.length&&I.push(e)}function A(e,t,n){return null==e?0:function e(t,n,r,o){var l=typeof t;"undefined"!==l&&"boolean"!==l||(t=null);var u=!1;if(null===t)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case a:u=!0}}if(u)return r(o,t,""===n?"."+j(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var s=0;sthis.eventPool.length&&this.eventPool.push(e)}function fe(e){e.eventPool=[],e.getPooled=se,e.release=ce}o(ue.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=ae)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=ae)},persist:function(){this.isPersistent=ae},isPersistent:le,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=le,this._dispatchInstances=this._dispatchListeners=null}}),ue.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ue.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return o(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,fe(n),n},fe(ue);var de=ue.extend({data:null}),pe=ue.extend({data:null}),he=[9,13,27,32],me=V&&"CompositionEvent"in window,ve=null;V&&"documentMode"in document&&(ve=document.documentMode);var ye=V&&"TextEvent"in window&&!ve,ge=V&&(!me||ve&&8=ve),be=String.fromCharCode(32),we={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},xe=!1;function _e(e,t){switch(e){case"keyup":return-1!==he.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Se(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Te=!1;var ke={eventTypes:we,extractEvents:function(e,t,n,r){var o=void 0,i=void 0;if(me)e:{switch(e){case"compositionstart":o=we.compositionStart;break e;case"compositionend":o=we.compositionEnd;break e;case"compositionupdate":o=we.compositionUpdate;break e}o=void 0}else Te?_e(e,n)&&(o=we.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=we.compositionStart);return o?(ge&&"ko"!==n.locale&&(Te||o!==we.compositionStart?o===we.compositionEnd&&Te&&(i=ie()):(re="value"in(ne=r)?ne.value:ne.textContent,Te=!0)),o=de.getPooled(o,t,n,r),i?o.data=i:null!==(i=Se(n))&&(o.data=i),B(o),i=o):i=null,(e=ye?function(e,t){switch(e){case"compositionend":return Se(t);case"keypress":return 32!==t.which?null:(xe=!0,be);case"textInput":return(e=t.data)===be&&xe?null:e;default:return null}}(e,n):function(e,t){if(Te)return"compositionend"===e||!me&&_e(e,t)?(e=ie(),oe=re=ne=null,Te=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1