mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-10 18:34:18 +08:00
103 lines
3.6 KiB
Bash
Executable File
103 lines
3.6 KiB
Bash
Executable File
#!/bin/sh
|
|
. /usr/lib/hijpass/app-logger.sh
|
|
log_debug "$0"
|
|
|
|
GFW_FILE_PATH=$(uci -q get hijpass.@hijpass[0].gfw_list)
|
|
CHN_FILE_PATH=$(uci -q get hijpass.@hijpass[0].chn_list)
|
|
DOMAIN_PROXY_FILE_PATH=$(uci -q get hijpass.@hijpass[0].domain_proxy)
|
|
DOMAIN_DIRECT_FILE_PATH=$(uci -q get hijpass.@hijpass[0].domain_direct)
|
|
DIRECT_DNS=$(uci -q get hijpass.@dns[0].direct_dns)
|
|
PROXY_DNS=$(uci -q get hijpass.@dns[0].proxy_dns)
|
|
ENABLE_GFW=$(uci -q get hijpass.@dns[0].use_gfw)
|
|
ENABLE_CHN=$(uci -q get hijpass.@dns[0].use_chn)
|
|
CDG_PORT=$(uci -q get hijpass.@dns[0].cdg_port)
|
|
CHINADNS_NG_CONF="/etc/hijpass/chinadns-ng.conf"
|
|
GEOVIEW_SCRIPT="/usr/lib/hijpass/geoview.sh"
|
|
DOMAIN_PROXY_TEMP_FILE_PATH=/tmp/domain_proxy.tmp
|
|
DOMAIN_DIRECT_TEMP_FILE_PATH=/tmp/domain_direct.tmp
|
|
|
|
touch "$DOMAIN_PROXY_TEMP_FILE_PATH"
|
|
touch "$DOMAIN_DIRECT_TEMP_FILE_PATH"
|
|
|
|
if [ "$DIRECT_DNS" = "custom" ]; then
|
|
DIRECT_DNS="$(uci -q get hijpass.@dns[0].direct_dns_custom)"
|
|
fi
|
|
if [ "$DIRECT_DNS" = "dnsmasq" ] || [ "$DIRECT_DNS" = "system" ]; then
|
|
dnsmasq_port=$(uci -q get dhcp.@dnsmasq[0].port || echo "53")
|
|
DIRECT_DNS="127.0.0.1#${dnsmasq_port:-53}"
|
|
fi
|
|
if [ "$PROXY_DNS" = "custom" ]; then
|
|
PROXY_DNS="$(uci -q get hijpass.@dns[0].proxy_dns_custom)"
|
|
fi
|
|
if [ "$PROXY_DNS" = "dnsmasq" ] || [ "$PROXY_DNS" = "system" ]; then
|
|
dnsmasq_port=$(uci -q get dhcp.@dnsmasq[0].port || echo "53")
|
|
PROXY_DNS="127.0.0.1#${dnsmasq_port:-53}"
|
|
fi
|
|
proxy_domain_list="$([ -f "$DOMAIN_PROXY_FILE_PATH" ] && cat "$DOMAIN_PROXY_FILE_PATH" || :)"
|
|
geosite_proxy_lines=$(echo "$proxy_domain_list" | grep '^geosite:' | sed 's/^geosite://' | tr '\n' ',')
|
|
if [ -n "$geosite_proxy_lines" ]; then
|
|
geosite_proxy_domains=$($GEOVIEW_SCRIPT -e "geosite" "${geosite_proxy_lines%,}")
|
|
proxy_domain_list=$(echo "$proxy_domain_list" | grep -v '^geosite:')
|
|
proxy_domain_list="$proxy_domain_list
|
|
$geosite_proxy_domains"
|
|
fi
|
|
echo "$proxy_domain_list" > "$DOMAIN_PROXY_TEMP_FILE_PATH"
|
|
|
|
direct_domain_list="$([ -f "$DOMAIN_DIRECT_FILE_PATH" ] && cat "$DOMAIN_DIRECT_FILE_PATH" || :)"
|
|
geosite_direct_lines=$(echo "$direct_domain_list" | grep '^geosite:' | sed 's/^geosite://' | tr '\n' ',')
|
|
if [ -n "$geosite_direct_lines" ]; then
|
|
geosite_direct_domains=$($GEOVIEW_SCRIPT -e "geosite" "${geosite_direct_lines%,}")
|
|
direct_domain_list=$(echo "$direct_domain_list" | grep -v '^geosite:')
|
|
direct_domain_list="$direct_domain_list
|
|
$geosite_direct_domains"
|
|
fi
|
|
echo "$direct_domain_list" > "$DOMAIN_DIRECT_TEMP_FILE_PATH"
|
|
|
|
CONF="
|
|
# 监听地址和端口
|
|
bind-addr ::
|
|
bind-port $CDG_PORT
|
|
|
|
# 国内上游、可信上游
|
|
china-dns $DIRECT_DNS
|
|
trust-dns $PROXY_DNS
|
|
|
|
# 域名列表,用于分流
|
|
$([ "$ENABLE_CHN" = "1" ] && echo "chnlist-file $CHN_FILE_PATH")
|
|
$([ "$ENABLE_GFW" = "1" ] && echo "gfwlist-file $GFW_FILE_PATH")
|
|
|
|
$([ "$ENABLE_CHN" = "1" ] && [ "$ENABLE_GFW" != "1" ] && echo "default-tag gfw")
|
|
$([ "$ENABLE_GFW" = "1" ] && [ "$ENABLE_CHN" != "1" ] && echo "default-tag chn")
|
|
|
|
group userdirect
|
|
group-dnl $DOMAIN_DIRECT_TEMP_FILE_PATH
|
|
group-upstream $DIRECT_DNS
|
|
group-ipset inet@hijpass@dnsbypass4list,inet@hijpass@dnsbypass6list
|
|
|
|
group userproxy
|
|
group-dnl $DOMAIN_PROXY_TEMP_FILE_PATH
|
|
group-upstream $PROXY_DNS
|
|
group-ipset inet@hijpass@dnsproxy4list,inet@hijpass@dnsproxy6list
|
|
|
|
# 收集 tag:chn、tag:gfw 域名的 IP (可选)
|
|
add-tagchn-ip inet@hijpass@chn4list,inet@hijpass@chn6list
|
|
add-taggfw-ip inet@hijpass@gfw4list,inet@hijpass@gfw6list
|
|
|
|
# 测试 tag:none 域名的 IP (针对国内上游)
|
|
ipset-name4 inet@hijpass@chnroute4list
|
|
ipset-name6 inet@hijpass@chnroute6list
|
|
|
|
# dns 缓存
|
|
# cache 4096
|
|
# cache-stale 86400
|
|
# cache-refresh 20
|
|
|
|
# verdict 缓存 (用于 tag:none 域名)
|
|
verdict-cache 4096
|
|
|
|
# 详细日志
|
|
# verbose
|
|
"
|
|
|
|
echo "$CONF" >"$CHINADNS_NG_CONF"
|