Нуль паличок було б кращим за три: інженерний детектив про мобільний зв’язок, який не працював удома

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

Уявіть мобільний телефон, який показує три палички сигналу — і не приймає половину дзвінків. А тепер уявіть, що нуль паличок вирішив би проблему, а три — ні.

Звучить абсурдно. Але саме це нерозуміння коштувало мені тижня роботи над проблемою, якої насправді не існувало. Ця історія — про те, як правильний діагноз виявився важливішим за будь-яке рішення, чому індикатор сигналу на екрані бреше, і як задача, що починалася з розумного будинку й автоматизацій, закінчилася одним рядком налаштувань.

Мене звати Віталій, я Senior Back-End Engineer в компанії Preply. Ця стаття буде цікава всім, хто любить історії дебагінгу, цікавиться тим, як влаштовані мобільні мережі зсередини, або просто живе в будинку, де «не ловить».

Якщо винести з тексту одну думку

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

Кур’єр, який поїхав геть

Почну з типової ситуації яка трапляється ледь не щотижня.

Мені везуть меблі або продукти. Кур’єр перед тим як їхати до мене, робить те, що зробила б будь-яка людина — набирає мій номер, щоб я підтвердив що я вдома і зможу його прийняти.

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

Я в цей час удома. Телефон лежить поруч. На екрані — дві палички. Він не дзвонив, не вібрував, не показав пропущений. Мені не приходить СМС про те, що мені хтось дзвонив. Десь аж потім я згадую про кур’єра — і в застосунку бачу «Кур’єр не зміг додзвонитись. Доставка буде завтра».

Наступного дня кур’єр приїхав удруге. Я підготувався по-дорослому: поклав телефон на підвіконня — єдине місце у квартирі, де сигнал майже точно і майже завжди (але це не точно) пробивається, — і чергував біля нього. А коли ми нарешті зустрілися, окремо попросив: «Якщо що — наступного разу дзвоніть мені у Viber». Бо інтернет вдома чудовий і все працює.

Ось у цьому чудовому інтернеті і ховається вся інженерна частина історії. Телефон на підвіконні як милиця цивілізації — це було дно, від якого я відштовхнувся.

Що насправді відбувалося

Живу я в новобудові: залізобетонний каркас, енергоефективні склопакети з металізованим напиленням — фактично клітка Фарадея. А головне — моє ОСББ хворе на радіофобію: керівництво блокує встановлення базової станції на даху чи поблизу. Тобто корінь проблеми навіть не технічний, а управлінський: страх перед словом «випромінювання». Полагодити його інженерно неможливо — можна тільки обійти.

Симптоматика виглядала так:

  • телефон показує 1–3 палички, тобто формально «сигнал є»;
  • доходить приблизно половина вхідних дзвінків;
  • той, хто дзвонить, чує 10–15 секунд тиші, потім — як пощастить: або гудки, або «абонент не в мережі»;
  • якщо людина не дочекалася — я не отримую жодного сліду: ні пропущеного виклику, ні сповіщення. Дзвінок просто зникає.

Останній пункт — найгірший. У розподілених системах це називають silent failure: відмова без сигналу про відмову. Скільки дзвінків так випарувалося за два роки — я не дізнаюся ніколи.

Що я мав для обходу: оптоволоконний інтернет (GPON) із роутером на джерелі безперебійного живлення — він переживав усі відключення світла які у мене були, — систему розумного будинку Home Assistant і повний парк техніки Apple. План здавався очевидним: стільниковий зв’язок у квартиру не пробивається, інтернет залізний — отже, приймаймо дзвінки через інтернет. Задача на вечір.

Задача розтяглася на три тижні. Перший із них я будував рішення для неправильно поставленого діагнозу.

Стандартні рішення не працюють

Хотів би одразу випередити найочевиднішу пораду з коментарів: «Увімкни Wi‑Fi Calling». Це справді перше рішення, яке спадає на думку, коли стільниковий зв’язок поганий, а домашній інтернет стабільний.

Але в моєму випадку Wi‑Fi Calling не розв’язав проблему. Поки телефон бачив ті самі одну-три палички, мережа вважалася достатньо доступною, і пристрій продовжував намагатися приймати дзвінки через стільниковий канал. Перехід на Wi‑Fi відбувався нестабільно або не відбувався взагалі. У результаті я знову опинявся в тій самій сірій зоні: сигнал нібито є, але додзвонитися неможливо.

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

Хибний діагноз: «я поза зоною»

Перша ідея лежить на поверхні. У мобільних операторів є умовні переадресації — послуги, керовані USSD-кодами прямо з телефона:

**62*<номер>#   — переадресація, коли абонент недоступний **61*<номер>#   — коли не відповідає (по таймауту) **67*<номер>#   — коли зайнято

План: ставимо **62* на віртуальний номер хмарної АТС — і коли телефон недоступний, виклик автоматично «тікає» в інтернет, де я його приймаю застосунком. Елегантно?

Не працює. І щоб зрозуміти чому, довелося розібратися, як мережа взагалі вирішує, що вас «немає».

Як оператор визначає недоступність

Комутатор мобільної мережі знає про ваш телефон лише три речі:

  1. Чи зареєстрований він у мережі (телефон періодично «відмічається»).
  2. Чи був явний detach — ви вимкнули телефон або увімкнули режим польоту.
  3. Чи відповів телефон на paging — «оклик» мережі, який відбувається щоразу, коли на вас іде вхідний виклик.

Переадресація «при недоступності» вмикається лише тоді, коли мережа впевнена, що вас немає: або був явний detach, або paging провалився.

Парадокс паличок

Тепер — головний контрінтуїтивний момент усієї історії.

Нуль паличок = телефон чесно від’єднаний від мережі = мережа впевнена у вашій відсутності = переадресація спрацьовує миттєво, дзвінки їдуть куди налаштовано. Все працює.

Три палички = телефон зареєстрований = для мережі ви є. Коли paging до вас не пробивається, мережа трактує це не як «недоступний», а як «не відповідає» — і вмикає переадресацію по таймауту, який за замовчуванням становить 15–30 секунд. А тепер згадайте кур’єра: хто з тих, що дзвонять, слухає тишу тридцять секунд? Люди кладуть слухавку на п’ятнадцятій. Виклик фізично не доживає до спрацювання переадресації.

Я був не «поза зоною». Я був у сірій зоні — стані, де мережа бачить тебе рівно настільки, щоб не вмикати рятівну логіку.

Чому виникає сіра зона: асиметрія радіолінка

Палички на екрані показують RSRP — потужність сигналу, який ваш телефон чує від базової станції. Це напрямок «вниз» (downlink). Але зв’язок двосторонній: станція передає десятками ват, а телефон відповідає часткою вата. Звідси асиметрія: ви чуєте вежу (палички є!), а вежа не чує вас. Реєстрація тримається, а от відповісти на paging чи встановити голосовий канал телефон уже не може.

До того ж палички нічого не кажуть про SINR — співвідношення сигнал/шум, яке насправді визначає, чи запрацює канал. Можна мати «непогані» палички при повністю непридатному каналі.

Перевірити це на власному телефоні може кожен: на iPhone наберіть *3001#12345#* — відкриється інженерне меню Field Test Mode зі справжніми цифрами. Подивіться на SINR у різних кутках квартири — можливо, дізнаєтеся про своє житло щось нове.

Друга хибна спроба, коротко

Була ще ідея «примусової недоступності»: автоматично вмикати режим польоту, коли я вдома (це чесний detach — переадресація спрацює гарантовано). Але це дія яку потрібно робити вручну. А всі ми люди і ми можемо забувати робити первні дії. Окрім цього ружим без зв’язку вбиває СМС і будь-які підтвердження авторизації (привіт Приват24) перестали би працювати.

Рішення: один рядок

Коли діагноз став правильним, рішення напросилося само собою. Якщо мета — щоб виклик ніколи не намагався пробитися на слухавку через радіо, навіщо гратися з умовними переадресаціями? Існує безумовна:

**21*<віртуальний номер>#

CFU — Call Forwarding Unconditional. Комутатор бачить у профілі абонента «переадресовувати все» і навіть не запускає paging. Радіоканал вирізаний із маршруту повністю. Скільки паличок, зайнята слухавка чи розряджена — нерелевантно: виклик одразу їде на віртуальний номер хмарної АТС, а звідти — у SIP-застосунок на телефоні через Wi-Fi.

Три властивості, які роблять це рішення правильним:

SMS живі. Безумовна переадресація стосується лише голосу; телефон залишається зареєстрованим у мережі, тож повідомлення (і коди від банків) приходять як раніше.

Нуль автоматизації. Я починав із планів на Home Assistant, геозони, тригери за Wi-Fi. Закінчив одним статичним рядком у профілі оператора. Розумний будинок у фінальній схемі не бере участі взагалі. Найелегантніше в цій системі — те, чого в ній немає.

Уся логіка — під моїм контролем. Оператор перетворився на простий редиректор, а сценарії живуть у хмарній АТС: кілька паралельних «ніг» доставки, голосова пошта, запис, сповіщення на пошту й у Telegram.

Ось так виглядає візуальний редактор моєї хмарної АТС:

Перший тест я зробив, подзвонивши сам собі з власного телефона. Замість «зайнято» дзвінок прийшов у застосунок — комутатор навіть не поцікавився, вільна слухавка чи ні.

Економіка, бо це завжди питають: вхідна хвилина на віртуальний номер коштує $0.014, вихідна — стільки ж; якщо спрацьовує резервна GSM-нога, тарифікуються обидві — $0.028/хв. Оренда номера — $3 на місяць. Мої оператори за саму переадресацію не беруть нічого (дзвінок усередині мережі). Разом — кілька доларів на місяць: ціна двох кав за гарантію, що кур’єр додзвониться.

Ось так виглядає налаштування «першої ноги»: при дзвінку на мій номер, виклик йде на iOS застосунок. Якщо я не відповідаю — на голосовий автовідповідач.

Друга нога: резервний канал без інтернету

На одній SIP-нозі можна було зупинитися. Але лишався сценарій, де вона безсила: місця, де стільниковий зв’язок є, а мобільного інтернету немає — траса, гори, перевантажена сота. Плюс Apple Watch: нативний GSM-дзвінок годинник показує, а VoIP-виклики сторонніх застосунків watchOS не транслює — обмеження платформи, яке не обходиться жодним застосунком.

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

(Тут була ще детективна історія на тиждень про те, чому конкретна SIM відмовлялася приймати ці виклики — але вона тягне на окрему статтю. Спойлер: причину я так і не встановив, купив іншу SIM за 300 грн, і все запрацювало з першої спроби. Іноді обхідний шлях чесно перемагає пошук першопричини.)

Ось так виглядають налаштування для другої «ноги»:

Несподіванки експлуатації

Місяць життя із системою приніс спостереження, яких я не проєктував.

Інтернет-дзвінки виявилися кращими за стільникові — навіть за слабкого покриття. Я будував SIP-ногу як протез для квартири, а вона несподівано перемогла GSM і за містом: тримається стабільно і звучить краще. Пояснення у фізиці: дані виживають при значно гіршому каналі, ніж голос. Голосовий виклик має жорсткий бюджет затримки — пакет спізнився, і його викидають. А дані перепитують загублене і знижують швидкість, продовжуючи «повзти». Канал, який не тягне дзвінок, спокійно тягне 30 кбіт/с аудіо. Плюс кодек: GSM у полі скочується на вузькосмуговий «телефонний» звук, інтернет-дзвінок використовує широкосмуговий Opus. Ціна — інколи помітна затримка замість заїкання. Чесний компроміс.

Ноги виручають не там, де я планував. Задум був простий: SIP — для дому й міста, де скрізь інтернет; GSM-резерв — для траси й гір, де інтернету немає, а стільник є. На практиці вийшло навпаки.

За містом, у полі, де я найбільше розраховував на резервну ногу, чудово справляється саме інтернет-дзвінок — з причин, описаних вище. А резервна нога, яку я вже майже вимкнув як непотрібну, спрацювала двічі за тиждень — обидва рази посеред міста, за нормального 4G. Першого разу я роздавав інтернет із телефона, і виклик до застосунку просто не долетів — хоча покриття було. Другого разу застосунок задзвонив, я взяв — і не почув нічого: формально з’єднання є, фактично звук не проходить, бо в людному місці мережа перевантажена. Обидва рази за кілька секунд починав дзвонити резервний мобільний, і розмова відбувалася.

Виявилося, що дві ноги — це не «інтернет для міста, стільник для гір». Вони страхують різні поломки того самого каналу: дані можуть бути, а виклик не долетіти або звук не пройти. І найнеприємніше: «німий» дзвінок гірший за пропущений. Коли телефон мовчить, ти хоча б знаєш, що зв’язку немає. А коли кажеш «алло» в порожнечу — ти впевнений, що на зв’язку. Резерв, який мовчить місяцями, легко визнати зайвим. Саме тому його й не варто вимикати.

Пріоритетів між ногами немає — є гонка. Обидві ноги дзвонять паралельно; хто перший відповів, той забрав виклик, іншому летить скасування. SIP зазвичай стартує швидше (сповіщення долітає за 1–2 секунди, GSM-нога встановлюється 3–6), тож у місті телефон здебільшого навіть не встигає задзвонити.

Apple Watch став селектором каналу. GSM-нога доходить на годинник, VoIP — ні. Тож із зап’ястя видно, який канал дзвонить, і можна свідомо прийняти саме його. А справжній номер того, хто телефонує, доїжджає крізь два перестрибування аж до годинника — цього я не очікував.

І вишенька. Першим, хто по-справжньому оцінив мою голосову пошту, став не кур’єр — а система моніторингу з роботи, яка продзвонювала інцидент, не додзвонилася і надиктувала алерт в автовідповідач. Автоматичне розпізнавання мови перетворило його на дадаїстську поему: «Readiness after request is low. Repeat. Pronunciation readiness after request is low. Triggered incident.» Машина розпізнавала машину — і не зламалась об абревіатури. Кожна ланка відпрацювала коректно.

Чого я свідомо не зробив ідеально

Без цього розділу текст був би рекламою, а не інженерним розбором.

  • Одна точка відмови — хмарна АТС. Сто відсотків вхідних тепер ідуть через одного стороннього провайдера. Впаде він або закінчиться баланс — я знову тихо недоступний. Пом’якшено автоплатежем і сповіщеннями про баланс, але не знято. Правильне рішення — власна АТС Asterisk на орендованому сервері як незалежний шлях; для особистого номера це надлишок, на який я поки не готовий.
  • «Аварійний вимикач» потребує стільникового зв’язку. Вимкнути переадресацію — це USSD-команда (##21#), якій потрібен сигнал. Тобто в момент інциденту, коли треба терміново повернути дзвінки на слухавку, доведеться вийти з квартири. Іронію зараховано.
  • За хвилини тепер плачу я. Кілька доларів на місяць — небагато, але вхідні дзвінки перестали бути безкоштовними.

Про роль штучного інтелекту в цій історії

Значну частину діагностики я пройшов у парі з LLM (Claude), і чесний висновок звідти цікавіший за «спитав — отримав відповідь».

Найкорисніший момент стався, коли я скинув у чат одне речення з даними: «у мене 1–3 палички і 50% пропущених». До того ми разом будували рішення під діагноз «поза зоною». Після цього речення діагноз перевернувся на «сіру зону» — і вся попередня архітектура пішла в кошик. Дані перемогли план; але хтось мав помітити, що дані суперечать плану.

Висновки

  1. Спершу діагноз, потім рішення. Тиждень я лагодив «поза зоною», хоча був у «сірій зоні». Одне речення з реальними даними перевернуло все.
  2. Палички брешуть. Індикатор сигналу — це не якість зв’язку. Вирішує співвідношення сигнал/шум, якого на екрані не видно. *3001#12345#* покаже правду.
  3. Найкраще рішення має найменше рухомих частин. Почав з автоматизацій і розумного будинку — закінчив одним рядком у профілі оператора.
  4. Пошук першопричини не завжди вартий своєї ціни. Я так і не дізнався, чому не дзвонила друга нога. Обхід за $2 переміг тиждень розслідування — і це було правильно.
  5. Мовчазна відмова — найгірший клас відмови. Два роки дзвінки зникали без сліду, і я про це не знав. Тепер, коли щось падає, воно падає гучно: голосова пошта, Telegram, email. Різниця між fail silently та fail gracefully — це і є інженерія.
  6. Резерв спрацьовує не там, де ти його планував. Другу ногу я робив для траси й гір — а вона виручила посеред міста, за нормального 4G. Саме тому надлишковість не можна проєктувати «під сценарій»: якби я вимкнув резерв як непотрібний, я б не дізнався, що він потрібен, — просто пропустив би дзвінки.

А кур’єри тепер додзвонюються з першого разу. Телефон із підвіконня я забрав.

👍ПодобаєтьсяСподобалось19
До обраногоВ обраному4
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дякую! Цікава стаття

Є така типова загогулина. До ОСББ приходить оператор і пропонує встановити БС, печерні радіофоби одразу хрестяться та виганяють оператора, бо ВИПРОМІНЮВАННЯ!!!!!1111ОДИНОДИН

Тоді оператор йде до сусіднього ОСББ, де всім або пофіг, або є мізки, і ставить там свою БС.

В результаті, саме перший ОСББ опиняється в основному проміні, бо антени БС «світять» в боки, а не під себе.

Так, у цьому й іронія. Відмова від БС на власному будинку не обов’язково зменшує реальний вплив: станція з’являється на сусідньому, а телефони через більшу відстань ще й можуть передавати з вищою потужністю. Але пояснити це людям значно складніше, ніж просто налякати словом «випромінювання».

Мав схожі проблеми з Київстаром — обрав на мобільному примусове підключення до мережі Водафон. Тепер він весь час в роумінгу, але дзвінки працюють суттєво ліпше.

Цікавий варіант, дякую. Я перевіряв всіх операторів через MNP, і жоден не працював, тому це не мій варіант. А вхідні дзвінки, SMS і мобільний інтернет у вас у такому режимі працюють стабільно?

Дзвінки та СМС працюють. Мобільний інтернет телефон не підтримує.

Opus? Клієнт від Zadarma тільки speex вміє. І в мене були проблеми саме з цим клієнтом, але грішив на корпоративну мережу без пріоретизації трафіку — поганий звʼязок, дропи, на старті потрібно мікрофон на 150% мінімум викрутити тощо...

Слушне зауваження. Тут я, схоже, занадто впевнено приписав конкретному клієнту Opus, не перевіривши negotiated codec у самому дзвінку. Якщо клієнт Zadarma справді узгоджує Speex, то покращення якості в моєму випадку було не через Opus, а радше через стабільніший IP-тракт і відсутність деградації стільникового voice. Перевірю SDP/логи й уточню цей абзац у статті. Дякую, що підсвітили.

Цікава стаття, давно на ДОУ такого не було. Зберіг собі в записник лінку, на всякий випадок. Кілька раз стикався з подібними проваллями в покритті у дуже розбудованих містах по світу. Є ще чим займатись інженерам:)

ПС: до речі, може комусь стане в нагоді, я для побутових потреб на телефоні використувую безкоштовну версію додатку Network Cell Info Lite яка детально показує всі параметри сигналу і оновлює їх в реальному часі (швидше за «палички») і Termux щоб швиденько перевірити дропи пакетів якщо є така підозра.

теж ловив іноді подібні проблеми зі стільниковим зв’язком і «палки» сигналу тут не є чітким індикатором — проблеми зі зв’язком можуть бути і при достатньому рівні сигналу
і в мене зараз постійно в квартирі саме Wi‑Fi Calling :)
і я його не вмикав зі свого боку окремо, очевидно оператор (Київстар) змінив пріоритет підключення

Схоже, тут поведінка справді залежить від оператора, моделі телефона і, можливо, поточних налаштувань мережі. У моєму випадку iPhone тримався за стільниковий канал, поки бачив хоча б якийсь сигнал, тому Wi‑Fi Calling спрацьовував нестабільно. Цікаво, що Київстар міг змінити пріоритет — треба буде повторити тест. Дякую за актуальний datapoint.

до речі Київстар зовсім недавно сповістив мене SMS-кою, що підключив за моїм номером VoLTE та VoWiFi,
хоча на той момент VoWiFi вже кілька тижнів постійно світився

Дякую, це справді найочевидніший шлях — і я його розглядав.

Дві причини, чому не пішов. Перша: репітер підсилює те, що є, а моя проблема саме в тому, що телефон вежу чує (палички є), а вежа телефон — ні. Для uplink потрібна не будь-яка антена, а правильно розміщена й узгоджена — інакше отримаєш ті самі три палички, тільки яскравіші.

Друга, вагоміша: наскільки я розумію, в Україні репітери потребують дозволу й погодження з оператором, а неправильно налаштований бустер шумить оператору в uplink — тобто псує зв’язок і сусідам. Не хотілося ставати тією людиною в будинку.

Плюс мій випадок специфічний — ОСББ блокує встановлення станції поблизу, тож підсилювати особливо нічого. Але для тих, у кого вежа є, а стіни товсті, — цілком робочий варіант, згоден.

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

вийшло простим.

зовннішня антена на вікні
fi202x.blogspot.com/...​lte-c-aliexpress-373.html
і/або “на палці”
fi202x.blogspot.com/2023/02/4g-lte.html

Дякую за посилання, цікаві матеріали — забрав собі.

Це справді робоче рішення для іншого класу задачі: коли треба витягнути дані (4G-модем + зовнішня антена = стабільний інтернет). У мене з інтернетом якраз усе добре — оптика на UPS.

А для голосу зовнішня антена не допомагає напряму: у неї не встромиш iPhone. Тобто шлях був би такий — антена → модем → GSM-шлюз → SIP → застосунок. Це фактично та сама архітектура, що в мене, тільки з власним залізом замість хмарної АТС і з SIM у шлюзі (а отже, поза домом основний номер недоступний).

Я цей варіант розглядав як план Б, якщо зникне інтерконект. Але оскільки задачу вирішив один рядок USSD, до заліза не дійшло. Хоча визнаю: варіант із власним шлюзом красивіший інженерно — і дешевший в експлуатації.

В більшості мобільних телефонів, що мав і маю в наявності гніздо під щовнішню антену.Можливо iPhone в цьому особливий, то чому не взяти «звичайний телефон» з гніздом?
Та й взагалі, радив би мати різні телефони для різних задач.
Ще пішла тенденція вимикати 3G, і тоді або SIM карту або міняти на нову, або вставляти в старий телефон під 2G.
І ще можна було би спробувати який «інший телефон» по причині, що чутливість в нього інша, і веде він себе в умовах нестабільного зв"язку інакше (не баг а фіча).

Так, інший телефон із кращою чутливістю або роз’ємом для антени міг би покращити ситуацію саме у квартирі. Але моєю вимогою було зберегти основний номер на одному щоденному телефоні й не прив’язувати SIM до стаціонарного пристрою. Інакше я просто міняю одну локальну проблему на іншу — поза домом основний номер уже не зі мною. Для стаціонарного сценарію чи окремої SIM ваш варіант цілком робочий.

припаяти pig-tale до телефону і вивести зовні корпусу, до цього «хвостика» в квартирі приєднувати зовнішню антену, а що поробиш: «мистецтво вимає жертв»

Підписатись на коментарі