Update On Thu Aug 21 20:41:19 CEST 2025

This commit is contained in:
github-action[bot]
2025-08-21 20:41:19 +02:00
parent ca42e1b16e
commit 7d88eac7d4
76 changed files with 1126 additions and 678 deletions

View File

@@ -861,8 +861,8 @@ return view.extend({
so = ss.taboption('direct_list', hm.TextValue, 'direct_list.yaml', null);
so.rows = 20;
so.default = 'FQDN:\nIPCIDR:\nIPCIDR6:\n';
so.placeholder = "FQDN:\n- mask.icloud.com\n- mask-h2.icloud.com\n- mask.apple-dns.net\nIPCIDR:\n- '223.0.0.0/12'\nIPCIDR6:\n- '2400:3200::/32'\n";
so.default = 'DOMAIN:\nIPCIDR:\nIPCIDR6:\n';
so.placeholder = "DOMAIN:\n- mask.icloud.com\n- mask-h2.icloud.com\n- mask.apple-dns.net\nIPCIDR:\n- '223.0.0.0/12'\nIPCIDR6:\n- '2400:3200::/32'\n";
so.load = function(section_id) {
return L.resolveDefault(hm.readFile('resources', this.option), '');
}
@@ -879,8 +879,8 @@ return view.extend({
so = ss.taboption('proxy_list', hm.TextValue, 'proxy_list.yaml', null);
so.rows = 20;
so.default = 'FQDN:\nIPCIDR:\nIPCIDR6:\n';
so.placeholder = "FQDN:\n- www.google.com\nIPCIDR:\n- '91.105.192.0/23'\nIPCIDR6:\n- '2001:67c:4e8::/48'\n";
so.default = 'DOMAIN:\nIPCIDR:\nIPCIDR6:\n';
so.placeholder = "DOMAIN:\n- www.google.com\n- '.googlevideo.com'\n- google.com\nIPCIDR:\n- '91.105.192.0/23'\nIPCIDR6:\n- '2001:67c:4e8::/48'\n";
so.load = function(section_id) {
return L.resolveDefault(hm.readFile('resources', this.option), '');
}

View File

@@ -186,7 +186,7 @@ start_service() {
local yaml="$5"
if [ -n "$yaml" ]; then
yq '.[] |= with(select(. == null); . = []) | .FQDN[]' "$src" | \
yq '.[] |= with(select(. == null); . = []) | .DOMAIN[]' "$src" | \
sed "s|^|nftset=/|;s|$|/${family}#inet#fchomo#${set_name}|" > "$dst"
else
sed "s|^|nftset=/|;s|$|/${family}#inet#fchomo#${set_name}|" "$src" > "$dst"

View File

@@ -14,7 +14,7 @@ fi
# Initialize the default direct list
if [ ! -s "/etc/fchomo/resources/direct_list.yaml" ]; then
cat <<- EOF > "/etc/fchomo/resources/direct_list.yaml"
FQDN:
DOMAIN:
IPCIDR:
- '223.0.0.0/12'
IPCIDR6:
@@ -25,8 +25,10 @@ fi
# Initialize the default proxy list
if [ ! -s "/etc/fchomo/resources/proxy_list.yaml" ]; then
cat <<- EOF > "/etc/fchomo/resources/proxy_list.yaml"
FQDN:
DOMAIN:
- www.google.com
- '.googlevideo.com'
- google.com
IPCIDR:
- '91.105.192.0/23'
- '91.108.4.0/22'

View File

@@ -1,5 +1,8 @@
#!/bin/sh
sed -i 's|^FQDN:$|DOMAIN:|' "/etc/fchomo/resources/direct_list.yaml"
sed -i 's|^FQDN:$|DOMAIN:|' "/etc/fchomo/resources/proxy_list.yaml"
default_proxy=$(uci -q get fchomo.routing.default_proxy)
if [ -n "$default_proxy" ]; then
uci -q batch <<-EOF >"/dev/null"

View File

@@ -107,6 +107,9 @@ return baseclass.extend({
const profile = await callNikkiProfile({ 'external-controller': null, 'secret': null });
const apiListen = profile['external-controller'];
const apiSecret = profile['secret'] ?? '';
if (!apiListen) {
return Promise.reject('API has not been configured');
}
const apiPort = apiListen.substring(apiListen.lastIndexOf(':') + 1);
const url = `http://${window.location.hostname}:${apiPort}${path}`;
return request.request(url, {
@@ -114,7 +117,7 @@ return baseclass.extend({
headers: { 'Authorization': `Bearer ${apiSecret}` },
query: query,
content: body
})
});
},
openDashboard: async function () {
@@ -122,6 +125,9 @@ return baseclass.extend({
const uiName = profile['external-ui-name'];
const apiListen = profile['external-controller'];
const apiSecret = profile['secret'] ?? '';
if (!apiListen) {
return Promise.reject('API has not been configured');
}
const apiPort = apiListen.substring(apiListen.lastIndexOf(':') + 1);
const params = {
host: window.location.hostname,
@@ -137,6 +143,7 @@ return baseclass.extend({
url = `http://${window.location.hostname}:${apiPort}/ui/?${query}`;
}
setTimeout(function () { window.open(url, '_blank') }, 0);
return Promise.resolve();
},
updateDashboard: function () {

View File

@@ -58,7 +58,8 @@ for k, e in ipairs(api.get_valid_nodes()) do
nodes_table[#nodes_table + 1] = {
id = e[".name"],
remark = e["remark"],
type = e["type"]
type = e["type"],
chain_proxy = e["chain_proxy"]
}
end
if e.protocol == "_balancing" then
@@ -696,7 +697,7 @@ o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Onl
o:depends({ [_n("chain_proxy")] = "2" })
for k, v in pairs(nodes_table) do
if v.type == "Xray" and v.id ~= arg[1] then
if v.type == "Xray" and v.id ~= arg[1] and (not v.chain_proxy or v.chain_proxy == "") then
s.fields[_n("preproxy_node")]:value(v.id, v.remark)
s.fields[_n("to_node")]:value(v.id, v.remark)
end

View File

@@ -75,7 +75,8 @@ for k, e in ipairs(api.get_valid_nodes()) do
nodes_table[#nodes_table + 1] = {
id = e[".name"],
remark = e["remark"],
type = e["type"]
type = e["type"],
chain_proxy = e["chain_proxy"]
}
end
if e.protocol == "_iface" then
@@ -753,7 +754,7 @@ o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Onl
o:depends({ [_n("chain_proxy")] = "2" })
for k, v in pairs(nodes_table) do
if v.type == "sing-box" and v.id ~= arg[1] then
if v.type == "sing-box" and v.id ~= arg[1] and (not v.chain_proxy or v.chain_proxy == "") then
s.fields[_n("preproxy_node")]:value(v.id, v.remark)
s.fields[_n("to_node")]:value(v.id, v.remark)
end

View File

@@ -38,11 +38,13 @@ config mixin 'mixin'
option 'redir_port' '7891'
option 'tproxy_port' '7892'
option 'authentication' '1'
option 'tun_enabled' '1'
option 'tun_device' 'nikki'
option 'tun_stack' 'mixed'
option 'tun_dns_hijack' '0'
list 'tun_dns_hijacks' 'tcp://any:53'
list 'tun_dns_hijacks' 'udp://any:53'
option 'dns_enabled' '1'
option 'dns_listen' '[::]:1053'
option 'dns_ipv6' '1'
option 'dns_mode' 'fake-ip'

View File

@@ -6,12 +6,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=sing-box
PKG_VERSION:=1.12.2
PKG_VERSION:=1.12.3
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=95d902c008ed0b414ab29408dc565310fffe435a15753e02d10ca5c8e6837ce5
PKG_HASH:=3dce8ee383655908451f7f193714f0c8f90b8fd4baecb8e7e3948d263d766359
PKG_LICENSE:=GPL-3.0-or-later
PKG_LICENSE_FILES:=LICENSE

View File

@@ -21,13 +21,13 @@ define Download/geoip
HASH:=54761d8691a5756fdb08d2cd4d0a9c889dbaab786e1cf758592e09fb00377f53
endef
GEOSITE_VER:=20250820044243
GEOSITE_VER:=20250821075639
GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER)
define Download/geosite
URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/
URL_FILE:=dlc.dat
FILE:=$(GEOSITE_FILE)
HASH:=08eaf7b6e93ff4422eac2919673ec53f5840643ab318e891981e0f3bd51100f9
HASH:=b35fcc137b86b4db2ef23919a05c7f90267dc4783186b4e416ff10213cc62ff5
endef
GEOSITE_IRAN_VER:=202508180044