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."