Skip to content

Commit 789e5ed

Browse files
committed
Modify DNS strategy logic to use ping for detecting IPv4 and IPv6 network connectivity.
1 parent ade20bb commit 789e5ed

2 files changed

Lines changed: 56 additions & 31 deletions

File tree

docker_init.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,7 @@ vless://${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&sni=addons.
10951095

10961096
# 生成 Sing-box 订阅文件
10971097
[ "${XTLS_REALITY}" = 'true' ] &&
1098-
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME} xtls-reality\", \"server\":\"${SERVER_IP}\", \"server_port\":${PORT_XTLS_REALITY}, \"uuid\":\"${UUID}\", \"flow\":\"\", \"packet_encoding\":\"xudp\", \"tls\":{ \"enabled\":true, \"server_name\":\"addons.mozilla.org\", \"utls\":{ \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC}\", \"short_id\":\"\" } }, \"multiplex\": { \"enabled\": true, \"protocol\": \"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":true, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
1098+
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME} xtls-reality\", \"server\":\"${SERVER_IP}\", \"server_port\":${PORT_XTLS_REALITY}, \"uuid\":\"${UUID}\", \"flow\":\"\", \"packet_encoding\":\"none\", \"tls\":{ \"enabled\":true, \"server_name\":\"addons.mozilla.org\", \"utls\":{ \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC}\", \"short_id\":\"\" } }, \"multiplex\": { \"enabled\": true, \"protocol\": \"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":true, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
10991099
local NODE_REPLACE+="\"${NODE_NAME} xtls-reality\","
11001100

11011101
if [ "${HYSTERIA2}" = 'true' ]; then
@@ -1129,11 +1129,11 @@ vless://${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&sni=addons.
11291129
local NODE_REPLACE+="\"${NODE_NAME} vless-ws-tls\","
11301130

11311131
[ "${H2_REALITY}" = 'true' ] &&
1132-
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME} h2-reality\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_H2_REALITY}, \"uuid\":\"${UUID}\", \"tls\": { \"enabled\":true, \"server_name\":\"addons.mozilla.org\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC}\", \"short_id\":\"\" } }, \"packet_encoding\": \"xudp\", \"transport\": { \"type\": \"http\" } }," &&
1132+
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME} h2-reality\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_H2_REALITY}, \"uuid\":\"${UUID}\", \"tls\": { \"enabled\":true, \"server_name\":\"addons.mozilla.org\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC}\", \"short_id\":\"\" } }, \"packet_encoding\": \"none\", \"transport\": { \"type\": \"http\" } }," &&
11331133
local NODE_REPLACE+="\"${NODE_NAME} h2-reality\","
11341134

11351135
[ "${GRPC_REALITY}" = 'true' ] &&
1136-
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME} grpc-reality\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_GRPC_REALITY}, \"uuid\":\"${UUID}\", \"tls\": { \"enabled\":true, \"server_name\":\"addons.mozilla.org\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC}\", \"short_id\":\"\" } }, \"packet_encoding\": \"xudp\", \"transport\": { \"type\": \"grpc\", \"service_name\": \"grpc\" } }," &&
1136+
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME} grpc-reality\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_GRPC_REALITY}, \"uuid\":\"${UUID}\", \"tls\": { \"enabled\":true, \"server_name\":\"addons.mozilla.org\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC}\", \"short_id\":\"\" } }, \"packet_encoding\": \"none\", \"transport\": { \"type\": \"grpc\", \"service_name\": \"grpc\" } }," &&
11371137
local NODE_REPLACE+="\"${NODE_NAME} grpc-reality\","
11381138

11391139
[ "${ANYTLS}" = 'true' ] &&

sing-box.sh

Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env bash
22

33
# 当前脚本版本号
4-
VERSION='v1.2.17 (2025.07.12)'
4+
VERSION='v1.2.17 (2025.07.16)'
55

66
# 各变量默认值
77
GH_PROXY='gh-proxy.com/'
@@ -988,13 +988,6 @@ sing-box_variables() {
988988
SERVER_IP=${SERVER_IP:-"$SERVER_IP_DEFAULT"} && WS_SERVER_IP_SHOW=$SERVER_IP
989989
[ -z "$SERVER_IP" ] && error " $(text 47) "
990990

991-
# 根据服务 IP,使用不同的 warp 配置
992-
if [[ "$SERVER_IP" =~ : ]]; then
993-
STRATEGY=prefer_ipv6
994-
else
995-
STRATEGY=ipv4_only
996-
fi
997-
998991
# 检测是否解锁 chatGPT
999992
CHATGPT_OUT=warp-ep;
1000993
[ "$(check_chatgpt $(grep -oE '[46]' <<< "$STRATEGY"))" = 'unlock' ] && CHATGPT_OUT=direct
@@ -1075,8 +1068,9 @@ check_dependencies() {
10751068
fi
10761069

10771070
# 检测 Linux 系统的依赖,升级库并重新安装依赖
1078-
local DEPS_CHECK=("wget" "tar" "ip" "bash" "openssl")
1079-
local DEPS_INSTALL=("wget" "tar" "iproute2" "bash" "openssl")
1071+
local DEPS_INSTALL=("wget" "tar" "iproute2" "iproute2" "bash" "openssl" "ping")
1072+
local DEPS_CHECK=("wget" "tar" "ss" "ip" "bash" "openssl" "iputils-ping")
1073+
10801074
[ "$SYSTEM" != 'Alpine' ] && DEPS_CHECK+=("systemctl") && DEPS_INSTALL+=("systemctl")
10811075
for g in "${!DEPS_CHECK[@]}"; do
10821076
[ ! -x "$(type -p ${DEPS_CHECK[g]})" ] && DEPS+=(${DEPS_INSTALL[g]})
@@ -1092,7 +1086,8 @@ check_dependencies() {
10921086
[ ! -x "$(type -p ip6tables)" ] && DEPS+=(ip6tables)
10931087
fi
10941088

1095-
# 如需要安装的依赖大于0,就更新库并安装
1089+
# 先 DEPS 去重,如需要安装的依赖大于0,就更新库并安装
1090+
DEPS=($(echo "${DEPS[@]}" | tr ' ' '\n' | awk '!a[$0]++'))
10961091
if [[ "${#DEPS[@]}" > 0 ]]; then
10971092
[[ ! "$SYSTEM" =~ Alpine|CentOS ]] && ${PACKAGE_UPDATE[int]} >/dev/null 2>&1
10981093
${PACKAGE_INSTALL[int]} ${DEPS[@]} >/dev/null 2>&1
@@ -1323,8 +1318,38 @@ sing-box_json() {
13231318
else
13241319
DIR=$TEMP_DIR
13251320

1326-
# 生成 log 配置
1327-
cat > ${WORK_DIR}/conf/00_log.json << EOF
1321+
# 根据 IPv4 和 IPv6 的网络状态,使不同的 DNS 策略
1322+
[ -x "$(type -p ping)" ] && for i in {1..3}; do
1323+
ping -c 1 -W 1 "151.101.1.91" &>/dev/null && local IS_IPV4=is_ipv4 && break
1324+
done
1325+
1326+
if [ -x "$(type -p ping6)" ]; then
1327+
for i in {1..3}; do
1328+
ping6 -c 1 -W 1 "2a04:4e42:200::347" &>/dev/null && local IS_IPV6=is_ipv6 && break
1329+
done
1330+
elif [ -x "$(type -p ping)" ]; then
1331+
for i in {1..3}; do
1332+
ping -c 1 -W 1 "2a04:4e42:200::347" &>/dev/null && local IS_IPV6=is_ipv6 && break
1333+
done
1334+
fi
1335+
1336+
case "${IS_IPV4}@${IS_IPV6}" in
1337+
is_ipv4@is_ipv6)
1338+
local STRATEGY=prefer_ipv4
1339+
;;
1340+
is_ipv4@)
1341+
local STRATEGY=ipv4_only
1342+
;;
1343+
@is_ipv6)
1344+
local STRATEGY=ipv6_only
1345+
;;
1346+
*)
1347+
local STRATEGY=prefer_ipv4
1348+
;;
1349+
esac
1350+
1351+
# 生成 log 配置
1352+
cat > ${WORK_DIR}/conf/00_log.json << EOF
13281353
{
13291354
"log":{
13301355
"disabled":false,
@@ -1335,8 +1360,8 @@ sing-box_json() {
13351360
}
13361361
EOF
13371362

1338-
# 生成 outbound 配置
1339-
cat > ${WORK_DIR}/conf/01_outbounds.json << EOF
1363+
# 生成 outbound 配置
1364+
cat > ${WORK_DIR}/conf/01_outbounds.json << EOF
13401365
{
13411366
"outbounds":[
13421367
{
@@ -1347,8 +1372,8 @@ EOF
13471372
}
13481373
EOF
13491374

1350-
# 生成 endpoint 配置
1351-
cat > ${WORK_DIR}/conf/02_endpoints.json << EOF
1375+
# 生成 endpoint 配置
1376+
cat > ${WORK_DIR}/conf/02_endpoints.json << EOF
13521377
{
13531378
"endpoints":[
13541379
{
@@ -1381,8 +1406,8 @@ EOF
13811406
}
13821407
EOF
13831408

1384-
# 生成 route 配置
1385-
cat > ${WORK_DIR}/conf/03_route.json << EOF
1409+
# 生成 route 配置
1410+
cat > ${WORK_DIR}/conf/03_route.json << EOF
13861411
{
13871412
"route":{
13881413
"rule_set":[
@@ -1425,8 +1450,8 @@ EOF
14251450
}
14261451
EOF
14271452

1428-
# 生成缓存文件
1429-
cat > ${WORK_DIR}/conf/04_experimental.json << EOF
1453+
# 生成缓存文件
1454+
cat > ${WORK_DIR}/conf/04_experimental.json << EOF
14301455
{
14311456
"experimental": {
14321457
"cache_file": {
@@ -1437,8 +1462,8 @@ EOF
14371462
}
14381463
EOF
14391464

1440-
# 生成 dns 配置文件
1441-
cat > ${WORK_DIR}/conf/05_dns.json << EOF
1465+
# 生成 dns 配置文件
1466+
cat > ${WORK_DIR}/conf/05_dns.json << EOF
14421467
{
14431468
"dns":{
14441469
"servers":[
@@ -1451,8 +1476,8 @@ EOF
14511476
}
14521477
EOF
14531478

1454-
# 内建的 NTP 客户端服务配置文件,这对于无法进行时间同步的环境很有用
1455-
cat > ${WORK_DIR}/conf/06_ntp.json << EOF
1479+
# 内建的 NTP 客户端服务配置文件,这对于无法进行时间同步的环境很有用
1480+
cat > ${WORK_DIR}/conf/06_ntp.json << EOF
14561481
{
14571482
"ntp": {
14581483
"enabled": true,
@@ -2665,7 +2690,7 @@ anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME[21]}%
26652690

26662691
# 生成 Sing-box 订阅文件
26672692
[ -n "$PORT_XTLS_REALITY" ] &&
2668-
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME[11]} ${NODE_TAG[0]}\", \"server\":\"${SERVER_IP}\", \"server_port\":${PORT_XTLS_REALITY}, \"uuid\":\"${UUID[11]}\", \"flow\":\"\", \"packet_encoding\":\"xudp\", \"tls\":{ \"enabled\":true, \"server_name\":\"${TLS_SERVER[11]}\", \"utls\":{ \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC[11]}\", \"short_id\":\"\" } }, \"multiplex\": { \"enabled\": true, \"protocol\": \"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":${IS_BRUTAL}, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
2693+
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME[11]} ${NODE_TAG[0]}\", \"server\":\"${SERVER_IP}\", \"server_port\":${PORT_XTLS_REALITY}, \"uuid\":\"${UUID[11]}\", \"flow\":\"\", \"packet_encoding\": \"none\", \"tls\":{ \"enabled\":true, \"server_name\":\"${TLS_SERVER[11]}\", \"utls\":{ \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC[11]}\", \"short_id\":\"\" } }, \"multiplex\": { \"enabled\": true, \"protocol\": \"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":${IS_BRUTAL}, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
26692694
local NODE_REPLACE+="\"${NODE_NAME[11]} ${NODE_TAG[0]}\","
26702695

26712696
if [ -n "$PORT_HYSTERIA2" ]; then
@@ -2726,13 +2751,13 @@ anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME[21]}%
27262751
fi
27272752

27282753
[ -n "$PORT_H2_REALITY" ] &&
2729-
local REALITY_H2_INBOUND=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME[19]} ${NODE_TAG[8]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_H2_REALITY}, \"uuid\":\"${UUID[19]}\", \"tls\": { \"enabled\":true, \"server_name\":\"${TLS_SERVER[19]}\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC[19]}\", \"short_id\":\"\" } }, \"packet_encoding\": \"xudp\", \"transport\": { \"type\": \"http\" } }," &&
2754+
local REALITY_H2_INBOUND=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME[19]} ${NODE_TAG[8]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_H2_REALITY}, \"uuid\":\"${UUID[19]}\", \"tls\": { \"enabled\":true, \"server_name\":\"${TLS_SERVER[19]}\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC[19]}\", \"short_id\":\"\" } }, \"packet_encoding\": \"none\", \"transport\": { \"type\": \"http\" } }," &&
27302755
local REALITY_H2_NODE="\"${NODE_NAME[19]} ${NODE_TAG[8]}\"" &&
27312756
local NODE_REPLACE+="${REALITY_H2_NODE}," &&
27322757
local INBOUND_REPLACE+=" ${REALITY_H2_INBOUND}"
27332758

27342759
[ -n "$PORT_GRPC_REALITY" ] &&
2735-
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME[20]} ${NODE_TAG[9]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_GRPC_REALITY}, \"uuid\":\"${UUID[20]}\", \"tls\": { \"enabled\":true, \"server_name\":\"${TLS_SERVER[20]}\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC[20]}\", \"short_id\":\"\" } }, \"packet_encoding\": \"xudp\", \"transport\": { \"type\": \"grpc\", \"service_name\": \"grpc\" } }," &&
2760+
local INBOUND_REPLACE+=" { \"type\": \"vless\", \"tag\": \"${NODE_NAME[20]} ${NODE_TAG[9]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_GRPC_REALITY}, \"uuid\":\"${UUID[20]}\", \"tls\": { \"enabled\":true, \"server_name\":\"${TLS_SERVER[20]}\", \"utls\": { \"enabled\":true, \"fingerprint\":\"chrome\" }, \"reality\":{ \"enabled\":true, \"public_key\":\"${REALITY_PUBLIC[20]}\", \"short_id\":\"\" } }, \"packet_encoding\": \"none\", \"transport\": { \"type\": \"grpc\", \"service_name\": \"grpc\" } }," &&
27362761
local NODE_REPLACE+="\"${NODE_NAME[20]} ${NODE_TAG[9]}\","
27372762

27382763
[ -n "$PORT_ANYTLS" ] &&

0 commit comments

Comments
 (0)