Subject: IP xxx.xx.xx.xx geolocated as China by Google Hello, Google services (Gemini, YouTube) geolocate my VPS IP 192.67.63.55 as China (CN), while all other databases show Singapore. Could you please assign me a different IPv4 that Google geolocates as Singapore, and/or submit a geolocation correction / geofeed update to Google for this range? Thank you. #!/usr/bin/env bash # geocheck.sh — как разные сервисы видят геолокацию IP вашего VPS # Запуск: bash geocheck.sh (IPv4) # bash geocheck.sh -6 (IPv6) # bash geocheck.sh 1.2.3.4 (проверить конкретный IP, без тестов Google) set -u FAM="-4"; TARGET="" case "${1:-}" in -6) FAM="-6" ;; -4|"") ;; *) TARGET="$1" ;; esac UA="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36" C="curl $FAM -s --max-time 10 -A \"$UA\"" need() { command -v "$1" >/dev/null 2>&1; } if ! need jq || ! need whois; then echo "Ставлю jq и whois..." if need apt-get; then apt-get update -qq && apt-get install -y -qq jq whois >/dev/null elif need dnf; then dnf install -y -q jq whois >/dev/null elif need yum; then yum install -y -q jq whois >/dev/null elif need apk; then apk add -q jq whois >/dev/null fi fi g() { eval "$C \"$1\""; } row() { printf "%-22s %-6s %-22s %s\n" "$1" "${2:-?}" "${3:-}" "${4:-}"; } # ISO alpha-3 -> alpha-2 для стран, которые чаще всего встречаются в проверках a3to2() { case "$1" in SGP) echo SG;; RUS) echo RU;; CHN) echo CN;; HKG) echo HK;; MAC) echo MO;; IRN) echo IR;; PRK) echo KP;; CUB) echo CU;; SYR) echo SY;; BLR) echo BY;; NLD) echo NL;; DEU) echo DE;; FIN) echo FI;; FRA) echo FR;; GBR) echo GB;; USA) echo US;; CAN) echo CA;; JPN) echo JP;; KOR) echo KR;; TWN) echo TW;; CYP) echo CY;; TUR) echo TR;; KAZ) echo KZ;; ARM) echo AM;; GEO) echo GE;; POL) echo PL;; SWE) echo SE;; CHE) echo CH;; AUT) echo AT;; LVA) echo LV;; LTU) echo LT;; EST) echo EE;; MDA) echo MD;; UKR) echo UA;; ARE) echo AE;; IND) echo IN;; IDN) echo ID;; MYS) echo MY;; THA) echo TH;; VNM) echo VN;; *) echo "$1";; esac } # Регионы, где Gemini официально не работает GEMINI_BLOCKED=" RU CN HK MO IR KP CU SY BY " IP="${TARGET:-$(g https://api.ipify.org)}" [ -z "$IP" ] && { echo "Не удалось определить внешний IP"; exit 1; } echo "============================================================" echo " IP: $IP" echo "============================================================" printf "%-22s %-6s %-22s %s\n" "Источник" "Страна" "Город" "ASN / Организация" echo "------------------------------------------------------------" # ipinfo.io (собственная база) j=$(g "https://ipinfo.io/$IP/json") row "ipinfo.io" "$(jq -r .country <<<"$j" 2>/dev/null)" "$(jq -r .city <<<"$j" 2>/dev/null)" "$(jq -r .org <<<"$j" 2>/dev/null)" # ip-api.com (бесплатно только http) j=$(g "http://ip-api.com/json/$IP?fields=countryCode,city,as,isp") row "ip-api.com" "$(jq -r .countryCode <<<"$j" 2>/dev/null)" "$(jq -r .city <<<"$j" 2>/dev/null)" "$(jq -r .as <<<"$j" 2>/dev/null)" # ifconfig.co — использует базу MaxMind GeoLite2 j=$(g "https://ifconfig.co/json?ip=$IP") row "MaxMind (ifconfig.co)" "$(jq -r '.country_iso // empty' <<<"$j" 2>/dev/null)" "$(jq -r '.city // empty' <<<"$j" 2>/dev/null)" "$(jq -r 'if .asn then "\(.asn) \(.asn_org // "")" else empty end' <<<"$j" 2>/dev/null)" # ipapi.co j=$(g "https://ipapi.co/$IP/json/") row "ipapi.co" "$(jq -r .country_code <<<"$j" 2>/dev/null)" "$(jq -r .city <<<"$j" 2>/dev/null)" "$(jq -r '"\(.asn // "") \(.org // "")"' <<<"$j" 2>/dev/null)" # ipwho.is j=$(g "https://ipwho.is/$IP") row "ipwho.is" "$(jq -r .country_code <<<"$j" 2>/dev/null)" "$(jq -r .city <<<"$j" 2>/dev/null)" "$(jq -r '"AS\(.connection.asn // "") \(.connection.org // "")"' <<<"$j" 2>/dev/null)" # ip.sb j=$(g "https://api.ip.sb/geoip/$IP") row "ip.sb" "$(jq -r .country_code <<<"$j" 2>/dev/null)" "$(jq -r '.city // ""' <<<"$j" 2>/dev/null)" "$(jq -r '"AS\(.asn // "") \(.organization // "")"' <<<"$j" 2>/dev/null)" # WHOIS — страна, на которую зарегистрирован блок W=$(whois "$IP" 2>/dev/null) row "WHOIS (регистрация)" "$(grep -im1 '^country:' <<<"$W" | awk '{print toupper($2)}')" "" "$(grep -im1 -E '^(netname|descr):' <<<"$W" | cut -d: -f2- | xargs)" if [ -z "$TARGET" ]; then echo "------------------------------------------------------------" echo " Как видят реальные сервисы (с этого VPS):" # Cloudflare loc=$(g https://www.cloudflare.com/cdn-cgi/trace | awk -F= '/^loc=/{print $2}') row "Cloudflare" "$loc" # YouTube — регион Google по этому IP yt=$(g "https://www.youtube.com/premium" | grep -o '"countryCode":"[A-Z]\{2\}"' | head -1 | cut -d'"' -f4) row "YouTube (Google)" "${yt:-нет данных}" # Gemini: регион берём из страницы (alpha-3), решение — по списку # неподдерживаемых стран. Старый маркер 45631641 — только как доп. признак. gm=$(eval "curl $FAM -sL --max-time 15 -A \"$UA\" -H 'Accept-Language: en-US,en;q=0.9' https://gemini.google.com/app") gc3=$(grep -o ',2,1,200,"[A-Z]\{3\}"' <<<"$gm" | head -1 | grep -o '[A-Z]\{3\}') gc=""; [ -n "$gc3" ] && gc=$(a3to2 "$gc3") if [ -z "$gm" ]; then gs="нет ответа" elif grep -qiE "not (yet )?available in your (country|region)|isn.t (yet )?available in your (country|region)|недоступ.{0,6} в вашей (стране|регионе)" <<<"$gm"; then gs="НЕДОСТУПЕН" elif [ -n "$gc" ] && [[ "$GEMINI_BLOCKED" == *" $gc "* ]]; then gs="НЕДОСТУПЕН (регион)" elif grep -q '45631641,null,true' <<<"$gm" || [ -n "$gc" ]; then gs="доступен" else gs="не определено" fi row "Gemini" "${gc:-?}" "$gs" "${gc3:+(код Google: $gc3)}" fi echo "============================================================" echo "Если базы показывают SG, а YouTube/Gemini — RU/CN/HK и т.п.:" echo "виновата геолокация Google -> просите провайдера сменить IP" echo "или подать исправление (geofeed / форма Google)." echo "Если WHOIS = CN/RU: блок зарегистрирован там, надёжнее сменить IP." echo "Gemini также смотрит страну Google-аккаунта, не только IP."