update 2024-11-05 00:25:18

This commit is contained in:
kenzok8 2024-11-05 00:25:18 +08:00
parent e10eef8862
commit c9a45e6999
6 changed files with 188 additions and 152 deletions

View File

@ -208,9 +208,7 @@ $lang = $_GET['lang'] ?? 'en';
}
#ping-result {
font-size: 14px;
margin-left: 15px;
font-weight: 500;
font-weight: bold;
}
#d-ip {
@ -249,7 +247,6 @@ $lang = $_GET['lang'] ?? 'en';
display: none !important;
}
}
</style>
<?php if (in_array($lang, ['zh-cn', 'en', 'auto'])): ?>
<div id="status-bar-component" class="container-sm container-bg callout border">
@ -263,7 +260,7 @@ $lang = $_GET['lang'] ?? 'en';
<p id="d-ip" class="ip-address mb-0">Checking...</p>
<p id="ipip" class="info small mb-0"></p>
</div>
<div class="col-4 d-flex justify-content-center">
<div class="col text-center">
<p id="ping-result" class="mb-0"></p>
</div>
<div class="col-auto ms-auto">
@ -285,7 +282,7 @@ $lang = $_GET['lang'] ?? 'en';
<img src="./assets/neko/img/site_icon1_04.png" id="youtube-gray" class="status-icon">
</div>
<div class="site-icon mx-1" onclick="pingHost('github', 'GitHub')">
<img src="./assets/neko/img/site_icon_05.png" id="github-normal" class="status-icon" style="display: none;">
<img src="./assets/neko/img/site_icon_05.png" id="github-normal" title="测试 GitHub 延迟" class="status-icon" style="display: none;">
<img src="./assets/neko/img/site_icon1_05.png" id="github-gray" class="status-icon">
</div>
</div>
@ -333,7 +330,7 @@ async function pingHost(site, siteName) {
const resultElement = document.getElementById('ping-result');
try {
resultElement.innerHTML = `<span style="font-size: 18px">正在测试 ${siteName} 的连接延迟...`;
resultElement.innerHTML = `<span style="font-size: 22px">正在测试 ${siteName} 的连接延迟...`;
resultElement.style.color = '#87CEFA';
const startTime = performance.now();
await fetch(url, {
@ -342,7 +339,7 @@ async function pingHost(site, siteName) {
});
const endTime = performance.now();
const pingTime = Math.round(endTime - startTime);
resultElement.innerHTML = `<span style="font-size: 18px">${siteName} 连接延迟: ${pingTime}ms</span>`;
resultElement.innerHTML = `<span style="font-size: 22px">${siteName} 连接延迟: ${pingTime}ms</span>`;
if(pingTime <= 100) {
resultElement.style.color = '#09B63F';
} else if(pingTime <= 200) {
@ -351,7 +348,7 @@ async function pingHost(site, siteName) {
resultElement.style.color = '#ff6b6b';
}
} catch (error) {
resultElement.innerHTML = `<span style="font-size: 18px">${siteName} 连接超时`;
resultElement.innerHTML = `<span style="font-size: 22px">${siteName} 连接超时`;
resultElement.style.color = '#ff6b6b';
}
}
@ -417,7 +414,7 @@ let IP = {
const mergedData = {
...ipsbResp.data,
chinaIpInfo: chinaIpInfo
// chinaIpInfo: chinaIpInfo
};
IP.updateUI(mergedData, elID);
@ -452,7 +449,7 @@ let IP = {
let ipLocation = isChinaIP ?
'<span style="color: #00FF00;">[国内 IP]</span> ' :
'<span style="color: #FF0000;">[境外 IP]</span> ';
firstLineInfo += ipLocation;
// firstLineInfo += ipLocation;
if (data.chinaIpInfo) {
firstLineInfo += `[${data.chinaIpInfo}]`;

View File

@ -174,6 +174,12 @@ define Package/$(PKG_NAME)/conffiles
/www/luci-static/resources/qrcode.min.js
endef
define Package/$(PKG_NAME)/postrm
#!/bin/sh
rm -f $${IPKG_INSTROOT}/usr/share/passwall/rules/*.nft
exit 0
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View File

@ -544,141 +544,18 @@ run_dns2socks() {
run_chinadns_ng() {
local _flag _listen_port _dns_local _dns_trust _no_ipv6_trust _use_direct_list _use_proxy_list _gfwlist _chnlist _default_mode _default_tag
local _extra_param=""
eval_set_val $@
lua $APP_PATH/helper_chinadns_add.lua -FLAG $_flag -USE_DIRECT_LIST $_use_direct_list -USE_PROXY_LIST $_use_proxy_list
local _CONF_FILE=$TMP_ACL_PATH/$_flag/chinadns_ng.conf
local _LOG_FILE=$TMP_ACL_PATH/$_flag/chinadns_ng.log
_LOG_FILE="/dev/null"
cat <<-EOF > ${_CONF_FILE}
verbose
bind-addr 127.0.0.1
bind-port ${_listen_port}
china-dns ${_dns_local}
trust-dns ${_dns_trust}
filter-qtype 65
EOF
# This function may be called multiple times, so add a condition here to avoid repeated execution.
[ ! -f "${TMP_PATH}/vpslist" ] && {
servers=$(uci show "${CONFIG}" | grep ".address=" | cut -d "'" -f 2 | grep -v "engage.cloudflareclient.com")
hosts_foreach "servers" host_from_url | grep '[a-zA-Z]$' | sort -u > "${TMP_PATH}/vpslist"
}
[ -s "${TMP_PATH}/vpslist" ] && {
local vpslist4_set="passwall_vpslist"
local vpslist6_set="passwall_vpslist6"
[ "$nftflag" = "1" ] && {
vpslist4_set="inet@passwall@${vpslist4_set}"
vpslist6_set="inet@passwall@${vpslist6_set}"
}
cat <<-EOF >> ${_CONF_FILE}
group vpslist
group-dnl ${TMP_PATH}/vpslist
group-upstream ${_dns_local}
group-ipset ${vpslist4_set},${vpslist6_set}
EOF
}
[ "${_use_direct_list}" = "1" ] && [ -s "${TMP_PATH}/direct_host" ] && {
local whitelist4_set="passwall_whitelist"
local whitelist6_set="passwall_whitelist6"
[ "$nftflag" = "1" ] && {
whitelist4_set="inet@passwall@${whitelist4_set}"
whitelist6_set="inet@passwall@${whitelist6_set}"
}
cat <<-EOF >> ${_CONF_FILE}
group directlist
group-dnl ${TMP_PATH}/direct_host
group-upstream ${_dns_local}
group-ipset ${whitelist4_set},${whitelist6_set}
EOF
}
[ "${_use_proxy_list}" = "1" ] && [ -s "${TMP_PATH}/proxy_host" ] && {
local blacklist4_set="passwall_blacklist"
local blacklist6_set="passwall_blacklist6"
[ "$nftflag" = "1" ] && {
blacklist4_set="inet@passwall@${blacklist4_set}"
blacklist6_set="inet@passwall@${blacklist6_set}"
}
cat <<-EOF >> ${_CONF_FILE}
group proxylist
group-dnl ${TMP_PATH}/proxy_host
group-upstream ${_dns_trust}
group-ipset ${blacklist4_set},${blacklist6_set}
EOF
[ "${_no_ipv6_trust}" = "1" ] && echo "no-ipv6 tag:proxylist" >> ${_CONF_FILE}
}
[ "${_gfwlist}" = "1" ] && [ -s "${RULES_PATH}/gfwlist" ] && {
local gfwlist4_set="passwall_gfwlist"
local gfwlist6_set="passwall_gfwlist6"
[ "$nftflag" = "1" ] && {
gfwlist4_set="inet@passwall@${gfwlist4_set}"
gfwlist6_set="inet@passwall@${gfwlist6_set}"
}
cat <<-EOF >> ${_CONF_FILE}
gfwlist-file ${RULES_PATH}/gfwlist
add-taggfw-ip ${gfwlist4_set},${gfwlist6_set}
EOF
[ "${_no_ipv6_trust}" = "1" ] && echo "no-ipv6 tag:gfw" >> ${_CONF_FILE}
}
[ "${_chnlist}" != "0" ] && [ -s "${RULES_PATH}/chnlist" ] && {
local chnroute4_set="passwall_chnroute"
local chnroute6_set="passwall_chnroute6"
[ "$nftflag" = "1" ] && {
chnroute4_set="inet@passwall@${chnroute4_set}"
chnroute6_set="inet@passwall@${chnroute6_set}"
}
[ "${_chnlist}" = "direct" ] && {
cat <<-EOF >> ${_CONF_FILE}
chnlist-file ${RULES_PATH}/chnlist
ipset-name4 ${chnroute4_set}
ipset-name6 ${chnroute6_set}
add-tagchn-ip
chnlist-first
EOF
}
#回中国模式
[ "${_chnlist}" = "proxy" ] && {
cat <<-EOF >> ${_CONF_FILE}
group chn_proxy
group-dnl ${RULES_PATH}/chnlist
group-upstream ${_dns_trust}
group-ipset ${chnroute4_set},${chnroute6_set}
EOF
[ "${_no_ipv6_trust}" = "1" ] && echo "no-ipv6 tag:chn_proxy" >> ${_CONF_FILE}
}
}
#只使用gfwlist模式GFW列表以外的域名及默认使用本地DNS
[ "${_gfwlist}" = "1" ] && [ "${_chnlist}" = "0" ] && _default_tag="chn"
#回中国模式中国列表以外的域名及默认使用本地DNS
[ "${_chnlist}" = "proxy" ] && _default_tag="chn"
#全局模式默认使用远程DNS
[ "${_default_mode}" = "proxy" ] && [ "${_chnlist}" = "0" ] && [ "${_gfwlist}" = "0" ] && {
_default_tag="gfw"
[ "${_no_ipv6_trust}" = "1" ] && echo "no-ipv6" >> ${_CONF_FILE}
}
# 是否接受直连 DNS 空响应
[ "${_default_tag}" = "none_noip" ] && echo "noip-as-chnip" >> ${_CONF_FILE}
([ -z "${_default_tag}" ] || [ "${_default_tag}" = "smart" ] || [ "${_default_tag}" = "none_noip" ]) && _default_tag="none"
echo "default-tag ${_default_tag}" >> ${_CONF_FILE}
echo "cache 4096" >> ${_CONF_FILE}
echo "cache-stale 3600" >> ${_CONF_FILE}
[ "${_flag}" = "default" ] && [ "${_default_tag}" = "none" ] && {
echo "verdict-cache 5000" >> ${_CONF_FILE}
}
_extra_param="-FLAG ${_flag} -LISTEN_PORT ${_listen_port} -DNS_LOCAL ${_dns_local} -DNS_TRUST ${_dns_trust}"
_extra_param="${_extra_param} -USE_DIRECT_LIST ${_use_direct_list} -USE_PROXY_LIST ${_use_proxy_list} -GFWLIST ${_gfwlist} -CHNLIST ${_chnlist}"
_extra_param="${_extra_param} -NO_IPV6_TRUST ${_no_ipv6_trust} -DEFAULT_MODE ${_default_mode} -DEFAULT_TAG ${_default_tag} -NFTFLAG ${nftflag}"
lua $APP_PATH/helper_chinadns_add.lua ${_extra_param} > ${_CONF_FILE}
ln_run "$(first_type chinadns-ng)" chinadns-ng "${_LOG_FILE}" -C ${_CONF_FILE}
}

View File

@ -1,50 +1,206 @@
require 'nixio'
local sys = require "luci.sys"
local api = require "luci.passwall.api"
local appname = "passwall"
local var = api.get_args(arg)
local FLAG = var["-FLAG"]
local LISTEN_PORT = var["-LISTEN_PORT"]
local DNS_LOCAL = var["-DNS_LOCAL"]
local DNS_TRUST = var["-DNS_TRUST"]
local USE_DIRECT_LIST = var["-USE_DIRECT_LIST"]
local USE_PROXY_LIST = var["-USE_PROXY_LIST"]
local GFWLIST = var["-GFWLIST"]
local CHNLIST = var["-CHNLIST"]
local NO_IPV6_TRUST = var["-NO_IPV6_TRUST"]
local DEFAULT_MODE = var["-DEFAULT_MODE"]
local DEFAULT_TAG = var["-DEFAULT_TAG"]
local NFTFLAG = var["-NFTFLAG"]
local uci = api.uci
local sys = api.sys
local fs = api.fs
local datatypes = api.datatypes
local TMP_PATH = "/tmp/etc/" .. appname
local TMP_ACL_PATH = TMP_PATH .. "/acl"
local RULES_PATH = "/usr/share/" .. appname .. "/rules"
local config_lines = {}
local tmp_lines = {}
if not nixio.fs.access(TMP_PATH) then
nixio.fs.mkdir(TMP_PATH, 493)
local function is_file_nonzero(path)
if path and #path > 1 then
if sys.exec('[ -s "%s" ] && echo -n 1' % path) == "1" then
return true
end
end
return nil
end
local tmp_direct_host = TMP_PATH .. "/direct_host"
if USE_DIRECT_LIST == "1" and not nixio.fs.access(tmp_direct_host) then
local function merge_array(lines1, lines2)
for i, line in ipairs(lines2) do
table.insert(lines1, #lines1 + 1, line)
end
end
if not fs.access(TMP_ACL_PATH) then
fs.mkdir(TMP_ACL_PATH, 493)
end
local setflag= (NFTFLAG == "1") and "inet@passwall@" or ""
config_lines = {
--"verbose",
"bind-addr 127.0.0.1",
"bind-port " .. LISTEN_PORT,
"china-dns " .. DNS_LOCAL,
"trust-dns " .. DNS_TRUST,
"filter-qtype 65"
}
--始终用国内DNS解析节点域名
local file_vpslist = TMP_ACL_PATH .. "/vpslist"
if not is_file_nonzero(file_vpslist) then
local vpslist_out = io.open(file_vpslist, "w")
uci:foreach(appname, "nodes", function(t)
local address = t.address
if address == "engage.cloudflareclient.com" then return end
if datatypes.hostname(address) then
vpslist_out:write(address .. "\n")
end
end)
vpslist_out:close()
end
if is_file_nonzero(file_vpslist) then
tmp_lines = {
"group vpslist",
"group-dnl " .. file_vpslist,
"group-upstream " .. DNS_LOCAL,
"group-ipset " .. setflag .. "passwall_vpslist," .. setflag .. "passwall_vpslist6"
}
merge_array(config_lines, tmp_lines)
end
--直连(白名单)列表
local file_direct_host = TMP_ACL_PATH .. "/direct_host"
if USE_DIRECT_LIST == "1" and not fs.access(file_direct_host) then --对自定义列表进行清洗
local direct_domain = {}
for line in io.lines("/usr/share/passwall/rules/direct_host") do
for line in io.lines(RULES_PATH .. "/direct_host") do
line = api.get_std_domain(line)
if line ~= "" and not line:find("#") then
table.insert(direct_domain, line)
end
end
if #direct_domain > 0 then
local direct_out = io.open(tmp_direct_host, "a")
local direct_out = io.open(file_direct_host, "w")
for i = 1, #direct_domain do
direct_out:write(direct_domain[i] .. "\n")
end
direct_out:close()
end
end
if USE_DIRECT_LIST == "1" and is_file_nonzero(file_direct_host) then
tmp_lines = {
"group directlist",
"group-dnl " .. file_direct_host,
"group-upstream " .. DNS_LOCAL,
"group-ipset " .. setflag .. "passwall_whitelist," .. setflag .. "passwall_whitelist6"
}
merge_array(config_lines, tmp_lines)
end
local tmp_proxy_host = TMP_PATH .. "/proxy_host"
if USE_PROXY_LIST == "1" and not nixio.fs.access(tmp_proxy_host) then
--代理(黑名单)列表
local file_proxy_host = TMP_ACL_PATH .. "/proxy_host"
if USE_PROXY_LIST == "1" and not fs.access(file_proxy_host) then --对自定义列表进行清洗
local proxy_domain = {}
for line in io.lines("/usr/share/passwall/rules/proxy_host") do
for line in io.lines(RULES_PATH .. "/proxy_host") do
line = api.get_std_domain(line)
if line ~= "" and not line:find("#") then
table.insert(proxy_domain, line)
end
end
if #proxy_domain > 0 then
local proxy_out = io.open(tmp_proxy_host, "a")
local proxy_out = io.open(file_proxy_host, "w")
for i = 1, #proxy_domain do
proxy_out:write(proxy_domain[i] .. "\n")
end
proxy_out:close()
end
end
if USE_PROXY_LIST == "1" and is_file_nonzero(file_proxy_host) then
tmp_lines = {
"group proxylist",
"group-dnl " .. file_proxy_host,
"group-upstream " .. DNS_TRUST,
"group-ipset " .. setflag .. "passwall_blacklist," .. setflag .. "passwall_blacklist6"
}
merge_array(config_lines, tmp_lines)
if NO_IPV6_TRUST == "1" then table.insert(config_lines, "no-ipv6 tag:proxylist") end
end
--GFW列表
if GFWLIST == "1" and is_file_nonzero(RULES_PATH .. "/gfwlist") then
tmp_lines = {
"gfwlist-file " .. RULES_PATH .. "/gfwlist",
"add-taggfw-ip " .. setflag .. "passwall_gfwlist," .. setflag .. "passwall_gfwlist6"
}
merge_array(config_lines, tmp_lines)
if NO_IPV6_TRUST == "1" then table.insert(config_lines, "no-ipv6 tag:gfw") end
end
--中国列表
if CHNLIST ~= "0" and is_file_nonzero(RULES_PATH .. "/chnlist") then
if CHNLIST == "direct" then
tmp_lines = {
"chnlist-file " .. RULES_PATH .. "/chnlist",
"ipset-name4 " .. setflag .. "passwall_chnroute",
"ipset-name6 " .. setflag .. "passwall_chnroute6",
"add-tagchn-ip",
"chnlist-first"
}
merge_array(config_lines, tmp_lines)
end
--回中国模式
if CHNLIST == "proxy" then
tmp_lines = {
"group chn_proxy",
"group-dnl " .. RULES_PATH .. "/chnlist",
"group-upstream " .. DNS_TRUST,
"group-ipset " .. setflag .. "passwall_chnroute," .. setflag .. "passwall_chnroute6"
}
merge_array(config_lines, tmp_lines)
if NO_IPV6_TRUST == "1" then table.insert(config_lines, "no-ipv6 tag:chn_proxy") end
end
end
--只使用gfwlist模式GFW列表以外的域名及默认使用本地DNS
if GFWLIST == "1" and CHNLIST == "0" then DEFAULT_TAG = "chn" end
--回中国模式中国列表以外的域名及默认使用本地DNS
if CHNLIST == "proxy" then DEFAULT_TAG = "chn" end
--全局模式默认使用远程DNS
if DEFAULT_MODE == "proxy" and CHNLIST == "0" and GFWLIST == "0" then
DEFAULT_TAG = "gfw"
if NO_IPV6_TRUST == "1" then table.insert(config_lines, "no-ipv6") end
end
--是否接受直连 DNS 空响应
if DEFAULT_TAG == "none_noip" then table.insert(config_lines, "noip-as-chnip") end
if DEFAULT_TAG == nil or DEFAULT_TAG == "smart" or DEFAULT_TAG == "none_noip" then DEFAULT_TAG = "none" end
table.insert(config_lines, "default-tag " .. DEFAULT_TAG)
table.insert(config_lines, "cache 4096")
table.insert(config_lines, "cache-stale 3600")
if DEFAULT_TAG == "none" then
table.insert(config_lines, "verdict-cache 5000")
end
--输出配置文件
if #config_lines > 0 then
for i = 1, #config_lines do
print(config_lines[i])
end
end

View File

@ -103,7 +103,6 @@ ipset_r() {
$IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN
$IPT -A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW
$IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW
$IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW
;;
oversea)
ipset -N oversea hash:net 2>/dev/null

View File

@ -324,7 +324,8 @@ if xray_fragment.fragment ~= "0" or (xray_fragment.noise ~= "0" and xray_noise.e
},
streamSettings = {
sockopt = {
tcpNoDelay = true
tcpMptcp = (server.mptcp == "1") and true or false, -- MPTCP
tcpNoDelay = (server.mptcp == "1") and true or false -- MPTCP
}
}
})