Ви обираєте країну, підключаєтеся, і сайт вітає вас в іншій. Позначка в списку ніколи нічого не обіцяла про адресу, з якої ви вийдете: це поле, яке хтось опублікував, отримане методом, якого ви не бачили. Ставлення до цього поля як до адреси — саме там починається плутанина.

Три окремі речі несуть значення країни, і вони можуть розходитися, не вимагаючи, щоб хтось брехав. Їх розрізнення робить розбіжність діагностованою, а не загадковою.

Три різні речі несуть позначку країни

Перша — власне поле каталогу, яке може бути вказане самим оператором, виведене з бази адрес або просто скопійоване під час створення запису. Друга — сама адреса, що належить мережі, яка її оголошує, і саме на це відповідає запит геолокації, використовуючи опубліковані дані зіставлення у формі, описаній у 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 важливий, бо машина може тримати тунель для одного сімейства і прямий шлях для іншого. Позначка країни сама по собі не покриває жодного з цих випадків.

Запишіть спостережувану адресу, думку бази даних і те, що показує застосунок, як три окремі нотатки. Тоді наступну розбіжність, з якою ви зіткнетеся, буде легко віднести до причини.

Схожі статті