mirror of
				https://github.com/kenzok8/openwrt-packages.git
				synced 2025-10-30 07:50:37 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			305 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh 
 | |
| 
 | |
| CORETYPE=$(uci get clash.config.core 2>/dev/null)
 | |
| CONFIG_YAML_PATH=$(uci get clash.config.use_config 2>/dev/null)
 | |
| CONFIG_YAML="/etc/clash/config.yaml"
 | |
| url=$(uci get clash.config.clash_url)
 | |
| MODELTYPE=$(uci get clash.config.download_core)
 | |
| 
 | |
| if [ "$CORETYPE" -eq "1" ];then
 | |
| 	CORE_PATH="/etc/clash/clash"
 | |
| elif [ "$CORETYPE" -eq "3" ];then
 | |
| 	CORE_PATH="/etc/clash/clashtun/clash"
 | |
| elif [ "$CORETYPE" -eq "4" ];then
 | |
| 	CORE_PATH="/etc/clash/dtun/clash"
 | |
| fi
 | |
| 
 | |
| dcore(){
 | |
| 	echo '' >/tmp/clash_update.txt 2>/dev/null
 | |
| 
 | |
| 	if [ -f /usr/share/clash/core_down_complete ];then 
 | |
| 		rm -rf /usr/share/clash/core_down_complete 2>/dev/null
 | |
| 	fi
 | |
| 
 | |
| 	if [ "$CORETYPE" -eq "4" ];then
 | |
| 		if [ -f /usr/share/clash/download_dtun_version ];then 
 | |
| 			rm -rf /usr/share/clash/download_dtun_version
 | |
| 		fi
 | |
| 
 | |
| 		new_clashdtun_core_version=`wget -qO- "https://hub.fastgit.org/Dreamacro/clash/releases/tag/premium"| grep "/download/premium/"| head -n 1| awk -F " " '{print $2}'| awk -F "-" '{print $4}'| sed "s/.gz\"//g"`
 | |
| 
 | |
| 		if [ ${new_clashdtun_core_version} ]; then
 | |
| 			echo ${new_clashdtun_core_version} > /usr/share/clash/download_dtun_version 2>&1 & >/dev/null
 | |
| 		elif [ ${new_clashdtun_core_version} =="" ]; then
 | |
| 			echo 0 > /usr/share/clash/download_dtun_version 2>&1 & >/dev/null
 | |
| 		fi
 | |
| 
 | |
| 		sleep 5
 | |
| 
 | |
| 		if [ -f /usr/share/clash/download_dtun_version ];then
 | |
| 			CLASHDTUNC=$(sed -n 1p /usr/share/clash/download_dtun_version 2>/dev/null) 
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	if [ "$CORETYPE" -eq "3" ];then
 | |
| 		if [ -f /usr/share/clash/download_tun_version ];then 
 | |
| 			rm -rf /usr/share/clash/download_tun_version
 | |
| 		fi
 | |
| 	
 | |
| 		new_clashtun_core_version=`wget -qO- "https://hub.fastgit.org/comzyh/clash/tags"| grep "/comzyh/clash/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//g'`
 | |
| 
 | |
| 		if [ ${new_clashtun_core_version} ]; then
 | |
| 			echo ${new_clashtun_core_version} > /usr/share/clash/download_tun_version 2>&1 & >/dev/null
 | |
| 		elif [ ${new_clashtun_core_version} =="" ]; then
 | |
| 			echo 0 > /usr/share/clash/download_tun_version 2>&1 & >/dev/null
 | |
| 		fi
 | |
| 
 | |
| 		sleep 5
 | |
| 
 | |
| 		if [ -f /usr/share/clash/download_tun_version ];then
 | |
| 			CLASHTUN=$(sed -n 1p /usr/share/clash/download_tun_version 2>/dev/null) 
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	if [ "$CORETYPE" -eq "1" ];then
 | |
| 		if [ -f /usr/share/clash/download_core_version ];then
 | |
| 			rm -rf /usr/share/clash/download_core_version
 | |
| 		fi
 | |
| 
 | |
| 		new_clashr_core_version=`wget -qO- "https://hub.fastgit.org/Dreamacro/clash/tags"| grep "/Dreamacro/clash/releases/"| head -n 1| awk -F "/tag/" '{print $2}'| sed 's/\">//g'`
 | |
| 
 | |
| 		if [ ${new_clashr_core_version} ]; then
 | |
| 			echo ${new_clashr_core_version} > /usr/share/clash/download_core_version 2>&1 & >/dev/null
 | |
| 		elif [ ${new_clashr_core_version} =="" ]; then
 | |
| 			echo 0 > /usr/share/clash/download_core_version 2>&1 & >/dev/null
 | |
| 		fi
 | |
| 
 | |
| 		sleep 5
 | |
| 
 | |
| 		if [ -f /usr/share/clash/download_core_version ];then
 | |
| 			CLASHVER=$(sed -n 1p /usr/share/clash/download_core_version 2>/dev/null) 
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	if [ -f /tmp/clash.gz ];then
 | |
| 		rm -rf /tmp/clash.gz >/dev/null 2>&1
 | |
| 	fi
 | |
| 
 | |
| 	if [ "$CORETYPE" -eq "1" ];then
 | |
| 		wget --no-check-certificate  https://hub.fastgit.org/Dreamacro/clash/releases/download/"$CLASHVER"/clash-"$MODELTYPE"-"$CLASHVER".gz -O 2>&1 >1 /tmp/clash.gz
 | |
| 	elif [ "$CORETYPE" -eq "3" ];then 
 | |
| 		wget --no-check-certificate  https://hub.fastgit.org/comzyh/clash/releases/download/"$CLASHTUN"/clash-"$MODELTYPE"-"$CLASHTUN".gz -O 2>&1 >1 /tmp/clash.gz
 | |
| 	elif [ "$CORETYPE" -eq "4" ];then 
 | |
| 		wget --no-check-certificate  https://hub.fastgit.org/Dreamacro/clash/releases/download/premium/clash-"$MODELTYPE"-"$CLASHDTUNC".gz -O 2>&1 >1 /tmp/clash.gz
 | |
| 	fi
 | |
| 
 | |
| 	if [ "$?" -eq "0" ] && [ "$(ls -l /tmp/clash.gz |awk '{print int($5)}')" -ne "0" ]; then
 | |
| 	    gunzip /tmp/clash.gz >/dev/null 2>&1\
 | |
| 		&& rm -rf /tmp/clash.gz >/dev/null 2>&1\
 | |
| 		&& chmod 755 /tmp/clash\
 | |
| 		&& chown root:root /tmp/clash 
 | |
| 		  
 | |
| 		if [ "$CORETYPE" -eq "1" ];then
 | |
| 			rm -rf /etc/clash/clash >/dev/null 2>&1
 | |
| 			mv /tmp/clash /etc/clash/clash >/dev/null 2>&1
 | |
| 			rm -rf /usr/share/clash/core_version >/dev/null 2>&1
 | |
| 			mv /usr/share/clash/download_core_version /usr/share/clash/core_version >/dev/null 2>&1
 | |
| 		elif [ "$CORETYPE" -eq "3" ];then
 | |
| 			rm -rf /etc/clash/clashtun/clash >/dev/null 2>&1
 | |
| 			mv /tmp/clash /etc/clash/clashtun/clash >/dev/null 2>&1
 | |
| 			rm -rf /usr/share/clash/tun_version >/dev/null 2>&1
 | |
| 			mv /usr/share/clash/download_tun_version /usr/share/clash/tun_version >/dev/null 2>&1
 | |
| 			tun=$(sed -n 1p /usr/share/clash/tun_version 2>/dev/null)
 | |
| 			sed -i "s/${tun}/v${tun}/g" /usr/share/clash/tun_version 2>&1
 | |
| 		elif [ "$CORETYPE" -eq "4" ];then
 | |
| 			rm -rf /etc/clash/dtun/clash >/dev/null 2>&1
 | |
| 			mv /tmp/clash /etc/clash/dtun/clash >/dev/null 2>&1
 | |
| 			rm -rf /usr/share/clash/dtun_version >/dev/null 2>&1
 | |
| 			mv /usr/share/clash/download_dtun_version /usr/share/clash/dtun_version >/dev/null 2>&1
 | |
| 			dtun=$(sed -n 1p /usr/share/clash/dtun_version 2>/dev/null)
 | |
| 			sed -i "s/${dtun}/v${dtun}/g" /usr/share/clash/dtun_version 2>&1leep 2
 | |
| 		fi
 | |
| 		touch /usr/share/clash/core_down_complete >/dev/null 2>&1
 | |
| 		sleep 2
 | |
| 		rm -rf /var/run/core_update >/dev/null 2>&1
 | |
| 		echo "" > /tmp/clash_update.txt >/dev/null 2>&1
 | |
| 	fi	
 | |
| }
 | |
| 
 | |
| revert_dns() {
 | |
| 	dns_port=$(grep "^ \{0,\}listen:" $CONFIG_YAML |awk -F ':' '{print $3}' 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].noresolv=0
 | |
| 	uci delete dhcp.@dnsmasq[0].cachesize
 | |
| 	rm -rf $CUSLIST $CUSLITT  $CUSLISTV $CUSLITTV 2>/dev/null
 | |
| 	uci commit dhcp
 | |
| 	/etc/init.d/dnsmasq restart >/dev/null 2>&1	 
 | |
| }
 | |
| 
 | |
| remove_mark(){
 | |
| 	rm -rf /var/etc/clash.include 2>/dev/null
 | |
| 
 | |
| 	core=$(uci get clash.config.core 2>/dev/null)
 | |
| 	ipv6=$(uci get clash.config.enable_ipv6 2>/dev/null)
 | |
| 	dns_port=$(grep "^ \{0,\}listen:" $CONFIG_YAML |awk -F ':' '{print $3}' 2>/dev/null)
 | |
| 	PROXY_FWMARK="0x162" 2>/dev/null
 | |
| 	PROXY_ROUTE_TABLE="0x162" 2>/dev/null
 | |
| 
 | |
|    	ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
 | |
|    	ip route del local 0.0.0.0/0  dev lo table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
 | |
| 
 | |
| 	TUN_DEVICE=$(egrep '^ {0,}device-url:' /etc/clash/config.yaml |grep device-url: |awk -F '//' '{print $2}')
 | |
| 	if [ -z $TUN_DEVICE ];then
 | |
| 		TUN_DEVICE_NAME="clash0"
 | |
| 	else
 | |
| 	TUN_DEVICE_NAME=$TUN_DEVICE
 | |
| 	fi
 | |
| 	if [ "${core}" -eq 3 ];then
 | |
| 		ip link set dev $TUN_DEVICE_NAME down 2>/dev/null
 | |
| 		ip tuntap del $TUN_DEVICE_NAME mode tun 2>/dev/null
 | |
| 		ip route del default dev $TUN_DEVICE_NAME table "$PROXY_ROUTE_TABLE" 2>/dev/null
 | |
| 	fi
 | |
| 	ip route del default dev utun table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
 | |
| 	ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" >/dev/null 2>&1
 | |
| 
 | |
| 	mangle=$(iptables -nvL OUTPUT -t mangle | sed 1,2d | sed -n '/clash/=' | sort -r)
 | |
| 	for mangles in $mangle; do
 | |
| 		iptables -t mangle -D OUTPUT $mangles 2>/dev/null
 | |
| 	done
 | |
| 	
 | |
| 	pre=$(iptables -nvL PREROUTING -t mangle | sed 1,2d | sed -n '/! match-set localnetwork dst MARK set 0x162/=' | sort -r)
 | |
| 	for prer in $pre; do
 | |
| 		iptables -t mangle -D PREROUTING $prer 2>/dev/null
 | |
| 	done
 | |
| 
 | |
| 	pre1=$(iptables -nvL PREROUTING -t mangle | sed 1,2d | sed -n '/! match-set china dst MARK set 0x162/=' | sort -r)
 | |
| 	for prer in $pre1; do
 | |
| 		iptables -t mangle -D PREROUTING $prer 2>/dev/null
 | |
| 	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
 | |
| 
 | |
| 	iptables -t nat -D PREROUTING -p tcp --dport 53 -j ACCEPT >/dev/null 2>&1
 | |
| 	iptables -t nat -D PREROUTING -p udp --dport 53 -j DNAT --to "127.0.0.1:$dns_port"
 | |
| 
 | |
| 	if [ "${ipv6}" == "true" ]; then
 | |
| 		ip6tables -t mangle -D PREROUTING -j MARK --set-mark "$PROXY_FWMARK" 2>/dev/null
 | |
| 	fi
 | |
| 
 | |
| 	iptables -t mangle -F clash 2>/dev/null
 | |
| 	iptables -t mangle -X clash 2>/dev/null
 | |
|     iptables -t nat -F clash_output >/dev/null 2>&1
 | |
|     iptables -t nat -X clash_output >/dev/null 2>&1
 | |
| 
 | |
| 	ipset -! flush proxy_lan >/dev/null 2>&1
 | |
| 	ipset -! flush reject_lan >/dev/null 2>&1
 | |
| 	ipset destroy reject_lan >/dev/null 2>&1
 | |
| 	ipset destroy proxy_lan >/dev/null 2>&1
 | |
| 	ipset -! flush china >/dev/null 2>&1
 | |
| 	ipset destroy china >/dev/null 2>&1
 | |
| 		
 | |
| 	proxy_lan=$(iptables -nvL PREROUTING -t mangle | sed 1,2d | sed -n '/! match-set proxy_lan src/=' | sort -r)
 | |
| 	for natx in $proxy_lan; do
 | |
| 		iptables -t mangle -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	reject_lan=$(iptables -nvL PREROUTING -t mangle | sed 1,2d | sed -n '/match-set reject_lan src/=' | sort -r)
 | |
| 	for natx in $reject_lan; do
 | |
| 		iptables -t mangle -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done		
 | |
| 
 | |
| 	proxy_lann=$(iptables -nvL clash -t nat | sed 1,2d | sed -n '/! match-set proxy_lan src/=' | sort -r)
 | |
| 	for natx in $proxy_lann; do
 | |
| 		iptables -t nat -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	reject_lann=$(iptables -nvL clash -t nat | sed 1,2d | sed -n '/match-set reject_lan src/=' | sort -r)
 | |
| 	for natx in $reject_lann; do
 | |
| 		iptables -t nat -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	proxy_lannn=$(iptables -nvL clash -t nat | sed 1,2d | sed -n '/! match-set proxy_lan src/=' | sort -r)
 | |
| 	for natx in $proxy_lannn; do
 | |
| 		iptables -t mangle -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	reject_lannn=$(iptables -nvL clash -t nat | sed 1,2d | sed -n '/match-set reject_lan src/=' | sort -r)
 | |
| 	for natx in $reject_lannn; do
 | |
| 		iptables -t mangle -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
|     iptables -t nat -D OUTPUT -p tcp -j clash_output >/dev/null 2>&1
 | |
| 	china_lan2=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/match-set china/=' | sort -r)
 | |
| 	for natx in $china_lan2; do
 | |
| 		iptables -t mangle -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	china_lan3$(iptables -nvL PREROUTING -t mangle | sed 1,2d | sed -n '/match-set china/=' | sort -r)
 | |
| 	for natx in $china_lan3; do
 | |
| 		iptables -t mangle -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	ipset destroy localnetwork 2>/dev/null
 | |
| 
 | |
| 	nat_indexs=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/clash/=' | sort -r)
 | |
| 	for nat_index in $nat_indexs; do
 | |
| 		iptables -t nat -D PREROUTING $nat_index >/dev/null 2>&1
 | |
| 		iptables -t nat -F clash >/dev/null 2>&1
 | |
| 		iptables -t nat -X clash >/dev/null 2>&1
 | |
| 		iptables -t mangle -F clash >/dev/null 2>&1
 | |
| 		iptables -t mangle -D PREROUTING -p udp -j clash >/dev/null 2>&1 
 | |
| 		iptables -t mangle -X clash >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	nat=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/tcp dpt:53/=' | sort -r)
 | |
| 	for natx in $nat; do
 | |
| 		iptables -t nat -D PREROUTING $natx >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	ip6tables -t mangle -F clash >/dev/null 2>&1
 | |
| 	ip6tables -t mangle -D PREROUTING -p udp -j clash >/dev/null 2>&1
 | |
| 	ip6tables -t mangle -X clash >/dev/null 2>&1
 | |
| 
 | |
| 	out_linese=$(iptables -nvL OUTPUT -t mangle |sed 1,2d |sed -n '/198.18.0.1\/16/=' 2>/dev/null |sort -rn)
 | |
| 	for out_linee in $out_linese; do
 | |
| 		iptables -t mangle -D OUTPUT "$out_linee" >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	out_linesee=$(iptables -nvL OUTPUT -t mangle |sed 1,2d |sed -n '/198.18.0.0\/16/=' 2>/dev/null |sort -rn)
 | |
| 	for out_linees in $out_linesee; do
 | |
| 		iptables -t mangle -D OUTPUT "$out_linees" >/dev/null 2>&1
 | |
| 	done		
 | |
| 
 | |
| 	nat_indexs=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/clash/=' | sort -r)
 | |
| 	for nat_index in $nat_indexs; do
 | |
| 		iptables -t nat -D PREROUTING $nat_index >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	fake=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/198.18.0.0\/16/=' |sort -r)
 | |
| 	for fake in $fake; do
 | |
| 		iptables -t nat -D OUTPUT $fake >/dev/null 2>&1
 | |
| 	done
 | |
| 
 | |
| 	fake2=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/198.18.0.1\/16/=' |sort -r)
 | |
| 	for fake2 in $fake2; do
 | |
| 		iptables -t nat -D OUTPUT $fake2 >/dev/null 2>&1
 | |
| 	done	
 | |
| 
 | |
| 	iptables -t nat -I PREROUTING -p tcp --dport 53 -j ACCEPT
 | |
| 
 | |
| 	revert_dns >/dev/null 2>&1
 | |
| }
 | |
| 
 | |
| if [ ! $(pidof clash) ]; then
 | |
| 	remove_mark
 | |
| 	sleep 5
 | |
| 	wget --no-check-certificate --user-agent="Clash/OpenWRT" ${url} -O 2>&1 >1 ${CONFIG_YAML_PATH}
 | |
| 	if [ ! -f ${CORE_PATH} ];then
 | |
| 		dcore
 | |
| 	fi
 | |
| 	/etc/init.d/clash restart 2>/dev/null
 | |
| fi
 | 
![github-actions[bot]](/assets/img/avatar_default.png)