mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-06 11:36:50 +03:00
feat(init.d/podkop): add DNS resolver discovery and dynamic configuration
This commit is contained in:
@@ -40,6 +40,8 @@ SING_BOX_CONFIG="/etc/sing-box/config.json"
|
|||||||
CACHE_FILE_PATH="/tmp/cache.db"
|
CACHE_FILE_PATH="/tmp/cache.db"
|
||||||
FAKEIP="198.18.0.0/15"
|
FAKEIP="198.18.0.0/15"
|
||||||
VALID_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube discord meta twitter hdrezka tiktok telegram"
|
VALID_SERVICES="russia_inside russia_outside ukraine_inside geoblock block porn news anime youtube discord meta twitter hdrezka tiktok telegram"
|
||||||
|
DNS_RESOLVERS="1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 9.9.9.9 9.9.9.11 94.140.14.14 94.140.15.15 208.67.220.220 208.67.222.222 77.88.8.1 77.88.8.8"
|
||||||
|
TEST_DOMAIN="google.com"
|
||||||
|
|
||||||
start_service() {
|
start_service() {
|
||||||
log "Start podkop"
|
log "Start podkop"
|
||||||
@@ -545,6 +547,17 @@ list_update() {
|
|||||||
config_foreach process_subnet_for_section_remote
|
config_foreach process_subnet_for_section_remote
|
||||||
}
|
}
|
||||||
|
|
||||||
|
find_working_resolver() {
|
||||||
|
local resolver_found=""
|
||||||
|
for resolver in $DNS_RESOLVERS; do
|
||||||
|
if nslookup $TEST_DOMAIN $resolver >/dev/null 2>&1; then
|
||||||
|
echo "$resolver"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "8.8.8.8"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# sing-box funcs
|
# sing-box funcs
|
||||||
|
|
||||||
@@ -622,27 +635,78 @@ sing_box_inbound_proxy() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sing_box_dns() {
|
sing_box_dns() {
|
||||||
|
local dns_type
|
||||||
|
local dns_server
|
||||||
|
local resolver_tag="resolver"
|
||||||
|
|
||||||
|
config_get dns_type "main" "dns_type" "doh"
|
||||||
|
config_get dns_server "main" "dns_server" "1.1.1.1"
|
||||||
|
|
||||||
|
local server_json
|
||||||
|
local is_ip=$(echo "$dns_server" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' && echo "1" || echo "0")
|
||||||
|
|
||||||
|
if [ "$is_ip" = "0" ]; then
|
||||||
|
log "Finding working DNS resolver"
|
||||||
|
local dns_resolver=$(find_working_resolver)
|
||||||
|
log "Found working resolver: $dns_resolver"
|
||||||
|
fi
|
||||||
|
|
||||||
log "Configure DNS in sing-box"
|
log "Configure DNS in sing-box"
|
||||||
|
|
||||||
|
server_json=$(jq -n \
|
||||||
|
--arg type "$dns_type" \
|
||||||
|
--arg server "$dns_server" \
|
||||||
|
--arg resolver "$resolver_tag" \
|
||||||
|
--arg is_ip "$is_ip" \
|
||||||
|
'{
|
||||||
|
"servers": [
|
||||||
|
{
|
||||||
|
"tag": "dns-server",
|
||||||
|
"address": (
|
||||||
|
if $type == "doh" then
|
||||||
|
"https://" + $server + "/dns-query"
|
||||||
|
elif $type == "dot" then
|
||||||
|
"tls://" + $server
|
||||||
|
else
|
||||||
|
$server
|
||||||
|
end
|
||||||
|
),
|
||||||
|
"detour": "direct-out"
|
||||||
|
} + (
|
||||||
|
if $is_ip == "0" then
|
||||||
|
{"address_resolver": $resolver}
|
||||||
|
else
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
)
|
||||||
|
]
|
||||||
|
}')
|
||||||
|
|
||||||
|
if [ "$is_ip" = "0" ]; then
|
||||||
|
server_json=$(echo "$server_json" | jq \
|
||||||
|
--arg resolver "$resolver_tag" \
|
||||||
|
--arg address "$dns_resolver" \
|
||||||
|
'.servers += [{
|
||||||
|
"tag": $resolver,
|
||||||
|
"address": $address
|
||||||
|
}]')
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Добавляем fakeip сервер
|
||||||
|
server_json=$(echo "$server_json" | jq '.servers += [{"tag": "fakeip-server", "address": "fakeip"}]')
|
||||||
|
|
||||||
|
# Обновляем конфигурацию sing-box
|
||||||
jq \
|
jq \
|
||||||
--arg FAKEIP "$FAKEIP" \
|
--argjson dns_config "$server_json" \
|
||||||
'.dns = {
|
--arg fakeip "$FAKEIP" \
|
||||||
"strategy": "ipv4_only",
|
'.dns = {
|
||||||
"fakeip": {
|
"strategy": "ipv4_only",
|
||||||
"enabled": true,
|
"fakeip": {
|
||||||
"inet4_range": $FAKEIP
|
"enabled": true,
|
||||||
},
|
"inet4_range": $fakeip
|
||||||
"servers": [
|
|
||||||
{
|
|
||||||
"tag": "cloudflare-doh-server",
|
|
||||||
"address": "https://1.1.1.1/dns-query",
|
|
||||||
"detour": "direct-out"
|
|
||||||
},
|
},
|
||||||
{
|
"servers": $dns_config.servers
|
||||||
"tag": "fakeip-server",
|
}' $SING_BOX_CONFIG > /tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
||||||
"address": "fakeip"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}' $SING_BOX_CONFIG >/tmp/sing-box-config-tmp.json && mv /tmp/sing-box-config-tmp.json $SING_BOX_CONFIG
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sing_box_dns_rule_fakeip() {
|
sing_box_dns_rule_fakeip() {
|
||||||
|
|||||||
Reference in New Issue
Block a user