diff --git a/package/ctcgfw/luci-app-openclash/Makefile b/package/ctcgfw/luci-app-openclash/Makefile
index 35a0cac735..8638810486 100644
--- a/package/ctcgfw/luci-app-openclash/Makefile
+++ b/package/ctcgfw/luci-app-openclash/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-openclash
-PKG_VERSION:=0.37.4
+PKG_VERSION:=0.37.5
PKG_RELEASE:=beta
PKG_MAINTAINER:=vernesong
diff --git a/package/ctcgfw/luci-app-openclash/files/etc/config/openclash b/package/ctcgfw/luci-app-openclash/files/etc/config/openclash
index 1122088782..ac29744758 100644
--- a/package/ctcgfw/luci-app-openclash/files/etc/config/openclash
+++ b/package/ctcgfw/luci-app-openclash/files/etc/config/openclash
@@ -23,7 +23,7 @@ config openclash 'config'
option log_level 'silent'
option proxy_mode 'Rule'
option intranet_allowed '0'
- option enable_udp_proxy '0'
+ option enable_udp_proxy '1'
option lan_ac_mode '0'
option operation_mode 'redir-host'
option enable_rule_proxy '0'
diff --git a/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash b/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash
index e794c61037..15c30b63d9 100755
--- a/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash
+++ b/package/ctcgfw/luci-app-openclash/files/etc/init.d/openclash
@@ -4,6 +4,7 @@
START=99
STOP=15
+LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
CLASH="/etc/openclash/clash"
CLASH_CONFIG="/etc/openclash"
CRON_FILE="/etc/crontabs/root"
@@ -110,8 +111,8 @@ yml_check()
sed -i "s/- \{2,\}/- /g" "$3" 2>/dev/null
#检查关键字避免后续操作出错
- /usr/share/openclash/yml_field_name_ch.sh "$3"
-
+ /usr/share/openclash/yml_field_name_ch.sh "$3" 2>/dev/null
+
#dns
[ -z "$(grep "^dns:" "$3")" ] && {
sed -i "s/^ \{1,\}dns:/dns:/g" "$3" 2>/dev/null
@@ -131,7 +132,7 @@ yml_check()
group_len=$(sed -n '/^Proxy Group:/=' "$3" 2>/dev/null)
dns_len=$(sed -n '/^dns:/=' "$3" 2>/dev/null)
rule_len=$(sed -n '/^Rule:/=' "$3" 2>/dev/null)
-
+
if [ "$dns_len" -ge "$proxy_len" ] || [ "$dns_len" -ge "$rule_len" ] || [ "$dns_len" -ge "$group_len" ]; then
echo "错误: 不支持的配置文件, General 设置部分应位于开头,请根据模板修改后重试!" > $START_LOG
echo "${LOGTIME} Unsupported Config, Please Check The General Setting's location And Try-again!" >> $LOG_FILE
@@ -192,7 +193,6 @@ yml_check()
fi 2>/dev/null
fi
-
if [ ! -z "$provider_len" ]; then
proxy_provider_mode=1
fi
@@ -208,10 +208,10 @@ yml_check()
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/backdns.config 2>/dev/null
- fi
-
+ fi 2>/dev/null
+
yml_dns_check
-
+
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
@@ -240,7 +240,7 @@ yml_dns_check()
sed -i '/^Proxy:/i\dns:' "$CONFIG_FILE" 2>/dev/null
fi
fi
-
+
if [ -z "$(grep '^ \{0,\}nameserver:' "$CONFIG_FILE")" ]; then
if [ "$proxy_provider_mode" -eq 1 ]; then
sed -i '/^proxy-provider:/i\ nameserver:' "$CONFIG_FILE" 2>/dev/null
@@ -256,21 +256,21 @@ yml_dns_check()
if [ -z "$dns_port" ] || [ "$dns_port" -eq 53 ]; then
dns_port=7874
fi
-
+
if [ ! -z "$(grep "^ \{0,\}listen:" "$CONFIG_FILE")" ]; then
- if [ "$ipv6_enable" -ne 1 ]; then
+ if [ "$ipv6_enable" != "1" ]; then
sed -i "/^ \{0,\}listen:/c\ listen: 127.0.0.1:${dns_port}" "$CONFIG_FILE" 2>/dev/null
else
sed -i "/^ \{0,\}listen:/c\ listen: 0.0.0.0:${dns_port}" "$CONFIG_FILE" 2>/dev/null
fi
else
- if [ "$ipv6_enable" -ne 1 ]; then
+ if [ "$ipv6_enable" != "1" ]; then
sed -i "/^dns:/a\ listen: 127.0.0.1:${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
- fi
-
+ fi 2>/dev/null
+
uci set openclash.config.dns_port="$dns_port" && uci commit openclash
}
@@ -290,7 +290,7 @@ yml_provider_path()
sed -i "s#${provider_path}#./proxy_provider/${provider_name}#" "$1" 2>/dev/null
fi
done
- fi
+ fi 2>/dev/null
}
#检查代理集文件防止启动失败
@@ -630,11 +630,11 @@ fi
lan_ac()
{
- if [ -z "$1" ]; then
+ if [ -z "$1" ]; then
return
- fi
+ fi
- ipset add "$2" "$1" 2>/dev/null
+ ipset add "$2" "$1" 2>/dev/null
}
@@ -662,7 +662,7 @@ else
if [ ! -f "$CONFIG_FILE" ] && [ -f "$BACKUP_FILE" ]; then
cp "$BACKUP_FILE" "$CONFIG_FILE"
fi
-fi
+fi 2>/dev/null
CONFIG_NAME=$(echo "$CONFIG_FILE" |awk -F '/' '{print $5}' 2>/dev/null)
}
@@ -715,6 +715,272 @@ do_run_mode()
[ ! -x "/etc/openclash/core/clash" ] && chmod 4755 /etc/openclash/core/clash 2>/dev/null
}
+set_firewall()
+{
+if [ "$(iptables -t nat -nL PREROUTING --line-number |grep "udp dpt:53" |grep "0.0.0.0/0 \{0,\}0.0.0.0/0" |wc -l)" -gt 1 ] && [ "$enable_redirect_dns" -eq "1" ]; then
+ echo "发现53端口被劫持,清理防火墙规则..." >$START_LOG
+ pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/0.0.0.0\/0 \{0,\}0.0.0.0\/0 \{0,\}udp dpt:53/=' 2>/dev/null |sort -rn)
+ for pre_line in $pre_lines; do
+ iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1
+ done
+ iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1
+ sleep 2
+fi
+
+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
+fi
+
+if [ "$(uci get firewall.@defaults[0].forward)" != "ACCEPT" ]; then
+ uci set firewall.@defaults[0].forward=ACCEPT >/dev/null 2>&1
+ uci commit firewall >/dev/null 2>&1
+ /etc/init.d/firewall reload >/dev/null 2>&1
+fi
+
+mkdir -p /var/etc
+cat > "/var/etc/openclash.include" <<-EOF
+/etc/init.d/openclash reload >/dev/null 2>&1
+EOF
+
+#lan_ac
+if [ "$operation_mode" = "redir-host" ] && [ "$en_mode" = "redir-host" ]; then
+ if [ "$lan_ac_mode" = "0" ] && [ ! -z "$(uci get openclash.config.lan_ac_black_ips 2>/dev/null)" ]; then
+ ipset create lan_ac_black_ips hash:net
+ config_load "openclash"
+ config_list_foreach "config" "lan_ac_black_ips" lan_ac "lan_ac_black_ips"
+ elif [ "$lan_ac_mode" = "1" ] && [ ! -z "$(uci get openclash.config.lan_ac_white_ips 2>/dev/null)" ]; then
+ ipset create lan_ac_white_ips hash:net
+ config_load "openclash"
+ config_list_foreach "config" "lan_ac_white_ips" lan_ac "lan_ac_white_ips"
+ fi
+fi
+
+if [ -z "$en_mode_tun" ]; then
+ #tcp
+ iptables -t nat -N openclash
+ iptables -t nat -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
+ iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
+ 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
+ if [ ! -z "$wan_ip4" ]; then
+ for wan_ip4s in $wan_ip4; do
+ iptables -t nat -A openclash -d "$wan_ip4s" -j RETURN 2>/dev/null
+ done
+ fi
+ iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port"
+ #iptables -t nat -I PREROUTING -p tcp -d 8.8.8.8 -j REDIRECT --to-ports "$proxy_port"
+ #iptables -t nat -I PREROUTING -p tcp -d 8.8.4.4 -j REDIRECT --to-ports "$proxy_port"
+ iptables -t nat -A PREROUTING -p tcp -j openclash
+
+ #udp
+ if [ "$enable_udp_proxy" -eq 1 ]; then
+ ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789
+ ip route add local default dev lo table "$PROXY_ROUTE_TABLE"
+ iptables -t mangle -N openclash
+ iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
+ iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
+ iptables -t mangle -A openclash -d 0.0.0.0/8 -j RETURN
+ iptables -t mangle -A openclash -d 10.0.0.0/8 -j RETURN
+ iptables -t mangle -A openclash -d 127.0.0.0/8 -j RETURN
+ iptables -t mangle -A openclash -d 169.254.0.0/16 -j RETURN
+ iptables -t mangle -A openclash -d 172.16.0.0/12 -j RETURN
+ iptables -t mangle -A openclash -d 192.168.0.0/16 -j RETURN
+ iptables -t mangle -A openclash -d 224.0.0.0/4 -j RETURN
+ iptables -t mangle -A openclash -d 240.0.0.0/4 -j RETURN
+ if [ ! -z "$wan_ip4" ]; then
+ for wan_ip4s in $wan_ip4; do
+ iptables -t mangle -A openclash -d "$wan_ip4s" -j RETURN 2>/dev/null
+ done
+ fi
+
+ iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
+ iptables -t mangle -A PREROUTING -p udp -j openclash
+ fi
+
+ if [ "$en_mode" = "fake-ip" ]; then
+ iptables -t nat -A OUTPUT -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port"
+ if [ "$enable_udp_proxy" -eq 1 ]; then
+ iptables -t mangle -A OUTPUT -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
+ fi
+ fi
+
+ if [ "$ipv6_enable" -eq 1 ]; then
+ #tcp
+ ip6tables -t nat -N openclash
+ if [ ! -z "$lan_ip6" ]; then
+ for lan_ip6s in $lan_ip6; do
+ ip6tables -t nat -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null
+ done
+ fi
+ ip6tables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port"
+ ip6tables -t nat -A PREROUTING -p tcp -j openclash
+
+ #udp
+ if [ "$enable_udp_proxy" -eq 1 ]; then
+ ip6tables -t mangle -N openclash
+ if [ ! -z "$lan_ip6" ]; then
+ for lan_ip6s in $lan_ip6; do
+ if [ "$enable_udp_proxy" -eq 1 ]; then
+ ip6tables -t mangle -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null
+ fi
+ done
+ fi
+ ip6tables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
+ ip6tables -t mangle -A PREROUTING -p udp -j openclash
+ fi
+ fi
+else
+ #TUN模式
+ ipset create localnetwork hash:net
+ ipset add localnetwork 127.0.0.0/8
+ ipset add localnetwork 10.0.0.0/8
+ ipset add localnetwork 169.254.0.0/16
+ ipset add localnetwork 192.168.0.0/16
+ ipset add localnetwork 224.0.0.0/4
+ ipset add localnetwork 240.0.0.0/4
+ ipset add localnetwork 172.16.0.0/12
+ if [ ! -z "$wan_ip4" ]; then
+ for wan_ip4s in $wan_ip4; do
+ ipset add localnetwork "$wan_ip4s" 2>/dev/null
+ done
+ fi
+ #启动TUN
+ if [ "$en_mode_tun" = "2" ]; then
+ ip tuntap add user root mode tun clash0
+ ip link set clash0 up
+ ip route replace default dev clash0 table "$PROXY_ROUTE_TABLE"
+ elif [ "$en_mode_tun" = "1" ]; then
+ TUN_WAIT=0
+ while ( [ ! -z "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] )
+ do
+ TUN_WAIT=$(expr "$TUN_WAIT" + 1)
+ sleep 2
+ done
+ ip route replace default dev utun table "$PROXY_ROUTE_TABLE"
+ fi
+ ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789
+ #设置防火墙
+ iptables -t mangle -N openclash
+ iptables -t mangle -F openclash
+ iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN
+ if [ "$en_mode" = "fake-ip" ]; then
+ iptables -t mangle -A openclash -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
+ fi
+ iptables -t mangle -I OUTPUT -j openclash
+ iptables -t mangle -I PREROUTING -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
+ iptables -t mangle -I PREROUTING -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
+ iptables -t mangle -I PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK"
+ iptables -t nat -I PREROUTING -p tcp --dport 53 -j ACCEPT
+ #ipv6
+ # if [ "$ipv6_enable" -eq 1 ]; then
+ # ip6tables -t mangle -I PREROUTING -j MARK --set-mark "$PROXY_FWMARK"
+ # fi
+fi
+}
+
+revert_firewall()
+{
+ rm -rf /var/etc/openclash.include 2>/dev/null
+
+ #ipv4
+
+ ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789 >/dev/null 2>&1
+ ip route del local default dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
+
+ iptables -t nat -D PREROUTING -p tcp --dport 53 -j ACCEPT >/dev/null 2>&1
+
+ iptables -t mangle -F openclash >/dev/null 2>&1
+ iptables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1
+ iptables -t mangle -X openclash >/dev/null 2>&1
+
+ iptables -t nat -F openclash >/dev/null 2>&1
+ iptables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1
+ iptables -t nat -X openclash >/dev/null 2>&1
+
+ out_lines=$(iptables -nvL OUTPUT -t mangle |sed 1,2d |sed -n '/198.18.0.0\/16/=' 2>/dev/null |sort -rn)
+ for out_line in $out_lines; do
+ iptables -t mangle -D OUTPUT "$out_line" >/dev/null 2>&1
+ done
+
+ out_lines=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/198.18.0.0\/16/=' 2>/dev/null |sort -rn)
+ for out_line in $out_lines; do
+ iptables -t nat -D OUTPUT "$out_line" >/dev/null 2>&1
+ done
+
+ #pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/8\.8\./=' 2>/dev/null |sort -rn)
+ #for pre_line in $pre_lines; do
+ # iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1
+ #done
+
+ #ipv6
+ ip6tables -t mangle -F openclash >/dev/null 2>&1
+ ip6tables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1
+ ip6tables -t mangle -X openclash >/dev/null 2>&1
+
+ ip6tables -t nat -F openclash >/dev/null 2>&1
+ ip6tables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1
+ ip6tables -t nat -X openclash >/dev/null 2>&1
+
+ #TUN
+ ip route del default dev clash0 table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
+ ip route del default dev utun table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
+ ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789 >/dev/null 2>&1
+ ip link set dev clash0 down >/dev/null 2>&1
+ ip tuntap del clash0 mode tun >/dev/null 2>&1
+
+ iptables -t mangle -D OUTPUT -j openclash >/dev/null 2>&1
+ iptables -t mangle -D PREROUTING -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
+ iptables -t mangle -D PREROUTING -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
+ iptables -t mangle -D PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1
+ ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1
+ iptables -t mangle -F openclash >/dev/null 2>&1
+ iptables -t mangle -X openclash >/dev/null 2>&1
+
+ ipset destroy localnetwork >/dev/null 2>&1
+ ipset destroy lan_ac_white_ips >/dev/null 2>&1
+ ipset destroy lan_ac_black_ips >/dev/null 2>&1
+}
+
+get_config()
+{
+ 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 |awk -F '/' '{print $1}' 2>/dev/null)
+ wan_ip4=$(ifconfig | grep 'inet addr' | awk '{print $2}' | cut -d: -f2 2>/dev/null)
+ lan_ip6=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null)
+ direct_dns=$(uci get openclash.config.direct_dns 2>/dev/null)
+ disable_masq_cache=$(uci get openclash.config.disable_masq_cache 2>/dev/null)
+ log_level=$(uci get openclash.config.log_level 2>/dev/null)
+ proxy_mode=$(uci get openclash.config.proxy_mode 2>/dev/null)
+ intranet_allowed=$(uci get openclash.config.intranet_allowed 2>/dev/null)
+ enable_udp_proxy=$(uci get openclash.config.enable_udp_proxy 2>/dev/null)
+ operation_mode=$(uci get openclash.config.operation_mode 2>/dev/null)
+ lan_ac_mode=$(uci get openclash.config.lan_ac_mode 2>/dev/null)
+ enable_rule_proxy=$(uci get openclash.config.enable_rule_proxy 2>/dev/null)
+}
+
start()
{
#禁止多个实例
@@ -724,7 +990,7 @@ status=$(ps|grep -c /etc/init.d/openclash)
config_choose
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
#检查是否存在核心文件
do_run_mode
@@ -735,29 +1001,7 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
}
echo "OpenClash 开始启动..." >$START_LOG
echo "第一步: 获取配置..." >$START_LOG
- 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 |awk -F '/' '{print $1}' 2>/dev/null)
- wan_ip4=$(ifconfig | grep 'inet addr' | awk '{print $2}' | cut -d: -f2 2>/dev/null)
- lan_ip6=$(ifconfig | grep 'inet6 addr' | awk '{print $3}' 2>/dev/null)
- direct_dns=$(uci get openclash.config.direct_dns 2>/dev/null)
- disable_masq_cache=$(uci get openclash.config.disable_masq_cache 2>/dev/null)
- log_level=$(uci get openclash.config.log_level 2>/dev/null)
- proxy_mode=$(uci get openclash.config.proxy_mode 2>/dev/null)
- intranet_allowed=$(uci get openclash.config.intranet_allowed 2>/dev/null)
- enable_udp_proxy=$(uci get openclash.config.enable_udp_proxy 2>/dev/null)
- operation_mode=$(uci get openclash.config.operation_mode 2>/dev/null)
- lan_ac_mode=$(uci get openclash.config.lan_ac_mode 2>/dev/null)
- enable_rule_proxy=$(uci get openclash.config.enable_rule_proxy 2>/dev/null)
-
+ get_config
echo "第二步: 配置文件检查..." >$START_LOG
yml_check "$en_mode" "$enable_custom_dns" "$CONFIG_FILE" "$BACKUP_FILE" "$START_BACKUP"
grep "^ \{0,\}Proxy Group:" "$CONFIG_FILE" >/dev/null 2>&1 && grep "^ \{0,\}Rule:" "$CONFIG_FILE" >/dev/null 2>&1
@@ -791,7 +1035,15 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
echo "" >$START_LOG
else
echo "第五步: 启动主程序..." >$START_LOG
- nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
+ config_reload=$(uci get openclash.config.config_reload 2>/dev/null)
+ if [ -n "$(pidof clash)" ] && [ "$en_mode_tun" != "1" ] && [ "$config_reload" != "0" ]; then
+ curl -s --connect-timeout 5 -m 5 -H 'Content-Type: application/json' -H "Authorization: Bearer ${da_password}" -XPUT http://"$lan_ip":"$cn_port"/configs -d "{\"path\": \"$CONFIG_FILE\"}" 2>/dev/null
+ else
+ kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null
+ nohup "$CLASH" -d "$CLASH_CONFIG" -f "$CONFIG_FILE" >> $LOG_FILE 2>&1 &
+ fi
+ uci set openclash.config.config_reload=1
+ uci commit openclash
#检测proxy_provider配置文件状态
echo "第六步: 等待主程序下载代理集..." >$START_LOG
@@ -801,179 +1053,7 @@ if [ "$enable" -eq 1 ] && [ -f "$CONFIG_FILE" ]; then
ln -s /usr/share/openclash/yacd /www/luci-static/openclash 2>/dev/null
echo "第八步: 设置防火墙规则..." >$START_LOG
- if [ "$(iptables -t nat -nL PREROUTING --line-number |grep "udp dpt:53" |grep "0.0.0.0/0 \{0,\}0.0.0.0/0" |wc -l)" -gt 1 ] && [ "$enable_redirect_dns" -eq "1" ]; then
- echo "发现53端口被劫持,清理防火墙规则..." >$START_LOG
- pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/0.0.0.0\/0 \{0,\}0.0.0.0\/0 \{0,\}udp dpt:53/=' 2>/dev/null |sort -rn)
- for pre_line in $pre_lines; do
- iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1
- done
- iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53 >/dev/null 2>&1
- sleep 2
- fi
-
- 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
- fi
-
- if [ "$(uci get firewall.@defaults[0].forward)" != "ACCEPT" ]; then
- uci set firewall.@defaults[0].forward=ACCEPT >/dev/null 2>&1
- uci commit firewall >/dev/null 2>&1
- /etc/init.d/firewall reload >/dev/null 2>&1
- fi
-
-mkdir -p /var/etc
-cat > "/var/etc/openclash.include" <<-EOF
-/etc/init.d/openclash restart
-EOF
- #lan_ac
- if [ "$operation_mode" = "redir-host" ] && [ "$en_mode" = "redir-host" ]; then
- if [ "$lan_ac_mode" = "0" ] && [ ! -z "$(uci get openclash.config.lan_ac_black_ips 2>/dev/null)" ]; then
- ipset create lan_ac_black_ips hash:net
- config_load "openclash"
- config_list_foreach "config" "lan_ac_black_ips" lan_ac "lan_ac_black_ips"
- elif [ "$lan_ac_mode" = "1" ] && [ ! -z "$(uci get openclash.config.lan_ac_white_ips 2>/dev/null)" ]; then
- ipset create lan_ac_white_ips hash:net
- config_load "openclash"
- config_list_foreach "config" "lan_ac_white_ips" lan_ac "lan_ac_white_ips"
- fi
- fi
-
- if [ -z "$en_mode_tun" ]; then
-
- #tcp
- iptables -t nat -N openclash
- iptables -t nat -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
- iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
- 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
- if [ ! -z "$wan_ip4" ]; then
- for wan_ip4s in $wan_ip4; do
- iptables -t nat -A openclash -d "$wan_ip4s" -j RETURN 2>/dev/null
- done
- fi
- iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port"
- iptables -t nat -I PREROUTING -p tcp -d 8.8.8.8 -j REDIRECT --to-ports "$proxy_port"
- iptables -t nat -I PREROUTING -p tcp -d 8.8.4.4 -j REDIRECT --to-ports "$proxy_port"
- iptables -t nat -A PREROUTING -p tcp -j openclash
-
- #udp
- if [ "$enable_udp_proxy" -eq 1 ]; then
- ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789
- ip route add local default dev lo table "$PROXY_ROUTE_TABLE"
- iptables -t mangle -N openclash
- iptables -t mangle -A openclash -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
- iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
- iptables -t mangle -A openclash -d 0.0.0.0/8 -j RETURN
- iptables -t mangle -A openclash -d 10.0.0.0/8 -j RETURN
- iptables -t mangle -A openclash -d 127.0.0.0/8 -j RETURN
- iptables -t mangle -A openclash -d 169.254.0.0/16 -j RETURN
- iptables -t mangle -A openclash -d 172.16.0.0/12 -j RETURN
- iptables -t mangle -A openclash -d 192.168.0.0/16 -j RETURN
- iptables -t mangle -A openclash -d 224.0.0.0/4 -j RETURN
- iptables -t mangle -A openclash -d 240.0.0.0/4 -j RETURN
- if [ ! -z "$wan_ip4" ]; then
- for wan_ip4s in $wan_ip4; do
- iptables -t mangle -A openclash -d "$wan_ip4s" -j RETURN 2>/dev/null
- done
- fi
-
- iptables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
- iptables -t mangle -A PREROUTING -p udp -j openclash
- fi
-
- if [ "$en_mode" = "fake-ip" ]; then
- iptables -t nat -A OUTPUT -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports "$proxy_port"
- if [ "$enable_udp_proxy" -eq 1 ]; then
- iptables -t mangle -A OUTPUT -p udp -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
- fi
- fi
-
- if [ "$ipv6_enable" -eq 1 ]; then
- #tcp
- ip6tables -t nat -N openclash
- if [ ! -z "$lan_ip6" ]; then
- for lan_ip6s in $lan_ip6; do
- ip6tables -t nat -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null
- done
- fi
- ip6tables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port"
- ip6tables -t nat -A PREROUTING -p tcp -j openclash
-
- #udp
- if [ "$enable_udp_proxy" -eq 1 ]; then
- ip6tables -t mangle -N openclash
- if [ ! -z "$lan_ip6" ]; then
- for lan_ip6s in $lan_ip6; do
- if [ "$enable_udp_proxy" -eq 1 ]; then
- ip6tables -t mangle -A openclash -d "$lan_ip6s" -j RETURN 2>/dev/null
- fi
- done
- fi
- ip6tables -t mangle -A openclash -p udp -j TPROXY --on-port "$proxy_port" --tproxy-mark "$PROXY_FWMARK"
- ip6tables -t mangle -A PREROUTING -p udp -j openclash
- fi
- fi
- else
- #TUN模式
- ipset create localnetwork hash:net
- ipset add localnetwork 127.0.0.0/8
- ipset add localnetwork 10.0.0.0/8
- ipset add localnetwork 169.254.0.0/16
- ipset add localnetwork 192.168.0.0/16
- ipset add localnetwork 224.0.0.0/4
- ipset add localnetwork 240.0.0.0/4
- ipset add localnetwork 172.16.0.0/12
- if [ ! -z "$wan_ip4" ]; then
- for wan_ip4s in $wan_ip4; do
- ipset add localnetwork "$wan_ip4s" 2>/dev/null
- done
- fi
- #启动TUN
- if [ "$en_mode_tun" = "2" ]; then
- ip tuntap add user root mode tun clash0
- ip link set clash0 up
- ip route replace default dev clash0 table "$PROXY_ROUTE_TABLE"
- elif [ "$en_mode_tun" = "1" ]; then
- TUN_WAIT=0
- while ( [ ! -z "$(pidof clash)" ] && [ -z "$(ip route list |grep utun)" ] && [ "$TUN_WAIT" -le 3 ] )
- do
- TUN_WAIT=$(expr "$TUN_WAIT" + 1)
- sleep 2
- done
- ip route replace default dev utun table "$PROXY_ROUTE_TABLE"
- fi
- ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789
- #设置防火墙
- iptables -t mangle -N openclash
- iptables -t mangle -F openclash
- iptables -t mangle -A openclash -m set --match-set localnetwork dst -j RETURN
- if [ "$en_mode" = "fake-ip" ]; then
- iptables -t mangle -A openclash -d 198.18.0.0/16 -j MARK --set-mark "$PROXY_FWMARK"
- fi
- iptables -t mangle -I OUTPUT -j openclash
- iptables -t mangle -I PREROUTING -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
- iptables -t mangle -I PREROUTING -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
- iptables -t mangle -I PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK"
- iptables -t nat -I PREROUTING -p tcp --dport 53 -j ACCEPT
- #ipv6
- # if [ "$ipv6_enable" -eq 1 ]; then
- # ip6tables -t mangle -I PREROUTING -j MARK --set-mark "$PROXY_FWMARK"
- # fi
- fi
+ set_firewall
echo "第九步: 重启 Dnsmasq 程序..." >$START_LOG
change_dns "$enable_redirect_dns" "$disable_masq_cache"
@@ -1067,108 +1147,70 @@ fi
stop()
{
- echo "OpenClash 开始关闭..." >$START_LOG
- echo "第一步: 备份当前节点状态..." >$START_LOG
- /usr/share/openclash/openclash_history_get.sh &
- wait
- echo "第二步: 删除 OpenClash 防火墙规则..." >$START_LOG
- rm -rf /var/etc/openclash.include 2>/dev/null
-
-#ipv4
+ #禁止多个实例
+ status=$(ps|grep -c /etc/init.d/openclash)
+ [ "$status" -gt "3" ] && exit 0
+
+ enable=$(uci get openclash.config.enable 2>/dev/null)
- ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789 >/dev/null 2>&1
- ip route del local default dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
+ echo "OpenClash 开始关闭..." >$START_LOG
+ echo "第一步: 备份当前节点状态..." >$START_LOG
+ /usr/share/openclash/openclash_history_get.sh &
+ wait
- iptables -t nat -D PREROUTING -p tcp --dport 53 -j ACCEPT >/dev/null 2>&1
+ echo "第二步: 删除 OpenClash 防火墙规则..." >$START_LOG
+ revert_firewall
- iptables -t mangle -F openclash >/dev/null 2>&1
- iptables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1
- iptables -t mangle -X openclash >/dev/null 2>&1
-
- iptables -t nat -F openclash >/dev/null 2>&1
- iptables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1
- iptables -t nat -X openclash >/dev/null 2>&1
-
- ipset destroy lan_ac_white_ips >/dev/null 2>&1
- ipset destroy lan_ac_black_ips >/dev/null 2>&1
-
- out_lines=$(iptables -nvL OUTPUT -t mangle |sed 1,2d |sed -n '/198.18.0.0\/16/=' 2>/dev/null |sort -rn)
- for out_line in $out_lines; do
- iptables -t mangle -D OUTPUT "$out_line" >/dev/null 2>&1
- done
-
- out_lines=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/198.18.0.0\/16/=' 2>/dev/null |sort -rn)
- for out_line in $out_lines; do
- iptables -t nat -D OUTPUT "$out_line" >/dev/null 2>&1
- done
-
- pre_lines=$(iptables -nvL PREROUTING -t nat |sed 1,2d |sed -n '/8.8./=' 2>/dev/null |sort -rn)
- for pre_line in $pre_lines; do
- iptables -t nat -D PREROUTING "$pre_line" >/dev/null 2>&1
- done
-
-#ipv6
- ip6tables -t mangle -F openclash >/dev/null 2>&1
- ip6tables -t mangle -D PREROUTING -p udp -j openclash >/dev/null 2>&1
- ip6tables -t mangle -X openclash >/dev/null 2>&1
-
- ip6tables -t nat -F openclash >/dev/null 2>&1
- ip6tables -t nat -D PREROUTING -p tcp -j openclash >/dev/null 2>&1
- ip6tables -t nat -X openclash >/dev/null 2>&1
-
-#TUN
- ip link set dev clash0 down >/dev/null 2>&1
- ip tuntap del clash0 mode tun >/dev/null 2>&1
- ip route del default dev clash0 table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
- ip route del default dev utun table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
- ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" pref 789 >/dev/null 2>&1
+ echo "第三步: 关闭 OpenClash 守护程序..." >$START_LOG
+ watchdog_pids=$(ps |grep openclash_watchdog.sh |grep -v grep |awk '{print $1}' 2>/dev/null)
+ for watchdog_pid in $watchdog_pids; do
+ kill -9 "$watchdog_pid" >/dev/null 2>&1
+ done
- iptables -t mangle -D OUTPUT -j openclash >/dev/null 2>&1
- iptables -t mangle -D PREROUTING -m set --match-set lan_ac_black_ips src -j RETURN >/dev/null 2>&1
- iptables -t mangle -D PREROUTING -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1
- iptables -t mangle -D PREROUTING -m set ! --match-set localnetwork dst -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1
- ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" >/dev/null 2>&1
- iptables -t mangle -F openclash >/dev/null 2>&1
- iptables -t mangle -X openclash >/dev/null 2>&1
- ipset destroy localnetwork >/dev/null 2>&1
+ echo "第四步: 关闭 Clash 主程序..." >$START_LOG
+ if [ "$enable" -eq 0 ]; then
+ kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null
+ fi
- echo "第三步: 关闭 OpenClash 守护程序..." >$START_LOG
- watchdog_pids=$(ps |grep openclash_watchdog.sh |grep -v grep |awk '{print $1}' 2>/dev/null)
- for watchdog_pid in $watchdog_pids; do
- kill -9 "$watchdog_pid" >/dev/null 2>&1
- done
+ echo "第五步: 重启 Dnsmasq 程序..." >$START_LOG
+ dns_port=$(uci get openclash.config.dns_port 2>/dev/null)
+ redirect_dns=$(uci get openclash.config.redirect_dns 2>/dev/null)
+ masq_cache=$(uci get openclash.config.masq_cache 2>/dev/null)
+ revert_dns "$redirect_dns" "$masq_cache" "$dns_port"
+ /etc/init.d/dnsmasq restart >/dev/null 2>&1
- echo "第四步: 关闭 Clash 主程序..." >$START_LOG
- kill -9 "$(pidof clash|sed 's/$//g')" 2>/dev/null
+ echo "第六步:删除 OpenClash 残留文件..." >$START_LOG
+ if [ "$enable" -eq 0 ]; then
+ rm -rf $LOG_FILE 2>/dev/null
+ rm -rf /tmp/openclash_debug.log 2>/dev/null
+ rm -rf /www/luci-static/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
+ rm -rf /tmp/rules_name 2>/dev/null
+ echo "OpenClash 关闭成功!" >$START_LOG
+ sleep 5
+ fi
- echo "第五步: 重启 Dnsmasq 程序..." >$START_LOG
- dns_port=$(uci get openclash.config.dns_port 2>/dev/null)
- redirect_dns=$(uci get openclash.config.redirect_dns 2>/dev/null)
- masq_cache=$(uci get openclash.config.masq_cache 2>/dev/null)
- revert_dns "$redirect_dns" "$masq_cache" "$dns_port"
- /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/luci-static/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
- rm -rf /tmp/rules_name 2>/dev/null
- echo "OpenClash 关闭成功!" >$START_LOG
- sleep 5
- fi
-
- rm -rf $START_LOG 2>/dev/null
- del_cron
- echo "OpenClash Already Stop"
+ rm -rf $START_LOG 2>/dev/null
+ del_cron
+ echo "OpenClash Already Stop"
}
restart()
{
- stop
- start
+ stop
+ start
+}
+
+reload()
+{
+ revert_firewall 2>/dev/null
+ config_choose 2>/dev/null
+ do_run_mode 2>/dev/null
+ get_config 2>/dev/null
+ set_firewall 2>/dev/null
+ /usr/share/openclash/openclash_history_set.sh
+ echo "${LOGTIME} OpenClash Reload After Firewall Restart" >> $LOG_FILE
}
diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/Country.mmdb b/package/ctcgfw/luci-app-openclash/files/etc/openclash/Country.mmdb
index c068fc5f01..7ed9ddc341 100644
Binary files a/package/ctcgfw/luci-app-openclash/files/etc/openclash/Country.mmdb and b/package/ctcgfw/luci-app-openclash/files/etc/openclash/Country.mmdb differ
diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_fake_black.conf b/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_fake_black.conf
index e7df6a0434..e013577039 100644
--- a/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_fake_black.conf
+++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/custom/openclash_custom_fake_black.conf
@@ -17,6 +17,10 @@ ina.ntp.org.cn
1.openwrt.pool.ntp.org
2.openwrt.pool.ntp.org
3.openwrt.pool.ntp.org
+time1.cloud.tencent.com
+time.ustc.edu.cn
+pool.ntp.org
+ntp.ubuntu.com
ntp.aliyun.com
ntp1.aliyun.com
ntp2.aliyun.com
diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml b/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml
index 85c5769883..bb5485e7b9 100644
--- a/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml
+++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/lhie1.yaml
@@ -4052,7 +4052,6 @@ Rule:
- DOMAIN-SUFFIX,iflyad.bj.openstorage.cn,AdBlock
- DOMAIN-SUFFIX,iframe.travel.yahoo.com,AdBlock
- DOMAIN-SUFFIX,ig.nukefans.net,AdBlock
-- DOMAIN-SUFFIX,igexin.com,AdBlock
- DOMAIN-SUFFIX,igj5y.yongchanghengyuan.com,AdBlock
- DOMAIN-SUFFIX,ih.adscale.de,AdBlock
- DOMAIN-SUFFIX,ihualun.com,AdBlock
@@ -6143,7 +6142,6 @@ Rule:
- DOMAIN-SUFFIX,pv.focus.cn,AdBlock
- DOMAIN-SUFFIX,pv.ra.icast.cn,AdBlock
- DOMAIN-SUFFIX,pv.sogou.com,AdBlock
-- DOMAIN-SUFFIX,pv.sohu.com,AdBlock
- DOMAIN-SUFFIX,pv.xcar.com.cn,AdBlock
- DOMAIN-SUFFIX,pv.zdnet.com.cn,AdBlock
- DOMAIN-SUFFIX,pv.zol.com.cn,AdBlock
@@ -8507,15 +8505,16 @@ Rule:
# > BBC iPlayer
# - USER-AGENT,BBCiPlayer*,GlobalTV
- DOMAIN-KEYWORD,bbcfmt,GlobalTV
-- DOMAIN-SUFFIX,bbc.com,GlobalTV
-- DOMAIN-SUFFIX,bbc.co,GlobalTV
-- DOMAIN-SUFFIX,bbc.co.uk,GlobalTV
-- DOMAIN-SUFFIX,bbci.co,GlobalTV
-- DOMAIN-SUFFIX,bbci.co.uk,GlobalTV
+- DOMAIN,aod-dash-uk-live.akamaized.net,GlobalTV
+- DOMAIN,aod-hls-uk-live.akamaized.net,GlobalTV
- DOMAIN,vod-dash-uk-live.akamaized.net,GlobalTV
- DOMAIN,vod-thumb-uk-live.akamaized.net,GlobalTV
-- DOMAIN,vod-dash-uk-live.bbcfmt.hs.llnwd.net,GlobalTV
-- DOMAIN,vod-thumb-uk-live.bbcfmt.hs.llnwd.net,GlobalTV
+- DOMAIN-SUFFIX,bbc.co,GlobalTV
+- DOMAIN-SUFFIX,bbc.co.uk,GlobalTV
+- DOMAIN-SUFFIX,bbc.com,GlobalTV
+- DOMAIN-SUFFIX,bbcfmt.hs.llnwd.net,GlobalTV
+- DOMAIN-SUFFIX,bbci.co,GlobalTV
+- DOMAIN-SUFFIX,bbci.co.uk,GlobalTV
# > DAZN
- DOMAIN-SUFFIX,d151l6v8er5bdm.cloudfront.net,GlobalTV
@@ -9590,16 +9589,51 @@ Rule:
- DOMAIN-SUFFIX,telegra.ph,Telegram
- DOMAIN-SUFFIX,telegram.me,Telegram
- DOMAIN-SUFFIX,telegram.org,Telegram
-- IP-CIDR,91.108.4.0/22,Telegram
-- IP-CIDR,91.108.56.0/22,Telegram
-- IP-CIDR,109.239.140.0/24,Telegram
+- IP-CIDR,149.154.167.99/32,Telegram
+- IP-CIDR,149.154.175.10/32,Telegram
+- IP-CIDR,149.154.167.40/32,Telegram
+- IP-CIDR,149.154.167.42/32,Telegram
+- IP-CIDR,149.154.175.117/32,Telegram
+- IP-CIDR,149.154.175.50/32,Telegram
+- IP-CIDR,149.154.167.50/32,Telegram
+- IP-CIDR,149.154.167.51/32,Telegram
+- IP-CIDR,149.154.175.100/32,Telegram
+- IP-CIDR,149.154.167.91/32,Telegram
+- IP-CIDR,149.154.167.90/32,Telegram
+- IP-CIDR,149.154.165.120/32,Telegram
+- IP-CIDR,149.154.166.120/32,Telegram
+- IP-CIDR,149.154.164.250/32,Telegram
+- IP-CIDR,149.154.167.117/32,Telegram
+- IP-CIDR,149.154.167.118/32,Telegram
+- IP-CIDR,149.154.167.192/27,Telegram
+- IP-CIDR,149.154.164.8/29 ,Telegram
+- IP-CIDR,91.108.8.0/27,Telegram
+- IP-CIDR,91.108.12.0/27,Telegram
+- IP-CIDR,91.108.16.0/27,Telegram
+- IP-CIDR,91.108.56.0/24,Telegram
+- IP-CIDR,91.108.4.0/24,Telegram
- IP-CIDR,149.154.160.0/22,Telegram
- IP-CIDR,149.154.164.0/22,Telegram
- IP-CIDR,149.154.168.0/22,Telegram
- IP-CIDR,149.154.172.0/22,Telegram
-- IP-CIDR6,2001:67c:4e8::/48,Telegram
+- IP-CIDR,91.108.56.0/22,Telegram
+- IP-CIDR,91.108.4.0/22,Telegram
+- IP-CIDR,91.108.8.0/22,Telegram
+- IP-CIDR,91.108.16.0/22,Telegram
+- IP-CIDR,91.108.12.0/22,Telegram
+- IP-CIDR,149.154.160.0/20,Telegram
+- IP-CIDR6,2001:b28:f23d:f001::e/128,Telegram
+- IP-CIDR6,2001:67c:4e8:f002::e/128,Telegram
+- IP-CIDR6,2001:b28:f23d:f003::e/128,Telegram
+- IP-CIDR6,2001:b28:f23d:f001::a/128,Telegram
+- IP-CIDR6,2001:67c:4e8:f002::a/128,Telegram
+- IP-CIDR6,2001:b28:f23d:f003::a/128,Telegram
+- IP-CIDR6,2001:67c:4e8:f004::a/128,Telegram
+- IP-CIDR6,2001:b28:f23f:f005::a/128,Telegram
+- IP-CIDR6,2001:67c:4e8:fa60::/64,Telegram
- IP-CIDR6,2001:b28:f23d::/48,Telegram
- IP-CIDR6,2001:b28:f23f::/48,Telegram
+- IP-CIDR6,2001:67c:4e8::/48,Telegram
diff --git a/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version b/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version
index ac95424cfb..380584ec3f 100644
--- a/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version
+++ b/package/ctcgfw/luci-app-openclash/files/etc/openclash/openclash_version
@@ -1,2 +1,2 @@
-v0.37.4-beta
-data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAAAqCAMAAAB2kksrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkRFOUVGREY5ODNERDExRUE5NkVBQTY2MTM2NzFDNjI5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkRFOUVGREZBODNERDExRUE5NkVBQTY2MTM2NzFDNjI5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6REU5RUZERjc4M0REMTFFQTk2RUFBNjYxMzY3MUM2MjkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6REU5RUZERjg4M0REMTFFQTk2RUFBNjYxMzY3MUM2MjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5yTMS+AAADAFBMVEVtbW09PT11tdkHVoQKa6GEhIS6uroGVYIkhLtTiqoGXpGTu9NFmsoahMGCgoKenp6Gv9/a2tqlpaXR4uxlnr54eHjf39/n5+c/Pz+izOUGcKzGxsahoaHOzs5paWnR5vIkapIJca2RkZFxcXG/v79GRkasrKy1tbUxk8w0dZsIXIsFYJXKysoGbalmrdViYmJXpdJFgKJkq9NLS0tDQ0Pg4OCTxeGLi4tilLArjsZ2dnay1uoGdLIXgL3AwMCcnJwIZJmiwNEEWYnCwsIEU4BBQUGx0eNGibCStchCQkIKYZPw9fcmcZy2trYXYo2jx9yEss2Xl5eDrsbB1OAJdbQFcrBKn8/S0tLQ0NAGXI1FkbxlZWUnicGNjY2yytgGZJo4lMhHnM1klrIFaaJzobuxzdw2kMUEXI5zsdQWaJevr69gYGAHZ52iyd8Zdapyn7iUlJQHbKXB2ecJWIVJns47l8uDqsF0dHSkzuYFYpeJweJZptM1h7URgsMCc7QBcrNRUVFUVFRVVVVSUlIFdrcLfL1WVlYHeLkKe7wGd7gOf8ADdLUEdrYOgMAEdbYDdbUDdLQSg8NXV1cSg8QShMQThMUAcrIOf78Nfr8Nfr4Mfb4Mfb0Je7sJersIebkJeroIebo6OjqqqqrU1NTV1dWrq6tISEipqak7OzuAgIB+fn7w9/vC3u5JSUmBgYHq6uqEvN1MTEz19fXz8/OEvd3B3u709PTh7/eFvt5/f3+DvNyCqcDB3e3v9PfB1eDg6u+JiYno6Ojg6vChv9DB3e7A1N/g7vaErMIFZZsFZ58UXomFvd4JeLhHm8zW1taDq8KCutsFa6bC3+8FZ6ALb6iEtNALernD3+9Inc05lckJaaDv9vqFvd0GWIcGdbQLdK+Dr8jR4OgIV4TB1+NVos8IcKwKebgHXo+yz+DB1+Qwk8ujxdjP5PFnqs9kmbdTU1MPgMEQgcJZWVlaWlpfX19bW1tcXFxNTU1eXl5PT09QUFBYWFhdXV1OTk7///////9VHktaAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAADBRJREFUeNrsVwt0FNUZniUu4ZG4SWTJEggJgUnKIwTYhIAEyiMR5FWxIBU4iICiiIISIahtCTGv1to2fWhbQDZPzBJC3pGQ8IaAIKKgglJFxbRaXUupCcF86X/vPHZml2BObTln9/Cdk7n/8/tnvjs7MxHa28tX9r/iDfiDB+AHz9jb24X2uPVXvAO/9wh8HtYulA9s8RL8zjPwuV1Y6S2St/zWQ/CMMPBbb8FPPQSfC9/e0vxmw4s0/6enQPjGa3BL85uPrz0Fwr+9Brc0v/n4ladA+JfX4BeegutqboyMjIz4P+zGQqNxoeoIRmNnesxGcyfZX+oQT3d5psvTrsGv/Z8NCAi4T3LG3ufEdfrvG+sSCUDAS/81hMuuiJlVDo64OTGXvyeMkUadX445qj0BwzpD8Qbe6OSwlzuA/7v8ct71/4U2OlaKouZZ5gXACTeCZ4EAl1CAW8SJ5IDkl28IN83NpUBggckUStON31fzSERq3YxBiFO3Foj432r+pw7wFu7oNbXXHXhLF00GLh49OmkGkEzelw0yLgKu/U/bgVqXWK1bpHM5DuGaHjFxqBAMDFZTxe3XvidIc50/EFAGzkFFWmcoRIPYyWF/vj6G48DstWvXzp6B4dpw8qTwtSx8ACnk3bZWxlEccOkfa8cM1LoEa90inctxCG4qVcQYYkusVtFgyOjfWW3Nt+u25/bbhetrXhiMfrKZj1ltcrH5+owxLpoL+iExSoWCv1wf47C86cyHZ5qOYpw2/OHatU233baKRH6LvDPTJTw6A0v17f5hWNqAWhfSWhYZm3xOE0pWvFpNdXKyrkaCq+blMFk2civDyox87OTeTuTLxzlxQMG1AhTEFNBjiGUL2AugvIDXATHczY/hjgSVfaMJpbKAdMfnkHATWL40/pqO/Fq/Uh5mlAWQiON5aEKMXCnwxlnaU0+XMQI1slWDEenpdkz9jOx3RsKersGHE0+w5Z2eeFwTTcGBIek67MCkj/+OWn0wnXQdUcPeBiMk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
\ No newline at end of file
+v0.37.5-beta
+data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXMAAAAqCAMAAAB2kksrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyNpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDRTA1RjM2ODdCNzExRUFBQ0U1RUY2OTlENDM1M0M4IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDRTA1RjM3ODdCNzExRUFBQ0U1RUY2OTlENDM1M0M4Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUNFMDVGMzQ4N0I3MTFFQUFDRTVFRjY5OUQ0MzUzQzgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUNFMDVGMzU4N0I3MTFFQUFDRTVFRjY5OUQ0MzUzQzgiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4Qn06HAAADAFBMVEUKa6HR0dEFVYIHVoRtbW09PT1TiqqEvN2EhIQahMG6urokhLuiwNJXpdJjlLEJeLg5lcmCgoKenp7a2tqlpaXR4ux4eHgGcKzf39/n5+c/Pz+izOXGxsahoaHOzs5paWnR5vIJca0GbqkkapJlnr2Su9KRkZFxcXG/v79GRkasrKw0dJm1tbUEXI4FYJUJdbQHXIzKysp2ttoXgb5iYmJFmspFgKKy1upkq9NmrdZLS0tDQ0Pg4OCTxeGLi4sGdLIEU4B2dnbAwMCcnJwEXpEEWYnCwsJBQUGx0OIJZJkrjsZGirHB1OCStchCQkImcJq2trZKn8+jxdmEss2Xl5cnicEFcrBlZWWNjY3w9fcKYZMIX5FzsdRyn7hHnM1zobuxzdwFaaJFkbyDrcUYYo02ksYWaJfB2eevr68JWIVgYGAHZ52iyd8ZdaqUlJQGZJoHbKWEtNBJns50dHSyytgFYpejzuaJweIwk8sndKE1h7VGg6YRgsMCc7QBcrNRUVFUVFRVVVVSUlILfL0FdrdWVlYHeLkKe7wDdLUDdLQEdbYEdrYOf8AOgMADdbUSg8MSg8RXV1cShMQAcrIThMUGd7gOf78Nfr8Nfr4Mfb4Mfb0IebkJeroJe7sJers6OjqqqqrU1NTV1dWrq6tISEipqak7OzuAgIB+fn7C3u7w9/tJSUmBgYHq6urz8/P19fVMTEz09PSHv9+ErMLh7/d/f3+DvNyFvt7v9PfB1eCCqcDA1N8FZ5+Gvt/g6u/B3e2hv9CJiYng6vDB3e5Gm8vo6OjC3+/g7vaGv9/B3u4UXol0s9gFZZvW1taDq8JHm8zD3+8Fa6YLb6iEvd0FZ6AIaJ8LermDu9xInc2DqsHv9vqDr8gGWIcLdK8GdbRVos8IcKwLeLdEmcoXe7Nnqs81jsLR4OiAudkzeqPB1+PP5PFGhqpkmLUmbJQvkstTU1MPgMEQgcJZWVlaWlpfX19bW1tcXFxNTU1eXl5PT09QUFBYWFhdXV1OTk7///////+KC4QFAAABAHRSTlP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AU/cHJQAADAJJREFUeNrsVwtUVGUeH4HBwQfiQIOMioiJXsRXgo8ZBHJVfGRa+TiGZraWmmX57LW7Ijiyj9pddtfaQhweg8EgLyUDNJ/5JkvNnlq229Y+cqd13UCMH/2/7z7m3gGMs3U8Z+b4O8f7/Z+//72/7+PeUdfSUrGs31VfwJ+8AE8/5Wxp0bUkrrnqG/iDV+DpqBZdxaBGH8HvvQNPO3XLfEXyxt95CZ7SDfrWV/AzL8G/dd/e0vxmw4c0/4+3QPeNz+CW5jcfX3sLdP/zGdzS/ObjBW+B7r8+g+e9BW1qboiNjY0J+PFVmWcwzFOcAIOhIz0mg6mD7C+2h69D7th5R0iraFD3nTt33iM60+5xQ1XzwridMqZpmo/j+Iv/N3RXPBE/qwIcibPjr/xAGGINGr8CsxV7AkZ2hOItvNXBYS+1g6B3+OO8E/S8OjpNjKK6O/OOww111TtKdLWGkzRvb9xLq4+vfumGaKW5qQwILTQaI2mO4YdqHotYtWsbjERla4GYH1fzP7eDo7jt9um334ajmuhq4Itdu7rNJzXJ+7xWwheAtrd2l4g5mu438EZ7426Y49Bd1yI+EeUBegaLsbzn9R8I0lzjDwICJHM2yjM6QiHohQ4Oe7ltjMOhJcuXL18yH+PU4dXdLi9n4UNYT55uuYRdOKSuOopdUuKihpR0fbk93CjHoWulUnm83lpqsQh6va1fR7U19dRsT8+eAW1r7ohAX8kswKxmqdjUNmO8h+YB2iHxcoWMV9rGGCxKO3vxbNoujFGHLy5fnqbTrSCRj5J39n4Rj8zHV+qqo1ilE/GZhvR1vP7KK9NWh6hCq2WP55SgpkaEp+YVMJo3cMtmYUYBdnBvBwqk6+xEoPB6IQrjC+k1xLKF7ANQUcjrgHjuFsRzR4TCvsGIMklAOvHZJNwEli9Luq4hv963jIcZZSFE4iQemhAvVQbwxlnqW8+U0B3VklWN7pmZTvzrPbLfew7OTBUuTv2MLe8NxGOq6HocGqGuKsHrmW2BdO1ezb8Goh+0HrInP3RmZkg1N5yeFLpsDXYA2Rmyk56enU2aS4kCfk0sYDSF2YUYyUXYkU1vo4ouYV0qMIHVkVKoiAylLzA5BWUoKyC4+a8AJm70RYSQnW2qQNmysD7AbA35LKBLWFgvupdsGlTI6mcDfcKWlSExnldWVOBIZASJrrp35Zmq8QFfQ5j4QcDj3HscCGotXohz/jOKkzUNGH22Y5o7gaW1dLcfiCyoHrhqCjCOWqpRXULIzPwA1feuWnWvE+NvqDlJYdEEPDVHVd9KfWk8SYEjB836jd9kxyG0lF7/peW4k2t+5CB58dzTG2FknwY3nSUUcdxIRF4Tu85i+QBUqMnZ3wALb4xUNKeQgQ0J5TtLlZ0GkWvgfTKyJFw6jfXcWI/Tl7IeAPpzrz/wQJYW586VoHbIVHdgPWpHaCpK+EktuSPIsxPO+5b4+y/5AtXMjUI3f8JoOLOy/E/jNHOysuaMZqv/ENpsTbPOpkEhIl2aQAFe5eurKODXIw1MjVIq7GNmVhP9/kjXC6WCPgZxVAFY9Hprqn4yCm02a1/0tRLcdC4Dqth6J71wbLYkROjNQqmVqpNU5K8CxFiaSl8UdkdEZJuAyfSVEcxsO1hlqF5vtpr15dLdcSjPNFN8yCAnZmYxzXvwaI/WmpOcUV9dGK74IXTM+3tovrSkhI50VJCn5j/1909L878MhGRldcch/xErzt/vvxbds9I+xsdpBNpl/xFTz5+feqHWY3ArzTvZbqh5pL403ZbuokKjuZI0TE9CaGo6pdIDeAXAwjZ6cRcqgqnRACavjf44BHbNE1iwiVcr5P2AwQEbidyqUPRCDKNNTy0XdyfS2kRuZaRa81wZ59diHC3jsPZ8bi5pLoVJ81wtpk8PriU5FZ9OfZq24hl+Up+rQQnPiyCLND/fIze3x4hDbNR4zJjK8v0/xDmWOyc2D++f+8C5c2OW1ngM1m3UIA+9tAHSnK+kOb92csmFYbKhgFUAYkEY8ngyT0u3sXIyBtNShpgMRq4gT0V+jd7n6DXY2G+jQgHcKaYixcp8ka2TdHcc22QMD0YULSUIHL5t29uAFAbe3qYFyTniQayX3bfZMddWpNFhTrvgHwiM4gwcZJGu4qhaZpS4n+OcO0eWU4pqB3tobgIevaHmBcrm5MlGWR5HmDGJi6POt9bcZULVo8SDBk5eIPeaVOQZekMov1WjSnOTTVI5T1VZoNZ8q4JhNXh46xzsG0Z2V0CKAl1zt2rQv/+TaYFwyu4JOubagq3DxboLwJu0jhZBVmd0FguWMuMETnTmWPXhQ6rceODer6bPTPsHb3ZDl64FsFLj5+M1vr6GfOXKQFLIRuh2Cam8X51XqtywltOEwZhcysmL5F6HmtxKgYAY+lmyRqYox0Ex1QtGVaV8dxw5Cp6cgd45nfFhNNmXSC4efBO4lNMa0wHJ+hQY0FYFIVok8RNBFukqZqKwICfnBGZIKb8V7twoYCGP1Up3IMND8+ZZKLsqO1f7sac6eGPN6S/jW4cIS0c0r5yFkelVMGSQHYYIqdXRrCZPt5jZPkSwbpEiEnHiLdGB/37Ncy7DOeoYZjIzuRZjeewUapPbkPNz1EjWMRyY2LbkbL/+Sku4CLJ2YzdPzAGezcm5D/tWSAh356jJb92T4cm0JR6auzTIcNGbtFG0D1YVu1xdMJjZjYORT0sxvzIUoUg0hAiMlGJr6B+9z1V5o9itAf3QMaL8bmbSr3WjGGzspyJfQ3NdDQ59KMtyonT6udMo0kY4VJX5KHYTb3bjibswBmtXcHshDvM1CgvZMvbw4YfZemoOj9LWHBB7xtIxT5YJDh8ez5YEqSgKd4VvVoN05Wtv7Fu8ecszwCkxPooaFqA3txPoZcbWh48hQdPsobnLaqBfyXEHi4uL6L8kxezxUFRcHFeF9jRvoIM+kgrXGMuKWmkeANq3xpXaCRGoQpyF71cRsdNOEX+xipyMg42ufkUovyoTmUPRi5io3tTQAc2Tg+lrECgq+Mg+9J6zeU5v1DwiqiUqsB9jTiUk7Hai5rIi/jqFANgvFrOiU8eAIZ94aO4c/2nC2MPsq7t584oZwG7ayYTxTuJ+FnQdNXZz+D5EjU34tDfwPZpfswdESB/bcuMVUiiO20dWtqe5S28qlxp+0kpzh9itmdAcQ5FHpWFG+Xs/SEU+SCIsNzhkolJB/KrS/4xc7Wm+RYWhNdg3UTTfHVLDO2uGvMvc94G/sPUxafC+IcO2SPEByUo/ac6WBVJRTeDQLRq8LyeCJ5GXnFInP8ffaOABbm2JlgYPvE2cqECX4YFSu91kjIyMLDLZ7ZUZGRa7YULkZHpSYxIl5/Erg8lokiyLXTB0yc/vstIlkGc0qvPNdsPk/D59tRNsRqPRKpqC3RXTJz8/1iBUqsgrBUNsp/w+MYL+mjLIbKchnYwuu0V9G0nGeW5e9WMtDqwLPCOan0w6uWjK/imLTvp9wtyH6uq68l0ZsPDAnj0Hgk/6iUovqAse5u6vq7udLfVDWNHahSdTwrWaP1Q3OrBb7Z4ZA1KimftEyoBFDx7ePzD4JLnhKcEP7p/y8ZYtkwbM2LNn4N9TgsWJ7WueUam3i9guNJFr5bZesJtZjl9FtQS5wbJdamARu12TF7u1AwSKNKhsjgYVeYNEuL3UTdQk3VVphvo2zOxYyNikhl/KBdkM90th8AvnXn1KSjRbh6WIuCCGWXyuuz0lZShb9kpFfmc2aVEvJxZr/ZRwhVoZvG6SOFGBbkNrWASz2Wy1SJ4j1Zzq2NAsOMgWr2KNRalvctxtNt8tNDNbELR51i1o6ZsFQVA5qTTL0aQhb3JYzdTWpBnEhogz3JUOKcChea4z9W6ZkvdOHDpxb7LoRNfXi9rO3Tts6NBhi6Xwpr31i9WaSl44K1J63Yiujz5DmXXKNs2lGUPXSWyLaV49C66jWPimxfVzv1dzL8VvvAW6Jp/Br70FPqT5b70Fums+g196C3xI8195C3Tzmn0FP/cSdNWF3dL8JuNLXZXPHPRfeAe6fqRr6RXf4BvwEsn/2aJraakK8w3V/+gF6PrlRy0t3wkwACodWEdnsCi2AAAAAElFTkSuQmCC
\ No newline at end of file
diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua
index 66d2672422..25b1e53923 100644
--- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua
+++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/controller/openclash.lua
@@ -32,7 +32,7 @@ function index()
entry({"admin", "services", "openclash", "groups-config"},cbi("openclash/groups-config"), nil).leaf = true
entry({"admin", "services", "openclash", "proxy-provider-config"},cbi("openclash/proxy-provider-config"), nil).leaf = true
entry({"admin", "services", "openclash", "config"},form("openclash/config"),_("Config Manage"), 70).leaf = true
- entry({"admin", "services", "openclash", "log"},form("openclash/log"),_("Logs"), 80).leaf = true
+ entry({"admin", "services", "openclash", "log"},form("openclash/log"),_("Server Logs"), 80).leaf = true
end
local fs = require "luci.openclash"
@@ -81,6 +81,13 @@ local function daip()
return daip
end
+local function uh_port()
+ local uh_port = luci.sys.exec("uci get uhttpd.main.listen_http |awk -F ':' '{print $NF}'")
+ if uh_port ~= "80" then
+ return ":" .. uh_port
+ end
+end
+
local function dase()
return luci.sys.exec("uci get openclash.config.dashboard_password 2>/dev/null")
end
@@ -99,7 +106,7 @@ local function startlog()
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")
+ local coremodel = luci.sys.exec("cat /usr/lib/os-release 2>/dev/null |grep OPENWRT_ARCH 2>/dev/null |awk -F '\"' '{print $2}' 2>/dev/null")
local coremodel2 = luci.sys.exec("opkg status libc 2>/dev/null |grep 'Architecture' |awk -F ': ' '{print $2}' 2>/dev/null")
if not coremodel or coremodel == "" then
return coremodel2 .. "," .. coremodel2
@@ -212,6 +219,7 @@ function action_status()
watchdog = is_watchdog(),
daip = daip(),
dase = dase(),
+ uh_port = uh_port(),
web = is_web(),
cn_port = cn_port(),
mode = mode();
diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua
index d284353d58..bbcaea1d0a 100644
--- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua
+++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/log.lua
@@ -2,11 +2,8 @@
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"))
+m = Map("openclash", translate("Server Logs"))
s = m:section(TypedSection, "openclash")
m.pageaction = false
s.anonymous = true
diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua
index 2f7f7c4e0a..91da6acfdf 100644
--- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua
+++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/model/cbi/openclash/settings.lua
@@ -34,6 +34,7 @@ s:tab("dashboard", translate("Dashboard Settings"))
s:tab("rules_update", translate("Rules Update"))
s:tab("geo_update", translate("GEOIP Update"))
s:tab("version_update", translate("Version Update"))
+s:tab("debug", translate("Debug Logs"))
---- Operation Mode
o = s:taboption("op_mode", ListValue, "operation_mode", font_red..bold_on..translate("Select Operation Mode")..bold_off..font_off)
@@ -62,7 +63,7 @@ o:depends("en_mode", "redir-host")
o:depends("en_mode", "fake-ip")
o:value("0", translate("Disable"))
o:value("1", translate("Enable"))
-o.default = "0"
+o.default = "1"
o = s:taboption("op_mode", ListValue, "proxy_mode", font_red..bold_on..translate("Proxy Mode")..bold_off..font_off)
o.description = translate("Select Proxy Mode")
@@ -450,6 +451,24 @@ o.description = translate("Set Dashboard Secret")
core_update = s:taboption("version_update", DummyValue, "", nil)
core_update.template = "openclash/update"
+---- debug
+debug_log = s:taboption("debug", Value, "debug_log")
+debug_log.template = "cbi/tvalue"
+debug_log.readonly=true
+debug_log.rows = 30
+debug_log.wrap = "off"
+function debug_log.cfgvalue(self, section)
+ return NXFS.readfile("/tmp/openclash_debug.log") or ""
+end
+
+o = s:taboption("debug", Button, translate("Generate Logs"))
+o.title = translate("Generate Logs")
+o.inputtitle = translate("Click to Generate")
+o.inputstyle = "reload"
+o.write = function()
+ SYS.call("/usr/share/openclash/openclash_debug.sh")
+end
+
-- [[ Edit Server ]] --
s = m:section(TypedSection, "dns_servers", translate("Add Custom DNS Servers")..translate("(Take Effect After Choose Above)"))
s.anonymous = true
diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm
index 9bd57d677c..637a869b10 100644
--- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm
+++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/status.htm
@@ -44,41 +44,7 @@
var dase = document.getElementById('_dase');
var dapo = document.getElementById('_dapo');
var clashversion = document.getElementById('_clashversion');
- XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
- if ( x && x.status == 200 ) {
- clash.innerHTML = status.clash ? '<%:RUNNING%>' : '<%:NOT RUNNING%>';
- if ( status.mode == "fake-ip\n" )
- {
- mode.innerHTML = status.clash ? "<%: Fake-IP(增强)模式 %>" : '<%:NOT RUNNING%>';
- }
- else if ( status.mode == "redir-host\n" )
- {
- mode.innerHTML = status.clash ? "<%: Redir-Host(兼容)模式 %>" : '<%:NOT RUNNING%>';
- }
- else if ( status.mode == "redir-host-tun\n" )
- {
- mode.innerHTML = status.clash ? "<%: Redir-Host(TUN)模式 %>" : '<%:NOT RUNNING%>';
- }
- else if ( status.mode == "fake-ip-tun\n" )
- {
- mode.innerHTML = status.clash ? "<%: Fake-IP(TUN)模式 %>" : '<%:NOT RUNNING%>';
- }
- else if ( status.mode == "redir-host-vpn\n" )
- {
- mode.innerHTML = status.clash ? "<%: Redir-Host(游戏)模式 %>" : '<%:NOT RUNNING%>';
- }
- else if ( status.mode == "fake-ip-vpn\n" )
- {
- mode.innerHTML = status.clash ? "<%: Fake-IP(游戏)模式 %>" : '<%:NOT RUNNING%>';
- }
- watchdog.innerHTML = status.watchdog ? '<%:RUNNING%> ' : '<%:NOT RUNNING%>';
- daip.innerHTML = status.daip ? ""+status.daip+"" : ""+"<%:Not Set%>"+"";
- dase.innerHTML = status.dase ? ""+status.dase+"" : ""+"<%:Not Set%>"+"";
- dapo.innerHTML = status.cn_port ? ""+status.cn_port+"" : ""+"<%:Not Set%>"+"";
- web.innerHTML = status.web ? '' : '<%:NOT RUNNING%>';
- webo.innerHTML = status.web ? '' : '<%:NOT RUNNING%>';
- }
- });
+
XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', null, function(x, status) {
if ( x && x.status == 200 ) {
clash.innerHTML = status.clash ? '<%:RUNNING%>' : '<%:NOT RUNNING%>';
@@ -115,13 +81,21 @@
}
});
+ function winOpen(url)
+ {
+ var winOpen = window.open(url);
+ if(winOpen == null || typeof(winOpen) == 'undefined'){
+ window.location.href=url;
+ }
+ }
+
function ycad_dashboard(btn)
{
XHR.get('<%=luci.dispatcher.build_url("admin", "services", "openclash", "status")%>', status.cn_port, function(x, status) {
btn.disabled = true;
btn.value = '<%:打开控制面板%>';
- url1='<%="http://'+window.location.hostname+'/luci-static/openclash?hostname='+ status.daip + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
- window.open(url1);
+ url1='<%="http://'+window.location.hostname+status.uh_port+'/luci-static/openclash?hostname='+ status.daip + '&port=' + status.cn_port + '&secret=' + status.dase +'"%>';
+ winOpen(url1);
return false;
});
}
@@ -131,7 +105,7 @@
btn.disabled = true;
btn.value = '<%:打开控制面板%>';
url2='http://'+window.location.hostname+':'+status.cn_port+'/ui';
- window.open(url2);
+ winOpen(url2);
return false;
});
}
@@ -139,25 +113,25 @@
function homepage()
{
url3='https://github.com/vernesong/OpenClash';
- window.open(url3);
+ winOpen(url3);
}
function wikipage()
{
url5='https://github.com/vernesong/OpenClash/wiki';
- window.open(url5);
+ winOpen(url5);
}
function telegrampage()
{
url6='https://t.me/joinchat/D4mVX0n-n5mOK6YO_W3_Og';
- window.open(url6);
+ winOpen(url6);
}
function sponsorpage()
{
url7='https://ko-fi.com/vernesong';
- window.open(url7);
+ winOpen(url7);
}
@@ -197,7 +171,7 @@
function go_update()
{
url4='https://github.com/vernesong/OpenClash/releases';
- window.open(url4);
+ winOpen(url4);
}
var startlog = document.getElementById('_clashstart');
diff --git a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm
index 4ffb03f6bd..5a7420b0ca 100644
--- a/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm
+++ b/package/ctcgfw/luci-app-openclash/files/usr/lib/lua/luci/view/openclash/update.htm
@@ -7,7 +7,7 @@
|
内核路径:/etc/openclash/core/clash
@@ -43,7 +43,7 @@
|