mirror of
https://github.com/itdoginfo/podkop.git
synced 2026-01-06 08:38:52 +03:00
Enhance Podkop functionality with global check feature and improved diagnostics. Added support for FakeIP tests in both browser and router contexts. Updated UI elements for better status reporting and added localization for new messages.
This commit is contained in:
@@ -1953,9 +1953,7 @@ show_sing_box_config() {
|
||||
)' "$SING_BOX_CONFIG"
|
||||
}
|
||||
|
||||
show_config() {
|
||||
nolog "📄 Current podkop configuration:"
|
||||
|
||||
show_config() {
|
||||
if [ ! -f /etc/config/podkop ]; then
|
||||
nolog "Configuration file not found"
|
||||
return 1
|
||||
@@ -2046,36 +2044,18 @@ get_sing_box_status() {
|
||||
}
|
||||
|
||||
get_status() {
|
||||
local running=0
|
||||
local enabled=0
|
||||
local status=""
|
||||
|
||||
# Check if service is enabled
|
||||
if [ -x /etc/rc.d/S99podkop ]; then
|
||||
enabled=1
|
||||
fi
|
||||
|
||||
# Check if service is running
|
||||
if pgrep -f "sing-box" >/dev/null; then
|
||||
running=1
|
||||
fi
|
||||
|
||||
# Format status message
|
||||
if [ $running -eq 1 ]; then
|
||||
if [ $enabled -eq 1 ]; then
|
||||
status="running & enabled"
|
||||
else
|
||||
status="running but disabled"
|
||||
fi
|
||||
status="enabled"
|
||||
else
|
||||
if [ $enabled -eq 1 ]; then
|
||||
status="stopped but enabled"
|
||||
else
|
||||
status="stopped & disabled"
|
||||
fi
|
||||
status="disabled"
|
||||
fi
|
||||
|
||||
echo "{\"running\":$running,\"enabled\":$enabled,\"status\":\"$status\"}"
|
||||
echo "{\"enabled\":$enabled,\"status\":\"$status\"}"
|
||||
}
|
||||
|
||||
check_dns_available() {
|
||||
@@ -2171,71 +2151,39 @@ sing_box_add_secure_dns_probe_domain() {
|
||||
log "DNS probe domain ${domain} configured with override to port ${override_port}"
|
||||
}
|
||||
|
||||
print_global() {
|
||||
local message="$1"
|
||||
echo "$message"
|
||||
}
|
||||
|
||||
global_check() {
|
||||
nolog "📡 Global check run!"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " SYSTEM INFO"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global "📦 Podkop: $(opkg list-installed podkop | awk '{print $3}')"
|
||||
print_global "📦 LuCI App: $(opkg list-installed luci-app-podkop | awk '{print $3}')"
|
||||
print_global "📦 Sing-box: $(sing-box version | head -n 1 | awk '{print $3}')"
|
||||
print_global "🔧 OpenWrt: $(grep OPENWRT_RELEASE /etc/os-release | cut -d'"' -f2)"
|
||||
print_global "💻 Device: $(cat /tmp/sysinfo/model)"
|
||||
print_global ""
|
||||
|
||||
nolog "Podkop $(opkg list-installed podkop | awk '{print $3}')"
|
||||
nolog "LuCi App $(opkg list-installed luci-app-podkop | awk '{print $3}')"
|
||||
nolog "Sing-box $(sing-box version | head -n 1 | awk '{print $3}')"
|
||||
nolog "$(grep OPENWRT_RELEASE /etc/os-release | cut -d'"' -f2)"
|
||||
nolog "Device: $(cat /tmp/sysinfo/model)"
|
||||
|
||||
printf "\n"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " PODKOP CONFIGURATION"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
show_config
|
||||
printf "\n"
|
||||
print_global ""
|
||||
|
||||
nolog "Checking fakeip functionality..."
|
||||
|
||||
nolog "➡️ DNS resolution: system DNS server"
|
||||
nslookup -timeout=2 $TEST_DOMAIN
|
||||
|
||||
local working_resolver=$(find_working_resolver)
|
||||
if [ -z "$working_resolver" ]; then
|
||||
nolog "❌ No working resolver found, skipping resolver check"
|
||||
else
|
||||
nolog "➡️ DNS resolution: external resolver ($working_resolver)"
|
||||
nslookup -timeout=2 $TEST_DOMAIN $working_resolver
|
||||
fi
|
||||
|
||||
# Main FakeIP check
|
||||
nolog "➡️ DNS resolution: sing-box DNS server (127.0.0.42)"
|
||||
local result=$(nslookup -timeout=2 $TEST_DOMAIN 127.0.0.42 2>&1)
|
||||
echo "$result"
|
||||
|
||||
if echo "$result" | grep -q "198.18"; then
|
||||
nolog "✅ FakeIP is working correctly! Domain resolved to FakeIP range (198.18.x.x)"
|
||||
else
|
||||
nolog "❌ FakeIP test failed. Domain did not resolve to FakeIP range"
|
||||
nolog "Checking if sing-box is running..."
|
||||
|
||||
if ! pgrep -f "sing-box" >/dev/null; then
|
||||
nolog "sing-box is not running"
|
||||
else
|
||||
nolog "sing-box is running, but FakeIP might not be configured correctly"
|
||||
nolog "Checking DNS configuration in sing-box..."
|
||||
|
||||
if [ -f "$SING_BOX_CONFIG" ]; then
|
||||
local fakeip_enabled=$(jq -r '.dns.fakeip.enabled' "$SING_BOX_CONFIG")
|
||||
local fakeip_range=$(jq -r '.dns.fakeip.inet4_range' "$SING_BOX_CONFIG")
|
||||
|
||||
nolog "FakeIP enabled: $fakeip_enabled"
|
||||
nolog "FakeIP range: $fakeip_range"
|
||||
|
||||
local dns_rules=$(jq -r '.dns.rules[] | select(.server == "fakeip-server") | .domain' "$SING_BOX_CONFIG")
|
||||
nolog "FakeIP domain: $dns_rules"
|
||||
else
|
||||
nolog "sing-box config file not found"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
printf "\n"
|
||||
print_global ""
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " SYSTEM CHECKS"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
if grep -E "^nameserver\s+([0-9]{1,3}\.){3}[0-9]{1,3}" "$RESOLV_CONF" | grep -vqE "127\.0\.0\.1|0\.0\.0\.0"; then
|
||||
nolog "❌ /etc/resolv.conf contains an external nameserver:"
|
||||
cat /etc/resolv.conf
|
||||
print_global "❌ /etc/resolv.conf contains external nameserver:"
|
||||
cat /etc/resolv.conf | sed 's/^/ /'
|
||||
echo ""
|
||||
else
|
||||
nolog "✅ /etc/resolv.conf OK"
|
||||
print_global "✅ /etc/resolv.conf - OK"
|
||||
fi
|
||||
|
||||
cachesize="$(uci get dhcp.@dnsmasq[0].cachesize 2>/dev/null)"
|
||||
@@ -2243,29 +2191,35 @@ global_check() {
|
||||
server="$(uci get dhcp.@dnsmasq[0].server 2>/dev/null)"
|
||||
|
||||
if [ "$cachesize" != "0" ] || [ "$noresolv" != "1" ] || [ "$server" != "127.0.0.42" ]; then
|
||||
nolog "❌ The configuration differs from the template. 📄 DHCP config:"
|
||||
awk '/^config /{p=($2=="dnsmasq")} p' /etc/config/dhcp
|
||||
print_global "❌ DHCP configuration differs from template:"
|
||||
awk '/^config /{p=($2=="dnsmasq")} p' /etc/config/dhcp | sed 's/^/ /'
|
||||
elif [ "$(uci get podkop.main.dont_touch_dhcp 2>/dev/null)" = "1" ]; then
|
||||
nolog "⚠️ Enable dont_touch_dhcp. 📄 DHCP config:"
|
||||
awk '/^config /{p=($2=="dnsmasq")} p' /etc/config/dhcp
|
||||
print_global "⚠️ dont_touch_dhcp is enabled:"
|
||||
awk '/^config /{p=($2=="dnsmasq")} p' /etc/config/dhcp | sed 's/^/ /'
|
||||
else
|
||||
nolog "✅ /etc/config/dhcp"
|
||||
print_global "✅ DHCP configuration - OK"
|
||||
fi
|
||||
|
||||
if ! pgrep -f "sing-box" >/dev/null; then
|
||||
nolog "❌ sing-box is not running"
|
||||
print_global "❌ sing-box process - not running"
|
||||
else
|
||||
nolog "✅ sing-box is running"
|
||||
print_global "✅ sing-box process - running"
|
||||
fi
|
||||
|
||||
nolog "📄 NFT Table Podkop"
|
||||
print_global ""
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " NFT RULES"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
if ! nft list table inet PodkopTable >/dev/null 2>&1; then
|
||||
nolog "PodkopTable not found"
|
||||
print_global "❌ PodkopTable not found"
|
||||
else
|
||||
nft list table inet PodkopTable
|
||||
nft list table inet PodkopTable | sed 's/^/ /'
|
||||
fi
|
||||
|
||||
nolog "📄 WAN config"
|
||||
print_global ""
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " WAN CONFIG"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
if uci show network.wan >/dev/null 2>&1; then
|
||||
awk '
|
||||
/^config / {
|
||||
@@ -2284,28 +2238,82 @@ global_check() {
|
||||
print
|
||||
}
|
||||
}
|
||||
' /etc/config/network
|
||||
' /etc/config/network | sed 's/^/ /'
|
||||
else
|
||||
nolog "WAN not exists"
|
||||
print_global "❌ WAN configuration not found"
|
||||
fi
|
||||
|
||||
print_global ""
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " WARP DETECTION"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
CLOUDFLARE_OCTETS="103.21 103.22 103.31 104.16 104.17 104.18 104.19 104.20 104.21 104.22 104.23 \
|
||||
104.24 104.25 104.26 104.27 104.28 108.162 131.0 141.101 162.158 162.159 172.64 172.65 172.66 \
|
||||
172.67 172.68 172.69 172.70 172.71 173.245 188.114 190.93 197.234 198.41"
|
||||
|
||||
local warp_found=0
|
||||
if uci show network | grep -q endpoint_host; then
|
||||
uci show network | grep endpoint_host | cut -d'=' -f2 | tr -d "'\" " | while read -r host; do
|
||||
if [ "$host" = "engage.cloudflareclient.com" ]; then
|
||||
nolog "⚠️ WARP detected ($host)"
|
||||
print_global "⚠️ WARP detected: $host"
|
||||
warp_found=1
|
||||
continue
|
||||
fi
|
||||
|
||||
ip_prefix=$(echo "$host" | cut -d'.' -f1,2)
|
||||
if echo "$CLOUDFLARE_OCTETS" | grep -wq "$ip_prefix"; then
|
||||
nolog "⚠️ WARP detected ($host)"
|
||||
print_global "⚠️ WARP detected: $host"
|
||||
warp_found=1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$warp_found" -eq 0 ]; then
|
||||
print_global "✅ No WARP configurations detected"
|
||||
fi
|
||||
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
print_global " FAKEIP ROUTER TEST"
|
||||
print_global "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
print_global "🔍 Testing system DNS resolver..."
|
||||
nslookup -timeout=2 $TEST_DOMAIN
|
||||
|
||||
local working_resolver=$(find_working_resolver)
|
||||
if [ -z "$working_resolver" ]; then
|
||||
print_global "❌ No working external resolver found"
|
||||
else
|
||||
print_global "🔍 Testing external resolver ($working_resolver)..."
|
||||
nslookup -timeout=2 $TEST_DOMAIN $working_resolver
|
||||
fi
|
||||
|
||||
print_global "🔍 Testing sing-box DNS server (127.0.0.42)..."
|
||||
local result=$(nslookup -timeout=2 $TEST_DOMAIN 127.0.0.42 2>&1)
|
||||
echo "$result"
|
||||
|
||||
if echo "$result" | grep -q "198.18"; then
|
||||
print_global "✅ FakeIP is working correctly on router (198.18.x.x)"
|
||||
else
|
||||
print_global "❌ FakeIP test failed - domain did not resolve to FakeIP range"
|
||||
if ! pgrep -f "sing-box" >/dev/null; then
|
||||
print_global " └─ sing-box is not running"
|
||||
else
|
||||
print_global " └─ sing-box is running, checking configuration..."
|
||||
|
||||
if [ -f "$SING_BOX_CONFIG" ]; then
|
||||
local fakeip_enabled=$(jq -r '.dns.fakeip.enabled' "$SING_BOX_CONFIG")
|
||||
local fakeip_range=$(jq -r '.dns.fakeip.inet4_range' "$SING_BOX_CONFIG")
|
||||
local dns_rules=$(jq -r '.dns.rules[] | select(.server == "fakeip-server") | .domain' "$SING_BOX_CONFIG")
|
||||
|
||||
print_global " ├─ FakeIP enabled: $fakeip_enabled"
|
||||
print_global " ├─ FakeIP range: $fakeip_range"
|
||||
print_global " └─ FakeIP domain: $dns_rules"
|
||||
else
|
||||
print_global " └─ sing-box config file not found"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
|
||||
Reference in New Issue
Block a user