diff --git a/clashoo/Makefile b/clashoo/Makefile index 0a8a8d21d..a3aa00df6 100644 --- a/clashoo/Makefile +++ b/clashoo/Makefile @@ -5,13 +5,13 @@ PKG_SHORT_SHA:=94b13ae PKG_COMMIT_DATE:=2026.10.13 PKG_VERSION:=$(PKG_COMMIT_DATE)~$(PKG_SHORT_SHA) -PKG_RELEASE:=14 +PKG_RELEASE:=15 PKG_SOURCE:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA).tar.gz PKG_SOURCE_SUBDIR:=$(PKG_NAME)-alpha-$(PKG_SHORT_SHA) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-alpha-$(PKG_SHORT_SHA) PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-clashoo/releases/download/mihomo-src -PKG_SOURCE_VERSION:=4cc682daee8110a41887b5fb2d5a4b9fb5f6a696 +PKG_SOURCE_VERSION:=65acfca73432da9ed3a588d3a8f482654504497f PKG_HASH:=skip PKG_BUILD_VERSION:=alpha-$(PKG_SHORT_SHA) diff --git a/clashoo/files/usr/share/clashoo/nftables/geoip6_cn.nft b/clashoo/files/usr/share/clashoo/nftables/geoip6_cn.nft index 82a5a2142..69367b5b5 100644 --- a/clashoo/files/usr/share/clashoo/nftables/geoip6_cn.nft +++ b/clashoo/files/usr/share/clashoo/nftables/geoip6_cn.nft @@ -589,6 +589,7 @@ set clashoo_china6 { 2401:8680:4020::/43, 2401:8680:4040::/42, 2401:8680:4080::/41, + 2401:8680:4100::/48, 2401:8680:4103::/48, 2401:8680:4104::/46, 2401:8680:4108::/45, @@ -775,6 +776,7 @@ set clashoo_china6 { 2401:f860:8a::/47, 2401:f860:8c::/46, 2401:f860:91::/48, + 2401:f860:93::/48, 2401:f860:95::/48, 2401:f860:96::/48, 2401:f860:98::/45, @@ -958,6 +960,8 @@ set clashoo_china6 { 2402:7820::/32, 2402:7d00::/32, 2402:7d80::/32, + 2402:7da0::/32, + 2402:7e20::/32, 2402:8180::/32, 2402:8300::/32, 2402:8380::/32, @@ -1253,12 +1257,16 @@ set clashoo_china6 { 2403:6180::/32, 2403:6280::/32, 2403:62c0::/32, - 2403:6380::/42, + 2403:6380::/44, + 2403:6380:20::/44, + 2403:6380:33::/48, + 2403:6380:34::/46, + 2403:6380:38::/45, 2403:6380:41::/48, 2403:6380:44::/46, 2403:6380:48::/45, 2403:6380:50::/44, - 2403:6380:70::/44, + 2403:6380:60::/43, 2403:6380:80::/41, 2403:6380:100::/40, 2403:6380:200::/39, @@ -1484,6 +1492,9 @@ set clashoo_china6 { 2404:1e80::/32, 2404:1f40::/32, 2404:21c0::/32, + 2404:2280:1000::/36, + 2404:2280:2000::/35, + 2404:2280:4000::/36, 2404:30c0::/32, 2404:3140::/32, 2404:31c0::/32, @@ -1765,7 +1776,7 @@ set clashoo_china6 { 2405:84c0:800c::/46, 2405:84c0:8010::/48, 2405:84c0:8019::/48, - 2405:84c0:801c::/46, + 2405:84c0:801e::/47, 2405:84c0:8020::/47, 2405:84c0:8036::/47, 2405:84c0:8038::/46, @@ -2221,7 +2232,7 @@ set clashoo_china6 { 2406:840:9103::/48, 2406:840:9104::/46, 2406:840:9108::/45, - 2406:840:9112::/47, + 2406:840:9113::/48, 2406:840:9114::/46, 2406:840:9118::/45, 2406:840:9120::/43, @@ -2265,6 +2276,10 @@ set clashoo_china6 { 2406:840:9968::/46, 2406:840:996d::/48, 2406:840:996e::/47, + 2406:840:9970::/46, + 2406:840:9974::/47, + 2406:840:9976::/48, + 2406:840:9978::/45, 2406:840:9981::/48, 2406:840:9982::/47, 2406:840:9984::/46, @@ -2294,6 +2309,7 @@ set clashoo_china6 { 2406:840:e0cc::/47, 2406:840:e0ce::/48, 2406:840:e0d0::/44, + 2406:840:e0e4::/48, 2406:840:e0e6::/47, 2406:840:e0e9::/48, 2406:840:e0ea::/47, @@ -2384,7 +2400,7 @@ set clashoo_china6 { 2406:840:ea00::/40, 2406:840:eb06::/48, 2406:840:eb09::/48, - 2406:840:eb0a::/48, + 2406:840:eb0a::/47, 2406:840:eb0c::/47, 2406:840:eb0e::/48, 2406:840:eb10::/44, @@ -2468,6 +2484,10 @@ set clashoo_china6 { 2406:840:f600::/42, 2406:840:f640::/43, 2406:840:f670::/44, + 2406:840:f680::/47, + 2406:840:f682::/48, + 2406:840:f684::/46, + 2406:840:f688::/45, 2406:840:f690::/44, 2406:840:f6a0::/43, 2406:840:f6c0::/42, @@ -2628,6 +2648,7 @@ set clashoo_china6 { 2406:840:fee8::/46, 2406:840:feec::/48, 2406:840:feee::/47, + 2406:840:feff::/48, 2406:840:ff00::/40, 2406:880::/32, 2406:8c0::/32, @@ -2878,7 +2899,7 @@ set clashoo_china6 { 2406:e780::/32, 2406:e8c0::/32, 2406:ea40::/28, - 2406:f280::/33, + 2406:f280::/32, 2406:f300::/32, 2406:f4c0::/32, 2406:f7c0::/32, @@ -3036,26 +3057,7 @@ set clashoo_china6 { 2407:fb80::/32, 2407:fc80::/32, 2407:fd80::/32, - 2408:4000::/40, - 2408:4000:100::/47, - 2408:4000:103::/48, - 2408:4000:104::/46, - 2408:4000:108::/45, - 2408:4000:110::/44, - 2408:4000:120::/43, - 2408:4000:140::/42, - 2408:4000:180::/41, - 2408:4000:200::/39, - 2408:4000:400::/38, - 2408:4000:800::/37, - 2408:4000:1000::/36, - 2408:4000:2000::/35, - 2408:4000:4000::/34, - 2408:4000:8000::/33, - 2408:4001::/32, - 2408:4002::/31, - 2408:4004::/30, - 2408:4008::/29, + 2408:4000::/28, 2408:4010::/30, 2408:4014::/31, 2408:4016:1::/48, @@ -3121,6 +3123,41 @@ set clashoo_china6 { 240a:a000::/20, 240a:c000::/20, 240b:2000::/22, + 240b:4000::/31, + 240b:4002::/36, + 240b:4002:1000::/44, + 240b:4002:1011::/48, + 240b:4002:1012::/47, + 240b:4002:1014::/46, + 240b:4002:1018::/45, + 240b:4002:1020::/43, + 240b:4002:1040::/42, + 240b:4002:1080::/41, + 240b:4002:1100::/40, + 240b:4002:1200::/39, + 240b:4002:1400::/38, + 240b:4002:1800::/37, + 240b:4002:2000::/35, + 240b:4002:4000::/34, + 240b:4002:8000::/33, + 240b:4004::/31, + 240b:4006::/48, + 240b:4006:1000::/43, + 240b:4006:1020::/44, + 240b:4006:1100::/45, + 240b:4006:110c::/46, + 240b:4006:1110::/45, + 240b:4006:1118::/46, + 240b:4007::/32, + 240b:4009::/32, + 240b:400b::/32, + 240b:400c::/30, + 240b:4010:fffe::/47, + 240b:4011::/32, + 240b:4012::/31, + 240b:4014::/30, + 240b:4018::/30, + 240b:401f::/32, 240b:6000::/20, 240b:8000::/21, 240b:a000::/25, @@ -3240,7 +3277,7 @@ set clashoo_china6 { 2a04:3e00:400::/38, 2a04:3e00:800::/37, 2a04:3e00:1001::/48, - 2a04:3e00:1002::/48, + 2a04:3e00:1002::/47, 2a04:3e00:1004::/46, 2a04:3e00:1008::/45, 2a04:3e00:1010::/44, @@ -3264,12 +3301,10 @@ set clashoo_china6 { 2a04:f580:9010::/48, 2a04:f580:9012::/47, 2a04:f580:9020::/48, - 2a04:f580:9030::/48, 2a04:f580:9040::/48, 2a04:f580:9050::/48, 2a04:f580:9060::/48, 2a04:f580:9070::/48, - 2a04:f580:9080::/48, 2a04:f580:9210::/48, 2a04:f580:9212::/47, 2a04:f580:9220::/48, @@ -3318,9 +3353,7 @@ set clashoo_china6 { 2a0a:d681:e200::/39, 2a0a:d681:e400::/38, 2a0a:d681:e800::/37, - 2a0a:d681:f000::/37, - 2a0a:d681:f800::/38, - 2a0a:d681:fe00::/40, + 2a0a:d681:f000::/36, 2a0a:d682::/33, 2a0a:d682:8000::/34, 2a0a:d682:c000::/36, @@ -3340,6 +3373,7 @@ set clashoo_china6 { 2a0a:d685:1f0::/45, 2a0a:d685:1f8::/47, 2a0a:d685:1fa::/48, + 2a0a:d685:200::/48, 2a0a:d685:202::/47, 2a0a:d685:204::/46, 2a0a:d685:208::/45, @@ -3429,7 +3463,10 @@ set clashoo_china6 { 2a13:1802:2000::/35, 2a13:1802:4000::/34, 2a13:1802:8000::/34, - 2a13:1802:c000::/44, + 2a13:1802:c000::/48, + 2a13:1802:c002::/47, + 2a13:1802:c004::/46, + 2a13:1802:c008::/45, 2a13:1802:c020::/43, 2a13:1802:c040::/42, 2a13:1802:c080::/41, diff --git a/clashoo/files/usr/share/clashoo/nftables/geoip_cn.nft b/clashoo/files/usr/share/clashoo/nftables/geoip_cn.nft index 1738fd150..7661766ef 100644 --- a/clashoo/files/usr/share/clashoo/nftables/geoip_cn.nft +++ b/clashoo/files/usr/share/clashoo/nftables/geoip_cn.nft @@ -64,6 +64,7 @@ set clashoo_china { 5.10.138.0/23, 5.10.140.0/24, 5.10.143.0/24, + 5.181.224.0/23, 8.128.4.0/22, 8.128.32.0/19, 8.128.64.0/19, @@ -91,11 +92,92 @@ set clashoo_china { 8.168.0.0/15, 8.176.0.0/17, 8.176.128.0/19, + 8.208.0.0/17, + 8.208.128.0/21, + 8.208.140.0/22, + 8.208.144.0/20, + 8.208.160.0/19, + 8.208.192.0/18, + 8.209.0.0/19, + 8.209.36.0/22, + 8.209.40.0/21, + 8.209.48.0/20, + 8.209.64.0/18, + 8.209.128.0/18, + 8.209.192.0/24, + 8.209.194.0/23, + 8.209.196.0/22, + 8.209.200.0/21, + 8.209.208.0/20, + 8.209.224.0/19, + 8.210.0.0/16, + 8.211.0.0/17, + 8.211.128.0/18, + 8.211.192.0/19, + 8.211.224.0/22, + 8.211.232.0/21, + 8.211.240.0/20, + 8.212.0.0/18, + 8.212.64.0/20, + 8.212.80.0/21, + 8.212.88.0/22, + 8.212.92.0/24, + 8.212.94.0/23, + 8.212.96.0/22, + 8.212.104.0/21, + 8.212.112.0/20, + 8.212.128.0/19, + 8.212.160.0/20, + 8.212.176.0/21, + 8.212.188.0/22, + 8.212.192.0/18, + 8.213.0.0/16, + 8.214.0.0/17, + 8.214.128.0/19, + 8.214.164.0/22, + 8.214.168.0/21, + 8.214.176.0/20, + 8.214.192.0/18, + 8.215.0.0/17, + 8.215.128.0/19, + 8.215.160.0/22, + 8.215.168.0/21, + 8.215.176.0/20, + 8.215.192.0/18, + 8.216.0.0/18, + 8.216.64.0/21, + 8.216.72.0/22, + 8.216.80.0/20, + 8.216.96.0/19, + 8.216.128.0/17, + 8.217.0.0/16, + 8.218.0.0/15, + 8.220.0.0/18, + 8.220.64.0/19, + 8.220.96.0/20, + 8.220.112.0/21, + 8.220.120.0/22, + 8.220.128.0/19, + 8.220.160.0/21, + 8.220.172.0/22, + 8.220.176.0/20, + 8.220.192.0/19, + 8.220.224.0/21, + 8.220.232.0/22, + 8.220.240.0/21, + 8.221.0.0/17, + 8.221.128.0/20, + 8.221.144.0/21, + 8.221.156.0/22, + 8.221.160.0/19, + 8.221.192.0/18, + 8.222.0.0/15, 14.0.0.0/21, 14.0.12.0/22, 14.1.0.0/22, 14.1.24.0/22, 14.1.108.0/22, + 14.1.112.0/22, 14.16.0.0/12, 14.102.128.0/22, 14.102.180.0/22, @@ -308,6 +390,80 @@ set clashoo_china { 42.242.0.0/15, 42.244.0.0/14, 42.248.0.0/13, + 43.90.0.0/16, + 43.92.0.0/15, + 43.94.0.0/18, + 43.96.0.0/23, + 43.96.2.130/32, + 43.96.3.0/24, + 43.96.4.0/22, + 43.96.8.0/22, + 43.96.16.130/32, + 43.96.18.0/24, + 43.96.20.0/22, + 43.96.24.0/22, + 43.96.32.0/22, + 43.96.36.130/32, + 43.96.40.0/24, + 43.96.42.0/24, + 43.96.44.0/23, + 43.96.46.0/24, + 43.96.48.0/21, + 43.96.59.0/24, + 43.96.60.0/24, + 43.96.62.0/23, + 43.96.64.0/21, + 43.96.72.0/22, + 43.96.77.131/32, + 43.96.78.0/24, + 43.96.80.0/23, + 43.96.85.0/24, + 43.96.86.0/24, + 43.96.88.0/23, + 43.96.90.0/24, + 43.96.92.0/22, + 43.96.96.0/23, + 43.96.100.0/23, + 43.96.103.0/24, + 43.96.104.0/23, + 43.96.107.0/24, + 43.96.109.0/24, + 43.96.110.0/23, + 43.96.112.0/22, + 43.96.116.0/24, + 43.96.118.0/23, + 43.96.120.0/24, + 43.96.122.0/24, + 43.96.124.0/23, + 43.96.126.0/24, + 43.97.0.0/17, + 43.98.0.0/15, + 43.100.0.0/15, + 43.102.0.0/17, + 43.102.192.0/18, + 43.103.0.0/16, + 43.104.0.0/14, + 43.108.0.0/16, + 43.110.0.0/15, + 43.112.0.0/15, + 43.114.0.0/16, + 43.116.0.0/17, + 43.116.160.0/24, + 43.116.192.0/18, + 43.117.0.0/16, + 43.118.0.0/17, + 43.118.128.0/18, + 43.119.0.0/16, + 43.120.0.0/15, + 43.122.0.0/16, + 43.123.0.0/17, + 43.123.128.0/18, + 43.124.0.0/16, + 43.125.0.0/20, + 43.125.24.0/21, + 43.125.32.0/20, + 43.125.48.0/21, + 43.126.0.0/17, 43.136.0.0/13, 43.144.0.0/15, 43.148.0.0/14, @@ -458,7 +614,8 @@ set clashoo_china { 43.242.160.0/21, 43.242.168.0/22, 43.242.180.0/22, - 43.242.188.0/22, + 43.242.189.0/24, + 43.242.190.0/23, 43.242.192.0/21, 43.242.204.0/22, 43.242.216.0/21, @@ -728,6 +885,7 @@ set clashoo_china { 45.127.128.0/22, 45.127.144.0/21, 45.127.156.0/22, + 45.199.179.0/24, 45.248.8.0/22, 45.248.80.0/21, 45.248.96.0/20, @@ -773,6 +931,7 @@ set clashoo_china { 45.251.160.0/19, 45.251.192.0/19, 45.251.224.0/22, + 45.251.248.0/23, 45.252.0.0/21, 45.252.9.0/24, 45.252.10.0/23, @@ -830,8 +989,166 @@ set clashoo_china { 45.255.224.0/20, 45.255.240.0/21, 45.255.248.0/22, + 47.52.0.0/16, + 47.56.0.0/16, + 47.57.0.0/17, + 47.57.128.0/18, + 47.57.192.0/22, + 47.57.196.0/24, + 47.57.198.0/23, + 47.57.200.0/21, + 47.57.208.0/20, + 47.57.224.0/19, + 47.74.0.0/15, + 47.76.0.0/16, + 47.77.0.0/20, + 47.77.16.0/21, + 47.77.24.0/22, + 47.77.32.0/19, + 47.77.64.0/19, + 47.77.96.0/20, + 47.77.112.0/23, + 47.77.128.0/17, + 47.78.0.0/15, + 47.80.0.0/14, + 47.84.0.0/16, + 47.85.0.0/17, + 47.85.128.0/23, + 47.85.131.0/24, + 47.85.132.0/22, + 47.85.136.0/21, + 47.85.144.0/20, + 47.85.160.0/19, + 47.85.192.0/18, + 47.86.0.0/16, + 47.87.0.0/20, + 47.87.16.0/21, + 47.87.32.0/19, + 47.87.64.0/21, + 47.87.72.0/24, + 47.87.80.0/20, + 47.87.96.0/19, + 47.87.128.0/20, + 47.87.144.0/21, + 47.87.156.0/22, + 47.87.160.0/19, + 47.87.192.0/18, + 47.88.0.0/16, + 47.89.0.0/18, + 47.89.72.0/21, + 47.89.80.0/22, + 47.89.84.0/24, + 47.89.88.0/23, + 47.89.90.0/24, + 47.89.92.0/22, + 47.89.96.0/20, + 47.89.122.0/23, + 47.89.124.0/23, + 47.89.128.0/17, + 47.90.0.0/17, + 47.90.128.0/19, + 47.90.160.0/21, + 47.90.168.0/22, + 47.90.176.0/20, + 47.90.192.0/18, + 47.91.0.0/16, 47.92.0.0/14, 47.96.0.0/11, + 47.235.0.0/21, + 47.235.8.0/22, + 47.235.12.0/23, + 47.235.16.0/20, + 47.236.0.0/17, + 47.236.128.0/18, + 47.236.192.0/20, + 47.236.208.0/21, + 47.236.220.0/22, + 47.236.224.0/19, + 47.237.0.0/17, + 47.237.128.0/18, + 47.237.192.0/19, + 47.237.224.0/20, + 47.237.240.0/21, + 47.237.249.0/24, + 47.237.250.0/23, + 47.237.252.0/22, + 47.238.0.0/20, + 47.238.16.0/21, + 47.238.28.0/22, + 47.238.32.0/19, + 47.238.64.0/18, + 47.238.128.0/17, + 47.239.0.0/16, + 47.240.0.0/14, + 47.244.0.0/16, + 47.245.0.0/17, + 47.245.128.0/20, + 47.245.144.0/21, + 47.245.152.0/22, + 47.245.160.0/19, + 47.245.192.0/20, + 47.245.208.0/21, + 47.245.216.0/22, + 47.245.224.0/19, + 47.246.32.0/22, + 47.246.66.0/23, + 47.246.68.0/23, + 47.246.72.0/21, + 47.246.82.0/23, + 47.246.84.0/22, + 47.246.88.0/23, + 47.246.91.0/24, + 47.246.92.0/23, + 47.246.96.0/22, + 47.246.101.0/24, + 47.246.102.0/23, + 47.246.104.0/21, + 47.246.120.0/24, + 47.246.122.0/23, + 47.246.124.0/23, + 47.246.128.0/23, + 47.246.131.0/24, + 47.246.132.0/23, + 47.246.135.0/24, + 47.246.136.0/21, + 47.246.144.0/22, + 47.246.150.0/23, + 47.246.152.0/22, + 47.246.157.0/24, + 47.246.158.0/23, + 47.246.160.0/23, + 47.246.162.0/24, + 47.246.164.0/22, + 47.246.168.0/21, + 47.246.176.0/20, + 47.246.192.0/20, + 47.246.208.0/23, + 47.246.212.0/22, + 47.250.0.0/18, + 47.250.68.0/22, + 47.250.72.0/21, + 47.250.80.0/20, + 47.250.96.0/21, + 47.250.108.0/22, + 47.250.112.0/20, + 47.250.128.0/17, + 47.251.0.0/17, + 47.251.132.0/22, + 47.251.136.0/21, + 47.251.144.0/20, + 47.251.160.0/19, + 47.251.196.0/22, + 47.251.200.0/21, + 47.251.208.0/20, + 47.251.224.0/19, + 47.252.0.0/16, + 47.253.0.0/18, + 47.253.64.0/19, + 47.253.96.0/20, + 47.253.112.0/21, + 47.253.120.0/22, + 47.253.128.0/17, + 47.254.0.0/16, 49.4.0.0/17, 49.4.128.0/22, 49.4.160.0/20, @@ -916,9 +1233,7 @@ set clashoo_china { 59.153.136.0/22, 59.153.152.0/22, 59.153.164.0/22, - 59.153.168.0/22, - 59.153.173.0/24, - 59.153.174.0/23, + 59.153.168.0/21, 59.153.176.0/20, 59.153.192.0/22, 59.155.0.0/16, @@ -971,6 +1286,7 @@ set clashoo_china { 61.232.0.0/14, 61.236.0.0/15, 61.240.0.0/14, + 62.182.190.0/23, 62.234.0.0/16, 63.140.0.0/24, 63.140.3.0/24, @@ -1147,8 +1463,7 @@ set clashoo_china { 103.5.56.0/22, 103.5.152.0/22, 103.5.168.0/22, - 103.5.192.0/23, - 103.5.194.0/24, + 103.5.192.0/22, 103.5.252.0/22, 103.6.76.0/22, 103.6.220.0/22, @@ -1163,7 +1478,8 @@ set clashoo_china { 103.8.108.0/22, 103.8.156.0/22, 103.8.200.0/21, - 103.8.220.0/22, + 103.8.221.0/24, + 103.8.222.0/23, 103.9.8.0/22, 103.9.24.0/22, 103.9.108.0/22, @@ -1674,6 +1990,7 @@ set clashoo_china { 103.74.48.0/22, 103.74.56.0/21, 103.74.80.0/22, + 103.74.126.0/23, 103.74.148.0/22, 103.74.152.0/21, 103.74.204.0/22, @@ -1733,7 +2050,7 @@ set clashoo_china { 103.81.120.0/22, 103.81.148.0/22, 103.81.164.0/22, - 103.81.184.0/23, + 103.81.184.0/22, 103.81.200.0/22, 103.81.232.0/22, 103.82.60.0/22, @@ -1796,6 +2113,7 @@ set clashoo_china { 103.89.184.0/21, 103.89.192.0/19, 103.89.224.0/21, + 103.90.51.0/24, 103.90.52.0/22, 103.90.56.0/23, 103.90.92.0/22, @@ -3151,7 +3469,8 @@ set clashoo_china { 114.112.240.0/23, 114.112.245.0/24, 114.112.247.0/24, - 114.112.248.0/22, + 114.112.248.0/23, + 114.112.251.0/24, 114.112.252.0/23, 114.113.0.0/17, 114.113.128.0/21, @@ -3269,6 +3588,7 @@ set clashoo_china { 116.242.0.0/15, 116.244.0.0/14, 116.248.0.0/15, + 116.251.64.0/18, 116.252.0.0/15, 116.254.104.0/21, 116.254.128.0/17, @@ -3308,6 +3628,7 @@ set clashoo_china { 117.120.148.0/22, 117.120.164.0/22, 117.120.184.0/21, + 117.120.196.0/22, 117.120.208.0/21, 117.120.216.0/22, 117.120.248.0/21, @@ -3451,7 +3772,6 @@ set clashoo_china { 119.161.120.0/21, 119.161.128.0/21, 119.161.144.0/21, - 119.161.152.0/23, 119.161.160.0/19, 119.161.192.0/18, 119.162.0.0/15, @@ -3528,8 +3848,7 @@ set clashoo_china { 121.59.102.0/23, 121.59.104.0/23, 121.59.107.0/24, - 121.59.108.0/24, - 121.59.110.0/23, + 121.59.108.0/22, 121.59.112.0/21, 121.59.121.0/24, 121.59.123.0/24, @@ -3569,8 +3888,7 @@ set clashoo_china { 122.8.68.0/22, 122.8.76.0/22, 122.8.80.0/23, - 122.8.112.0/21, - 122.8.124.0/22, + 122.8.116.0/22, 122.8.192.0/18, 122.9.0.0/16, 122.10.129.0/24, @@ -3660,15 +3978,13 @@ set clashoo_china { 123.49.128.0/18, 123.49.192.0/23, 123.49.194.0/24, - 123.49.197.0/24, - 123.49.198.0/23, + 123.49.196.0/22, 123.49.200.0/21, 123.49.208.0/20, - 123.49.224.0/21, - 123.49.232.0/22, - 123.49.236.0/24, + 123.49.224.0/20, 123.49.240.0/24, 123.49.242.0/23, + 123.49.245.0/24, 123.49.248.0/21, 123.50.160.0/19, 123.52.0.0/14, @@ -3849,6 +4165,15 @@ set clashoo_china { 139.5.212.0/22, 139.5.244.0/22, 139.9.0.0/16, + 139.95.0.0/20, + 139.95.16.0/22, + 139.95.22.0/23, + 139.95.24.0/21, + 139.95.32.0/21, + 139.95.40.0/23, + 139.95.64.0/23, + 139.95.96.0/22, + 139.95.128.0/17, 139.129.0.0/16, 139.148.0.0/16, 139.155.0.0/16, @@ -3918,7 +4243,8 @@ set clashoo_china { 140.249.0.0/16, 140.250.0.0/16, 140.255.0.0/16, - 142.86.192.0/19, + 142.86.200.0/21, + 142.86.208.0/20, 142.86.224.0/20, 142.86.240.0/21, 142.86.248.0/22, @@ -3965,9 +4291,23 @@ set clashoo_china { 146.222.94.0/24, 147.78.132.0/24, 147.78.134.0/24, + 147.139.0.0/17, + 147.139.128.0/18, + 147.139.192.0/19, + 147.139.224.0/20, + 147.139.240.0/21, + 147.139.248.0/22, 148.70.0.0/16, 149.41.64.0/18, 149.41.192.0/19, + 149.129.0.0/20, + 149.129.16.0/21, + 149.129.32.0/19, + 149.129.64.0/18, + 149.129.128.0/19, + 149.129.168.0/21, + 149.129.176.0/20, + 149.129.192.0/18, 150.0.0.0/16, 150.115.0.0/16, 150.121.0.0/16, @@ -4025,6 +4365,10 @@ set clashoo_china { 156.107.170.0/24, 156.107.179.0/24, 156.107.181.0/24, + 156.227.20.0/24, + 156.236.12.0/24, + 156.236.17.0/24, + 156.245.1.0/24, 157.0.0.0/16, 157.10.34.0/23, 157.10.36.0/23, @@ -4043,7 +4387,7 @@ set clashoo_china { 157.20.194.0/23, 157.20.246.0/23, 157.61.0.0/16, - 157.66.42.0/23, + 157.66.43.0/24, 157.66.70.0/23, 157.66.88.0/21, 157.66.164.0/23, @@ -4119,6 +4463,7 @@ set clashoo_china { 160.250.170.0/23, 160.250.214.0/23, 160.250.252.0/23, + 161.117.0.0/16, 161.163.0.0/21, 161.163.28.0/23, 161.189.0.0/16, @@ -4178,7 +4523,6 @@ set clashoo_china { 163.223.32.0/23, 163.223.72.0/23, 163.223.124.0/23, - 163.223.217.0/24, 163.223.222.0/23, 163.227.34.0/23, 163.227.40.0/23, @@ -4206,6 +4550,29 @@ set clashoo_china { 167.189.0.0/16, 167.220.244.0/22, 168.160.0.0/16, + 170.33.15.0/24, + 170.33.20.0/22, + 170.33.24.0/24, + 170.33.29.0/24, + 170.33.30.0/23, + 170.33.32.0/22, + 170.33.41.0/24, + 170.33.64.0/23, + 170.33.66.0/24, + 170.33.68.0/23, + 170.33.72.0/23, + 170.33.76.0/22, + 170.33.80.0/22, + 170.33.84.0/24, + 170.33.104.0/22, + 170.33.112.0/23, + 170.33.114.0/24, + 170.33.129.0/24, + 170.33.130.0/23, + 170.33.136.0/23, + 170.33.138.0/24, + 170.33.168.0/23, + 170.33.192.0/23, 170.179.0.0/16, 171.8.0.0/13, 171.34.0.0/15, @@ -4340,7 +4707,6 @@ set clashoo_china { 183.91.52.0/22, 183.91.56.0/24, 183.91.61.0/24, - 183.91.63.0/24, 183.91.128.0/22, 183.91.136.0/21, 183.91.144.0/20, @@ -4384,6 +4750,12 @@ set clashoo_china { 193.119.0.0/19, 194.138.202.0/23, 194.138.245.0/24, + 198.11.128.0/20, + 198.11.145.0/24, + 198.11.146.0/23, + 198.11.148.0/22, + 198.11.152.0/21, + 198.11.160.0/19, 198.175.100.0/22, 198.208.17.0/24, 198.208.19.0/24, @@ -4754,8 +5126,7 @@ set clashoo_china { 202.143.56.0/21, 202.143.100.0/22, 202.143.104.0/22, - 202.144.196.0/23, - 202.144.198.0/24, + 202.144.196.0/22, 202.146.160.0/20, 202.146.184.0/23, 202.146.186.0/24, @@ -4795,7 +5166,6 @@ set clashoo_china { 202.164.0.0/20, 202.164.96.0/19, 202.165.176.0/20, - 202.165.208.0/21, 202.165.239.0/24, 202.165.240.0/23, 202.165.243.0/24, @@ -5667,6 +6037,7 @@ set clashoo_china { 203.81.1.0/24, 203.81.2.0/24, 203.81.5.0/24, + 203.81.7.0/24, 203.81.16.0/20, 203.81.244.0/22, 203.82.0.0/23, @@ -5740,17 +6111,7 @@ set clashoo_china { 203.104.32.0/20, 203.105.96.0/19, 203.105.128.0/19, - 203.107.0.0/23, - 203.107.2.0/24, - 203.107.4.0/22, - 203.107.8.0/21, - 203.107.16.0/20, - 203.107.32.0/19, - 203.107.69.0/24, - 203.107.70.0/23, - 203.107.72.0/21, - 203.107.80.0/20, - 203.107.96.0/19, + 203.107.0.0/17, 203.110.160.0/19, 203.110.208.0/20, 203.110.232.0/23, @@ -5775,8 +6136,7 @@ set clashoo_china { 203.123.58.0/24, 203.128.32.0/19, 203.128.96.0/19, - 203.128.225.0/24, - 203.128.226.0/23, + 203.128.224.0/22, 203.128.228.0/24, 203.128.231.0/24, 203.129.8.0/24, @@ -5889,6 +6249,7 @@ set clashoo_china { 203.223.16.0/24, 203.223.21.0/24, 203.223.22.0/23, + 205.204.96.0/19, 206.109.70.0/23, 206.109.75.0/24, 210.2.0.0/19, @@ -5944,6 +6305,8 @@ set clashoo_china { 211.144.0.0/14, 211.148.0.0/16, 211.149.0.0/19, + 211.149.33.0/24, + 211.149.34.0/23, 211.149.48.0/21, 211.149.64.0/21, 211.149.80.0/21, diff --git a/clashoo/files/usr/share/clashoo/ruleset/cn-ip.srs b/clashoo/files/usr/share/clashoo/ruleset/cn-ip.srs index d4bff3d47..d0b0b7454 100644 Binary files a/clashoo/files/usr/share/clashoo/ruleset/cn-ip.srs and b/clashoo/files/usr/share/clashoo/ruleset/cn-ip.srs differ diff --git a/clashoo/files/usr/share/clashoo/ruleset/cn.mrs b/clashoo/files/usr/share/clashoo/ruleset/cn.mrs index 044d77b13..536c85a75 100644 Binary files a/clashoo/files/usr/share/clashoo/ruleset/cn.mrs and b/clashoo/files/usr/share/clashoo/ruleset/cn.mrs differ diff --git a/clashoo/files/usr/share/clashoo/ruleset/geolocation-!cn.srs b/clashoo/files/usr/share/clashoo/ruleset/geolocation-!cn.srs index 637f5b4f3..e3c6a5138 100644 Binary files a/clashoo/files/usr/share/clashoo/ruleset/geolocation-!cn.srs and b/clashoo/files/usr/share/clashoo/ruleset/geolocation-!cn.srs differ diff --git a/luci-app-adguardhome/.official_channel b/luci-app-adguardhome/.official_channel index 8ab67f2e7..49f33a8c6 100644 --- a/luci-app-adguardhome/.official_channel +++ b/luci-app-adguardhome/.official_channel @@ -1 +1 @@ -snapshot +both diff --git a/luci-app-vantage/Makefile b/luci-app-vantage/Makefile index 432c7a2b3..62a252ce7 100644 --- a/luci-app-vantage/Makefile +++ b/luci-app-vantage/Makefile @@ -11,7 +11,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-vantage PKG_VERSION:=1.0.8 -PKG_RELEASE:=13 +PKG_RELEASE:=14 PKG_LICENSE:=GPL-3.0-or-later LUCI_TITLE:=Vantage dashboard diff --git a/luci-app-vantage/htdocs/luci-static/resources/vantage/app.css b/luci-app-vantage/htdocs/luci-static/resources/vantage/app.css index 5dceb283b..16beef809 100644 --- a/luci-app-vantage/htdocs/luci-static/resources/vantage/app.css +++ b/luci-app-vantage/htdocs/luci-static/resources/vantage/app.css @@ -156,6 +156,8 @@ html[data-darkmode="true"] .vt-app { position: static; z-index: auto; display: block; overflow: visible; margin: 0; padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none; color: inherit; text-shadow: none; + width: 100%; + flex-direction: unset; } .vt-app :where(header, footer) :where(p, a, span) { line-height: inherit; text-shadow: none; } .vt-app :where(header) :where(a) { color: inherit; } @@ -478,8 +480,7 @@ html[data-darkmode="true"] .vt-app { margin: 2px 0 14px; } header::after { - height:0 !important; - + height:0 !important; } h2, h3{ background-color:transparent; diff --git a/luci-app-xkcptun/htdocs/luci-static/resources/view/xkcptun.js b/luci-app-xkcptun/htdocs/luci-static/resources/view/xkcptun.js index 3e623ad8c..c36b9bfce 100644 --- a/luci-app-xkcptun/htdocs/luci-static/resources/view/xkcptun.js +++ b/luci-app-xkcptun/htdocs/luci-static/resources/view/xkcptun.js @@ -2,8 +2,10 @@ 'require view'; 'require dom'; 'require ui'; +'require uci'; 'require form'; 'require rpc'; +'require fs'; const callServiceList = rpc.declare({ object: 'service', @@ -44,27 +46,11 @@ function renderStatus(status) { ]) ]); - let serverBadge = status.server - ? E('em', {}, [ - E('span', { 'style': 'color:green;' }, [ - E('strong', {}, _('RUNNING') + ' (PID ' + status.server + ')') - ]) - ]) - : E('em', {}, [ - E('span', { 'style': 'color:grey;' }, [ - E('strong', {}, _('NOT RUNNING')) - ]) - ]); - return E('div', { 'class': 'cbi-map' }, E('fieldset', { 'class': 'cbi-section' }, [ E('p', {}, [ E('strong', {}, _('Client Daemon') + ': '), - clientBadge, - E('span', { 'style': 'margin-left: 20px;' }, [ - E('strong', {}, _('Server Daemon') + ': '), - serverBadge - ]) + clientBadge ]) ]) ); @@ -78,7 +64,7 @@ const modeProfiles = [ ['manual', _('manual (custom parameters)')] ]; -function addCommonAdvancedOptions(s, tabName, isServer) { +function addCommonAdvancedOptions(s, tabName) { let tab = tabName || 'advanced'; let o; @@ -89,15 +75,15 @@ function addCommonAdvancedOptions(s, tabName, isServer) { o.optional = true; o = s.taboption(tab, form.Value, 'sndwnd', _('Send Window (sndwnd)'), - _('Send window size (number of packets).')); + _('Send window size (number of packets). Default is 4096.')); o.datatype = 'uinteger'; - o.placeholder = isServer ? '4096' : '1024'; + o.placeholder = '4096'; o.optional = true; o = s.taboption(tab, form.Value, 'rcvwnd', _('Receive Window (rcvwnd)'), - _('Receive window size (number of packets).')); + _('Receive window size (number of packets). Default is 4096.')); o.datatype = 'uinteger'; - o.placeholder = isServer ? '1024' : '4096'; + o.placeholder = '4096'; o.optional = true; o = s.taboption(tab, form.Flag, 'fec', _('Enable FEC (fec)'), @@ -179,31 +165,146 @@ function addCommonAdvancedOptions(s, tabName, isServer) { o.optional = true; } +const SERVER_AI_PROMPT = [ + '请在当前这台 Linux VPS 服务器上编译并部署 xkcptun 服务端守护进程(作为高速动态网关):', + '', + '### 1. 架构说明', + '- xkcptun 采用统一动态网关模式:服务端监听单个 UDP 端口(默认 9089),客户端透明代理与转发流量均复用此通道。', + '- 源码仓库:https://github.com/liudf0716/xkcptun', + '', + '### 2. 编译与安装步骤', + '1. 安装依赖:', + ' - Debian/Ubuntu: apt-get update && apt-get install -y git build-essential cmake libevent-dev pkg-config', + ' - CentOS/Rocky/RHEL: yum install -y git gcc gcc-c++ make cmake libevent-devel', + '2. 克隆仓库并编译:', + ' git clone https://github.com/liudf0716/xkcptun.git /opt/xkcptun-src', + ' cd /opt/xkcptun-src && mkdir -p build && cd build', + ' cmake -DCMAKE_BUILD_TYPE=Release .. && make -j$(nproc)', + ' cp xkcp_server /usr/local/bin/', + '', + '### 3. 创建服务端配置 (/etc/xkcptun/server.toml)', + 'mkdir -p /etc/xkcptun', + 'cat << \'EOF\' > /etc/xkcptun/server.toml', + '[global]', + 'syslog = true', + 'mon_port = 9087', + '', + '[[tunnel]]', + 'name = "gateway"', + 'local_interface = "0.0.0.0"', + 'local_port = 9089', + 'key = "YOUR_SHARED_SECRET_KEY" # 请替换为强随机密钥', + 'mode = "fast3"', + 'mtu = 1350', + 'sndwnd = 4096', + 'rcvwnd = 4096', + 'datashard = 10', + 'parityshard = 3', + 'fec = 1', + 'nodelay = 1', + 'interval = 10', + 'resend = 2', + 'nc = 1', + 'lossctrl = 0', + 'pacing = 0', + 'sockbuf = 16777216', + 'keepalive = 10', + 'conntimeout = 60', + 'EOF', + '', + '### 4. 创建守护服务与启动', + 'cat << \'EOF\' > /etc/systemd/system/xkcptun-server.service', + '[Unit]', + 'Description=xkcptun High-Speed Server Dynamic Gateway', + 'After=network.target', + '', + '[Service]', + 'Type=simple', + 'User=root', + 'ExecStart=/usr/local/bin/xkcp_server -f --syslog -c /etc/xkcptun/server.toml', + 'Restart=always', + 'RestartSec=3', + 'LimitNOFILE=65535', + '', + '[Install]', + 'WantedBy=multi-user.target', + 'EOF', + '', + 'systemctl daemon-reload && systemctl enable --now xkcptun-server', + 'sysctl -w net.ipv4.ip_forward=1', + '', + '### 5. 防火墙放行', + '放行 UDP 9089 端口(例如: ufw allow 9089/udp 或 firewall-cmd --add-port=9089/udp --permanent && firewall-cmd --reload)。', + '', + '部署完成后,请告诉我当前服务器公网 IP、UDP 端口以及设置的预共享密钥。' +].join('\n'); + +function renderPromptTab() { + return E('div', { + 'class': 'cbi-section', + 'data-tab': 'prompt', + 'data-tab-title': _('Server Configuration') + }, [ + E('h3', {}, _('Server Deployment AI Prompt')), + E('div', { 'class': 'cbi-section-descr' }, + _('Chawrt only functions as the client. Copy this prompt directly to an AI assistant to automatically build and deploy the xkcptun dynamic gateway on your remote VPS.') + ), + E('div', { 'style': 'position: relative; margin-top: 15px;' }, [ + E('textarea', { + 'id': 'xkcptun_server_prompt_area', + 'class': 'cbi-input-textarea', + 'style': 'width: 100%; height: 260px; font-family: monospace; font-size: 13px; line-height: 1.5; background: #1e1e2e; color: #cdd6f4; border: 1px solid #45475a; border-radius: 6px; padding: 12px; resize: vertical;', + 'readonly': 'readonly' + }, [ SERVER_AI_PROMPT ]), + E('div', { 'style': 'margin-top: 10px; display: flex; align-items: center; gap: 15px;' }, [ + E('button', { + 'class': 'cbi-button cbi-button-action', + 'click': function(ev) { + let textarea = document.getElementById('xkcptun_server_prompt_area'); + if (!textarea) return; + + let copySuccess = function() { + let origText = ev.target.textContent; + ev.target.textContent = '✔ ' + _('Copied to Clipboard!'); + ev.target.classList.remove('cbi-button-action'); + ev.target.classList.add('cbi-button-positive'); + setTimeout(function() { + ev.target.textContent = origText; + ev.target.classList.remove('cbi-button-positive'); + ev.target.classList.add('cbi-button-action'); + }, 2000); + ui.addNotification(null, E('p', {}, _('Server deployment prompt copied to clipboard!')), 'info'); + }; + + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(textarea.value).then(copySuccess).catch(function() { + textarea.select(); + document.execCommand('copy'); + copySuccess(); + }); + } else { + textarea.select(); + document.execCommand('copy'); + copySuccess(); + } + } + }, [ _('📋 Copy Prompt for AI Deployment') ]), + E('span', { 'style': 'color: #888; font-size: 13px;' }, + _('Paste this prompt to AI (Claude/ChatGPT/DeepSeek) on your VPS terminal.') + ) + ]) + ]) + ]); +} + return view.extend({ render: function() { let m, s, o; - m = new form.Map('xkcptun', _('xkcptun'), - _('xkcptun is a high-performance C implementation of kcptun with dynamic destination multi-tunnel unified daemon architecture.')); + m = new form.Map('xkcptun'); + m.tabbed = true; - // Status Section - s = m.section(form.NamedSection, '_status'); - s.anonymous = true; - s.render = function (section_id) { - let container = E('div', { id: 'service_status' }, _('Collecting status ...')); - L.Poll.add(function () { - return L.resolveDefault(getServiceStatus(), {}).then(function(status) { - let view = document.getElementById('service_status'); - if (view) { - dom.content(view, renderStatus(status)); - } - }); - }); - - return container; - }; - - // ===== Client Global Default Settings ===== + // ===== Tab 1: Client Global Default Settings ===== s = m.section(form.NamedSection, 'client', 'global', _('Client Global Settings'), _('Common connection parameters and KCP profile inherited by all client tunnels.')); s.anonymous = false; @@ -219,20 +320,21 @@ return view.extend({ o.default = '0'; o.rmempty = false; - o = s.taboption('general', form.Value, 'remote_addr', _('Default Server Address'), + o = s.taboption('general', form.Value, 'remote_addr', _('Server Address'), _('Remote xkcptun server IP address or domain name.')); o.datatype = 'host'; o.placeholder = '1.2.3.4'; o.rmempty = false; - o = s.taboption('general', form.Value, 'remote_port', _('Default Server Port'), + o = s.taboption('general', form.Value, 'remote_port', _('Server Port'), _('Remote xkcptun server UDP listen port.')); o.datatype = 'port'; o.placeholder = '9089'; + o.default = '9089'; o.rmempty = false; o = s.taboption('general', form.Value, 'key', _('Pre-Shared Key'), - _('Pre-shared key for HMAC-SHA256 dynamic target authentication. Must match the server.')); + _('Pre-shared key for authentication. Must match the server.')); o.password = true; o.placeholder = "it's a secret"; o.optional = true; @@ -244,30 +346,49 @@ return view.extend({ } o.default = 'fast3'; - addCommonAdvancedOptions(s, 'advanced', false); + addCommonAdvancedOptions(s, 'advanced'); - // ===== Client Tunnels ===== + // ===== Tab 2: Client Tunnels ===== s = m.section(form.GridSection, 'client', _('Client Tunnels'), - _('Configure local client listening ports and dynamic backend target ports. All tunnels share the single unified client daemon.')); + _('Configure local client listening ports and proxy modes. Transparent proxy (redir) handles smart split-routing automatically.')); s.anonymous = false; s.addremove = true; s.sortable = true; + s.nodescriptions = true; s.addbtntitle = _('Add Client Tunnel'); - s.tab('general', _('General Settings')); - s.tab('advanced', _('Advanced Overrides')); + s.handleAdd = function(ev, name) { + let config_name = this.uciconfig || this.map.config; + let section_id = this.map.data.add(config_name, this.sectiontype, name); + this.map.data.set(config_name, section_id, 'proto', 'tcp'); + this.map.data.set(config_name, section_id, 'proxy_type', 'redir'); + let mapNode = this.getPreviousModalMap(); + let prevMap = mapNode ? dom.findClassInstance(mapNode) : this.map; + prevMap.addedSection = section_id; + return this.renderMoreOptionsModal(section_id); + }; - // Overview Columns in table - o = s.option(form.Flag, 'enabled', _('Enabled')); + s.tab('general', _('General Settings')); + + // --- Table Overview Columns (modalonly = false) --- + o = s.option(form.Flag, 'enabled', _('Enable')); o.enabled = '1'; o.disabled = '0'; o.default = '1'; o.rmempty = false; o.editable = true; - - o = s.option(form.Value, 'name', _('Tunnel Name')); o.modalonly = false; - o.placeholder = _('(Auto)'); + + o = s.option(form.DummyValue, '_proxy_type', _('Proxy Type')); + o.modalonly = false; + o.textvalue = function(section_id) { + let proto = uci.get('xkcptun', section_id, 'proto') || 'tcp'; + if (proto === 'udp') return _('Port Forward'); + let val = uci.get('xkcptun', section_id, 'proxy_type') || 'redir'; + if (val === 'redir') return _('Transparent Proxy (redir)'); + if (val === 'socks5') return _('SOCKS5'); + return _('Port Forward'); + }; o = s.option(form.ListValue, 'proto', _('Protocol')); o.value('tcp', 'TCP'); @@ -276,19 +397,35 @@ return view.extend({ o.modalonly = false; o = s.option(form.Value, 'local_port', _('Local Port')); + o.datatype = 'port'; + o.placeholder = '12345'; o.modalonly = false; - o.placeholder = '9088'; - o = s.option(form.Value, 'target_port', _('Target Port')); + o = s.option(form.DummyValue, '_destination', _('Target / Destination')); o.modalonly = false; - o.placeholder = '22'; + o.textvalue = function(section_id) { + let proto = (this.map && this.map.data ? this.map.data.get('xkcptun', section_id, 'proto') : uci.get('xkcptun', section_id, 'proto')) || 'tcp'; + let ptype = (this.map && this.map.data ? this.map.data.get('xkcptun', section_id, 'proxy_type') : uci.get('xkcptun', section_id, 'proxy_type')); + if (proto === 'udp') { + ptype = 'forward'; + } else if (!ptype) { + let target = (this.map && this.map.data ? this.map.data.get('xkcptun', section_id, 'target_addr') : uci.get('xkcptun', section_id, 'target_addr')); + ptype = target ? 'forward' : 'redir'; + } + if (ptype === 'redir') { + return E('span', { 'style': 'color:#10b981; font-weight:600;' }, _('Dynamic / Smart Route')); + } else if (ptype === 'socks5') { + return E('span', { 'style': 'color:#6366f1; font-weight:600;' }, _('SOCKS5 Proxy')); + } else { + let host = (this.map && this.map.data ? this.map.data.get('xkcptun', section_id, 'target_addr') : uci.get('xkcptun', section_id, 'target_addr')) || '127.0.0.1'; + let port = (this.map && this.map.data ? this.map.data.get('xkcptun', section_id, 'target_port') : uci.get('xkcptun', section_id, 'target_port')) || _('(Dynamic/Auto)'); + return E('code', {}, host + ':' + port); + } + }; - o = s.option(form.Value, 'target_addr', _('Target Host')); - o.modalonly = false; - o.placeholder = '127.0.0.1'; - - // Modal / Tab: General Settings - o = s.taboption('general', form.Flag, 'enabled', _('Enable Tunnel')); + // --- Modal Dialog Options: General Settings Tab (modalonly = true) --- + o = s.taboption('general', form.Flag, 'enabled', _('Enable Tunnel'), + _('Enable or disable this client tunnel.')); o.enabled = '1'; o.disabled = '0'; o.default = '1'; @@ -296,214 +433,129 @@ return view.extend({ o.modalonly = true; o = s.taboption('general', form.Value, 'name', _('Tunnel Name / Alias'), - _('Optional descriptive name for this tunnel (e.g. ssh_tunnel, web_proxy).')); - o.placeholder = 'my_tunnel'; + _('Descriptive name for this tunnel (e.g. redir_tunnel, dns_tunnel).')); + o.placeholder = _('(Auto)'); o.optional = true; o.modalonly = true; - o = s.taboption('general', form.ListValue, 'proto', _('Tunnel Protocol'), - _('Protocol to tunnel: TCP (standard KCP stream) or UDP (direct low-latency datagram forwarding, e.g. for DNS).')); - o.value('tcp', _('TCP (TCP-over-KCP)')); - o.value('udp', _('UDP (Direct UDP Datagram)')); + o = s.taboption('general', form.ListValue, 'proto', _('Protocol'), + _('Protocol to tunnel: TCP (supports Transparent Proxy, Port Forward, SOCKS5) or UDP (Port Forward only, e.g. DNS).')); + o.value('tcp', 'TCP'); + o.value('udp', 'UDP'); o.default = 'tcp'; o.rmempty = false; + o.forcewrite = true; o.modalonly = true; - o = s.taboption('general', form.Value, 'local_interface', _('Local Interface'), - _('Network interface to bind (default: br-lan).')); - o.placeholder = 'br-lan'; - o.default = 'br-lan'; + // --- Modal Option: Proxy Type for TCP (3 modes available) --- + o = s.taboption('general', form.ListValue, 'proxy_type', _('Proxy Type'), + _('Proxy mode: Transparent Proxy (redir) automatically routes traffic from iptables/nftables/eBPF; Port Forward forwards local port to fixed server port; SOCKS5 provides local SOCKS5 proxy.')); + o.depends('proto', 'tcp'); + o.value('redir', _('Transparent Proxy (redir)')); + o.value('forward', _('Port Forward')); + o.value('socks5', _('SOCKS5')); + o.default = 'redir'; o.rmempty = false; + o.forcewrite = true; + o.modalonly = true; + o.write = function(section_id, formvalue) { + return uci.set('xkcptun', section_id, 'proxy_type', formvalue || 'redir'); + }; + + // --- Modal Option: Proxy Type for UDP (Port Forward only) --- + o = s.taboption('general', form.ListValue, '_proxy_type_udp', _('Proxy Type'), + _('UDP protocol in xkcptun only supports fixed-destination Port Forwarding (e.g. DNS tunnel).')); + o.depends('proto', 'udp'); + o.value('forward', _('Port Forward (UDP only)')); + o.default = 'forward'; + o.rmempty = false; + o.forcewrite = true; + o.modalonly = true; + o.write = function(section_id, formvalue) { + return uci.set('xkcptun', section_id, 'proxy_type', 'forward'); + }; + + o = s.taboption('general', form.Value, 'local_interface', _('Local Interface'), + _('Local network interface to listen on (default: any).')); + o.placeholder = 'any'; + o.default = 'any'; + o.optional = true; o.modalonly = true; o = s.taboption('general', form.Value, 'local_port', _('Local Listen Port'), - _('Local port to listen for incoming application traffic (e.g. 9088).')); + _('Local port on router to listen for traffic (e.g. 12345 for redir, 5353 for DNS).')); o.datatype = 'port'; - o.placeholder = '9088'; + o.placeholder = '12345'; o.rmempty = false; o.modalonly = true; - o = s.taboption('general', form.Value, 'target_port', _('Dynamic Target Port'), - _('Target port on the server to forward traffic to (e.g. 22, 53, 80, 443).')); - o.datatype = 'port'; - o.placeholder = '22'; - o.rmempty = false; - o.modalonly = true; - - o = s.taboption('general', form.Value, 'target_addr', _('Dynamic Target Host'), - _('Target host on the server to connect/forward to (default: 127.0.0.1).')); + o = s.taboption('general', form.Value, 'target_addr', _('Target Host (Port Forward only)'), + _('Destination host on the server side (default: 127.0.0.1). Leave empty for Transparent Proxy.')); o.datatype = 'host'; o.placeholder = '127.0.0.1'; o.default = '127.0.0.1'; o.optional = true; o.modalonly = true; + o.depends('proxy_type', 'forward'); + o.depends('proto', 'udp'); - // Modal / Tab: Advanced Overrides (Optional) - o = s.taboption('advanced', form.Value, 'remote_addr', _('Override Server Address'), - _('Override remote server address for this specific tunnel (defaults to global).')); - o.datatype = 'host'; - o.placeholder = _('(Inherit from Global)'); - o.optional = true; - - o = s.taboption('advanced', form.Value, 'remote_port', _('Override Server Port'), - _('Override remote server port for this specific tunnel (defaults to global).')); + o = s.taboption('general', form.Value, 'target_port', _('Target Port (Port Forward only)'), + _('Destination port on the server side. Leave empty for Transparent Proxy.')); o.datatype = 'port'; - o.placeholder = _('(Inherit from Global)'); - o.optional = true; - - o = s.taboption('advanced', form.Value, 'key', _('Override Pre-Shared Key'), - _('Override pre-shared authentication key for this specific tunnel (defaults to global).')); - o.password = true; - o.placeholder = _('(Inherit from Global)'); - o.optional = true; - - // ===== Server Global Settings (Dynamic Gateway) ===== - s = m.section(form.NamedSection, 'server', 'global', _('Server Global Settings (Dynamic Gateway)'), - _('Unified xkcptun server dynamic gateway. The server listens on a single UDP port and dynamically routes each client tunnel to its requested backend target.')); - s.anonymous = false; - s.addremove = false; - - s.tab('general', _('General Settings')); - s.tab('advanced', _('Advanced Settings')); - - o = s.taboption('general', form.Flag, 'enabled', _('Enable Server Daemon'), - _('Enable unified xkcptun server dynamic gateway daemon.')); - o.enabled = '1'; - o.disabled = '0'; - o.default = '0'; - o.rmempty = false; - - o = s.taboption('general', form.Value, 'local_interface', _('Listen Interface'), - _('Network interface to bind (e.g. eth0, br-lan, wan).')); - o.placeholder = 'eth0'; - o.default = 'eth0'; - o.rmempty = false; - - o = s.taboption('general', form.Value, 'local_port', _('Listen Port (UDP)'), - _('UDP port to listen for incoming client KCP connections (default: 9089).')); - o.datatype = 'port'; - o.placeholder = '9089'; - o.default = '9089'; - o.rmempty = false; - - o = s.taboption('general', form.Value, 'key', _('Pre-Shared Key'), - _('Pre-shared key for dynamic gateway authentication. Clients must present a valid HMAC token generated with this key.')); - o.password = true; - o.placeholder = "it's a secret"; - o.optional = true; - - o = s.taboption('general', form.ListValue, 'mode', _('Mode Profile'), - _('KCP performance tuning profile.')); - for (let i = 0; i < modeProfiles.length; i++) { - o.value(modeProfiles[i][0], modeProfiles[i][1]); - } - o.default = 'fast3'; - - addCommonAdvancedOptions(s, 'advanced', true); - - // ===== Server Fallback Tunnels (Optional) ===== - s = m.section(form.GridSection, 'server', _('Server Fallback Tunnels (Optional)'), - _('Optional fallback static target rules for legacy clients that do not send dynamic destination headers. Modern dynamic clients do not require any server tunnels configured here.')); - s.anonymous = false; - s.addremove = true; - s.sortable = true; - s.addbtntitle = _('Add Fallback Tunnel'); - - s.tab('general', _('General Settings')); - s.tab('advanced', _('Advanced Settings')); - - // Overview Columns in table - o = s.option(form.Flag, 'enabled', _('Enabled')); - o.enabled = '1'; - o.disabled = '0'; - o.default = '1'; - o.rmempty = false; - o.editable = true; - - o = s.option(form.Value, 'name', _('Tunnel Name')); - o.modalonly = false; - o.placeholder = _('(Auto)'); - - o = s.option(form.Value, 'local_interface', _('Interface')); - o.modalonly = false; - o.placeholder = 'eth0'; - - o = s.option(form.Value, 'local_port', _('Listen Port')); - o.modalonly = false; - o.placeholder = '9089'; - - o = s.option(form.Value, 'remote_addr', _('Fallback Target Host')); - o.modalonly = false; - o.placeholder = '127.0.0.1'; - - o = s.option(form.Value, 'remote_port', _('Fallback Target Port')); - o.modalonly = false; - o.placeholder = '443'; - - o = s.option(form.ListValue, 'mode', _('Mode')); - o.modalonly = false; - for (let i = 0; i < modeProfiles.length; i++) { - o.value(modeProfiles[i][0], modeProfiles[i][0]); - } - - o = s.option(form.Flag, 'fec', _('FEC')); - o.modalonly = false; - o.default = '1'; - o.editable = true; - - // Modal / Tab: General Settings - o = s.taboption('general', form.Flag, 'enabled', _('Enable Tunnel')); - o.enabled = '1'; - o.disabled = '0'; - o.default = '1'; - o.rmempty = false; - o.modalonly = true; - - o = s.taboption('general', form.Value, 'name', _('Tunnel Name / Alias'), - _('Optional descriptive name for this tunnel (e.g. main_srv).')); - o.placeholder = 'srv_tunnel'; + o.placeholder = _('(Dynamic/Auto)'); o.optional = true; o.modalonly = true; + o.depends('proxy_type', 'forward'); + o.depends('proto', 'udp'); - o = s.taboption('general', form.Value, 'local_interface', _('Local Interface'), - _('Network interface to bind (e.g. eth0, br-lan, wan).')); - o.placeholder = 'eth0'; - o.default = 'eth0'; - o.rmempty = false; - o.modalonly = true; + // ===== Tab 3: Server Configuration (AI Prompt) ===== + let s_prompt = m.section(form.NamedSection, '_server_prompt', 'prompt', _('Server Configuration')); + s_prompt.load = function() { return Promise.resolve(); }; + s_prompt.parse = function() { return Promise.resolve(); }; + s_prompt.render = function() { + return Promise.resolve(renderPromptTab()); + }; - o = s.taboption('general', form.Value, 'local_port', _('Local Listen Port (UDP)'), - _('UDP port to listen for incoming KCP connections from clients.')); - o.datatype = 'port'; - o.placeholder = '9089'; - o.rmempty = false; - o.modalonly = true; + return m.render().then(function(mapNode) { + let customStyle = E('style', {}, [ + '.cbi-tblsection { overflow-x: auto !important; }', + '.cbi-section-table .cbi-section-actions { white-space: nowrap !important; text-align: right !important; min-width: 140px !important; width: 1% !important; }', + '.cbi-section-table .cbi-section-actions > div { display: inline-flex !important; align-items: center !important; justify-content: flex-end !important; gap: 4px !important; }' + ]); - o = s.taboption('general', form.Value, 'remote_addr', _('Fallback Target Host'), - _('Default target host if client did not specify a dynamic destination (default: 127.0.0.1).')); - o.datatype = 'host'; - o.default = '127.0.0.1'; - o.placeholder = '127.0.0.1'; - o.rmempty = false; - o.modalonly = true; + document.addEventListener('cbi-tab-active', function() { + window.dispatchEvent(new Event('resize')); + }); - o = s.taboption('general', form.Value, 'remote_port', _('Fallback Target Port'), - _('Default target port if client did not specify a dynamic destination (e.g. 443, 22).')); - o.datatype = 'port'; - o.placeholder = '443'; - o.rmempty = false; - o.modalonly = true; + let statusEl = E('fieldset', { 'class': 'cbi-section', 'style': 'margin-bottom: 15px;' }, [ + E('legend', {}, _('Service Status')), + E('div', { 'id': 'service_status' }, _('Collecting status ...')) + ]); - o = s.taboption('general', form.ListValue, 'mode', _('Mode Profile'), - _('KCP performance tuning profile.')); - for (let i = 0; i < modeProfiles.length; i++) { - o.value(modeProfiles[i][0], modeProfiles[i][1]); - } - o.default = 'fast3'; - o.modalonly = true; + L.Poll.add(function () { + return L.resolveDefault(getServiceStatus(), {}).then(function(status) { + let view = document.getElementById('service_status'); + if (view) { + dom.content(view, renderStatus(status)); + } + }); + }); - addCommonAdvancedOptions(s, 'advanced', true); + return E('div', {}, [ + customStyle, + E('h2', {}, _('xkcptun')), + E('div', { 'class': 'cbi-map-descr' }, + _('xkcptun is a high-performance C implementation of kcptun with dynamic destination multi-tunnel unified daemon architecture.') + ), + statusEl, + mapNode + ]); + }); + }, - return m.render(); + handleSaveApply: function(ev, mode) { + return this.super('handleSaveApply', [ev, mode]).then(function() { + return fs.exec_direct('/etc/init.d/xkcptun', ['restart']); + }); } }); diff --git a/luci-app-xkcptun/po/zh_Hans/xkcptun.po b/luci-app-xkcptun/po/zh_Hans/xkcptun.po index f5fadb23b..a8f23ec3d 100644 --- a/luci-app-xkcptun/po/zh_Hans/xkcptun.po +++ b/luci-app-xkcptun/po/zh_Hans/xkcptun.po @@ -35,7 +35,7 @@ msgid "Server Daemon" msgstr "服务端守护进程" msgid "Client Global Settings" -msgstr "客户端全局默认设置" +msgstr "客户端全局配置" msgid "Common connection parameters and KCP profile inherited by all client tunnels." msgstr "所有客户端隧道共享继承的公共连接参数及 KCP 性能配置。" @@ -47,7 +47,7 @@ msgid "Default Server Port" msgstr "默认服务器端口" msgid "Client Tunnels" -msgstr "客户端隧道" +msgstr "客户端隧道配置" msgid "Configure local client listening ports and dynamic backend target ports. All tunnels share the single unified client daemon." msgstr "配置客户端本地监听端口与远端动态后端目标端口。所有隧道共享单一统一守护进程。" @@ -427,3 +427,111 @@ msgstr "UDP 套接字接收与发送缓冲区大小,单位字节。默认为 1 msgid "Unified xkcptun server dynamic gateway. The server listens on a single UDP port and dynamically routes each client tunnel to its requested backend target." msgstr "统一 xkcptun 服务端动态网关。服务端在单个 UDP 端口上监听,并动态将每个客户端隧道路由到其请求的后端目标。" +msgid "Proxy Type" +msgstr "代理类型" + +msgid "Transparent Proxy (redir)" +msgstr "透明代理 (redir)" + +msgid "Port Forward" +msgstr "端口转发" + +msgid "SOCKS5" +msgstr "SOCKS5 代理" + +msgid "(Dynamic/Auto)" +msgstr "(动态识别/自动)" + +msgid "Configure local client listening ports and proxy modes. Transparent proxy (redir) handles smart split-routing automatically." +msgstr "配置客户端本地监听端口和代理模式。透明代理 (redir) 会自动配合智能分流进行流量转发。" + +msgid "Proxy mode: Transparent Proxy (redir) automatically routes traffic from iptables/nftables; Port Forward forwards local port to fixed server port; SOCKS5 provides local SOCKS5 proxy." +msgstr "代理模式:透明代理 (redir) 自动处理来自 iptables/nftables 智能分流的流量;端口转发将本地端口转至固定服务器端口;SOCKS5 提供本地 SOCKS5 代理。" + +msgid "Protocol to tunnel: TCP (accelerated KCP stream) or UDP (low-latency datagram forwarding, e.g. DNS)." +msgstr "加速协议:TCP(高速 KCP 流式加速)或 UDP(低延迟直发数据报文,如 DNS)。" + +msgid "Local Listen Port" +msgstr "本地监听端口" + +msgid "Local port on router to listen for traffic (e.g. 12345 for redir, 5353 for DNS)." +msgstr "路由器上监听流量的本地端口(例如 redir 透明代理使用 12345,DNS 加速使用 5353)。" + +msgid "Target Host (Port Forward only)" +msgstr "目标主机(仅限端口转发)" + +msgid "Destination host on the server side (default: 127.0.0.1). Leave empty for Transparent Proxy." +msgstr "远端服务器侧的目标主机(默认:127.0.0.1)。透明代理模式下留空。" + +msgid "Target Port (Port Forward only)" +msgstr "目标端口(仅限端口转发)" + +msgid "Destination port on the server side. Leave empty for Transparent Proxy." +msgstr "远端服务器侧的目标端口。透明代理模式下留空。" + +msgid "Pre-shared key for authentication. Must match the server." +msgstr "预共享身份验证密钥。必须与服务器一致。" + +msgid "Server Deployment AI Prompt" +msgstr "服务端 AI 部署指令(Prompt)" + +msgid "Chawrt only functions as the client. Copy this prompt directly to an AI assistant to automatically build and deploy the xkcptun dynamic gateway on your remote VPS." +msgstr "Chawrt 仅作为加速客户端运行。复制此指令直接发送给 AI 助手(Claude/ChatGPT/DeepSeek 等),即可在远端 Linux VPS 上自动编译并运行 xkcptun 动态加速网关。" + +msgid "📋 Copy Prompt for AI Deployment" +msgstr "📋 一键复制 AI 部署指令" + +msgid "Copied to Clipboard!" +msgstr "已成功复制到剪贴板!" + +msgid "Server deployment prompt copied to clipboard!" +msgstr "服务端部署指令已成功复制到剪贴板!" + +msgid "Paste this prompt to AI (Claude/ChatGPT/DeepSeek) on your VPS terminal." +msgstr "在远端 VPS 或 AI 终端中粘贴此指令,让 AI 自主完成编译部署。" + +msgid "Server AI Deployment" +msgstr "服务端 AI 部署指令" + +msgid "Server Configuration" +msgstr "服务端配置" + +msgid "Service Status" +msgstr "服务运行状态" + +msgid "Dynamic / Smart Route" +msgstr "动态智能分流" + +msgid "Target / Destination" +msgstr "目标后端" + +msgid "Enable or disable this client tunnel." +msgstr "启用或禁用此客户端隧道。" + +msgid "Local network interface to listen on (default: any)." +msgstr "本地监听的网络接口(默认:any 全部网络接口)。" + +msgid "Port Forward (UDP only)" +msgstr "端口转发 (仅支持 UDP)" + +msgid "UDP protocol in xkcptun only supports fixed-destination Port Forwarding (e.g. DNS tunnel)." +msgstr "xkcptun 的 UDP 协议仅支持固定目标的端口转发模式(如 DNS 隧道加速)。" + +msgid "Descriptive name for this tunnel (e.g. redir_tunnel, dns_tunnel)." +msgstr "此隧道的可选描述名称(例如 redir_tunnel、dns_tunnel)。" + +msgid "Protocol to tunnel: TCP (supports Transparent Proxy, Port Forward, SOCKS5) or UDP (Port Forward only, e.g. DNS)." +msgstr "隧道传输协议:TCP(支持透明代理、端口转发、SOCKS5)或 UDP(仅支持端口转发,如 DNS 加速)。" + +msgid "Proxy mode: Transparent Proxy (redir) automatically routes traffic from iptables/nftables/eBPF; Port Forward forwards local port to fixed server port; SOCKS5 provides local SOCKS5 proxy." +msgstr "代理类型:透明代理(redir)通过 iptables/nftables/eBPF 自动分流;端口转发将本地端口直接映射到远端固定服务;SOCKS5 提供标准本地 SOCKS5 代理。" + +msgid "Receive window size (number of packets). Default is 4096." +msgstr "接收窗口大小(数据包数量)。默认值为 4096。" + +msgid "Send window size (number of packets). Default is 4096." +msgstr "发送窗口大小(数据包数量)。默认值为 4096。" + +msgid "SOCKS5 Proxy" +msgstr "SOCKS5 代理" + diff --git a/mise/Makefile b/mise/Makefile index 487301ca6..790920ba9 100644 --- a/mise/Makefile +++ b/mise/Makefile @@ -14,8 +14,8 @@ MISE_HASH_x86_64:=3832f39c325e343f81fe3d92b2447c5d1a5eea1bc85092bb7b6c2580622264 MISE_HASH_aarch64:=06186cfbfe947049b21d58575fb0ea800cc26ed1375f20f4b678cb3a9d679437 PKG_NAME:=mise -PKG_VERSION:=2026.10.14 -PKG_RELEASE:=38 +PKG_VERSION:=2026.10.15 +PKG_RELEASE:=39 PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION)-linux-$(MISE_ARCH)-musl.tar.gz PKG_SOURCE_URL:=https://github.com/jdx/mise/releases/download/v$(PKG_VERSION)/ PKG_HASH:=skip diff --git a/xkcptun/Makefile b/xkcptun/Makefile index 3b20cdd9a..a826b2eba 100644 --- a/xkcptun/Makefile +++ b/xkcptun/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=xkcptun PKG_VERSION:=1.09.561 -PKG_RELEASE:=5 +PKG_RELEASE:=6 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/liudf0716/xkcptun/tar.gz/$(PKG_VERSION)? diff --git a/xkcptun/files/xkcptun.init b/xkcptun/files/xkcptun.init index 16b9e868c..3f05cb843 100644 --- a/xkcptun/files/xkcptun.init +++ b/xkcptun/files/xkcptun.init @@ -56,6 +56,16 @@ append_toml_tunnel() { [ "${enabled:-1}" -eq 1 ] || return 1 [ -n "$local_port" ] || return 1 + if [ "$proto" = "udp" ]; then + proxy_type="forward" + elif [ -z "$proxy_type" ]; then + if [ -n "$target_port" ]; then + proxy_type="forward" + else + proxy_type="redir" + fi + fi + cat << EOF >> "$outfile" [[tunnel]]