Почему метка страны в VPN — не адрес, с которого вы выходите
Поле в списке, маршрутизированный адрес и мнение приложения могут расходиться. Разберитесь, что именно вы читаете, прежде чем называть выход помеченным неверно.
Вы выбираете страну, подключаетесь, и сайт приветствует вас в другой. Метка в списке никогда ничего не обещала об адресе, с которого вы выйдете: это поле, которое кто-то опубликовал, полученное методом, которого вы не видели. Отношение к этому полю как к адресу — именно там начинается путаница.
Три отдельные вещи несут значение страны, и они могут расходиться, не требуя, чтобы кто-то лгал. Их различение делает несовпадение диагностируемым, а не загадочным.
Три разные вещи несут метку страны
Первая — собственное поле каталога, которое может быть указано самим оператором, выведено из базы адресов или просто скопировано при создании записи. Вторая — сам адрес, принадлежащий той сети, которая его объявляет, и именно на это отвечает запрос геолокации, используя опубликованные данные сопоставления в форме, описанной в RFC 8805. Третья — то, что приложение решает показать; это может приходить из другой базы, из настройки учётной записи или из разрешения, которое вы дали на устройстве. Только вторая является сетевым фактом, и даже она — запрос, а не наблюдение.
Согласованность между этими тремя была бы приятной и нигде не требуется. Несовпадение — доказательство того, что их получили по-разному, и ничего больше.
Проверяйте адрес, а не флаг
Полезный вопрос — с какого публичного адреса ваш трафик действительно выходит. На него можно ответить со стороны клиента, и он не зависит ни от какого поля списка. Сравните ответ с префиксом, которого вы ожидали, и с тем, что говорит о нём запрос геолокации, держа два результата отдельно в своих заметках. Разрыв между ожидаемой страной и запросом — вопрос маршрутизации или базы данных, а разрыв между запросом и мнением приложения — снова вопрос базы данных.
Выполните проверку дважды, если у сервиса несколько выходов в регионе. Пул может выдавать разные адреса при последовательных подключениях, и одна выборка описывает только один из них.
Близость на карте — не близость в сети
Близкая страна может оказаться более длинным путём, чем далёкая, потому что оптоволоконный маршрут не идёт вдоль границы. Выбирать узел по задержке означает измерять нужную вам цель, а не брать ближайший флаг. Та же логика действует и для пропускной способности: слабо загруженный выход через две страны может обойти насыщенный соседний. Сначала измерьте, потом решайте, и запишите час, потому что оба числа меняются.
Местоположение также ничего не говорит о хранении или о том, кто управляет конечной точкой. Для этого нужны собственные доказательства, которых столбец страны вместить не может.
Подтвердите адрес выхода сами
Спросите клиента и внешний сервис, как выглядит ваш адрес, затем спросите локальную таблицу маршрутизации, как был выбран этот путь. Команды ниже делают все три, и третью люди чаще всего пропускают. Замените имя интерфейса на своё туннельное устройство.
curl -sS https://api.ipify.org; echo
curl -sS --interface tun0 https://api.ipify.org; echo
ip route get 1.1.1.1
ip -6 addr show dev tun0
Первые две строки должны совпадать, и если они не совпадают, маршрут, который, как вы думаете, у вас есть, — не тот маршрут, который несёт ваш трафик. Запрос маршрута называет интерфейс и адрес источника, которые ядро использовало бы для назначения, и это механизм, стоящий за адресом выхода. Строка IPv6 важна, потому что машина может держать туннель для одного семейства и прямой путь для другого. Метка страны сама по себе не покрывает ни один из этих случаев.
Запишите наблюдаемый адрес, мнение базы данных и то, что показывает приложение, как три отдельные заметки. Тогда следующее несовпадение, с которым вы столкнётесь, будет легко отнести к причине.