Привет, Хабр!
Есть у меня телефон Redmi Note 13 Pro 5G, который покупался по двум причинам — в нём есть eSIM, он поддерживается российскими операторами в плане работы VoWiFi (он же WiFi calling). И таким образом, я проживая вне РФ смог купить удалено симку российского оператора, которая мне периодически нужна и звонить и принимать вызовы без роуминга, находясь где угодно.
Приехал я тут в Турцию и достал свой телефон и обнаружил, что VoWiFi не работает, хотя он включен в настройках. Написал в поддержку Билайн — те как всегда отморозились тем, что ничего не знают, всё мол должно работать.
Тут нужно заметить, что я живу не в РФ и по месту моего жительства VoWiFi работал, но непосредственно перед отъездом в Турцию я обновил прошивку телефона (со штатной на штатную обычным OTA). В конце статьи напишу, почему это может быть важно.
Ну что делать? А делать, имея роутер на OpenWRT можно следующее. Широко известно, что VoWiFi работает путем установки IPSec соединения с узлом ePDG (Evolved Packet Data Gateway). Для этого происходит сначала обмен по UDP порту 500, а потом по порту 4500.
Вот и установим на роутер tcpdump и посмотрим, что за UDP трафик исходит от моего телефона командой:
tcpdump -i br-lan "ip host 192.168.1.2 and udp"
Где 192.168.1.2 - это IP-адрес моего телефона в локалке.
Запускаем, и что мы видим? Ничего не видим, так как телефон, похоже, не пытается долбится в ePDG постоянно. Поэтому перезагружаем его и...
00:34:21.411270 IP Redmi-Note-13-Pro-5G.home.arpa.42575 > xenon.home.arpa.53: 26744+ A? epdg.epc.mnc001.mcc286.pub.3gppnetwork.org. (60)
00:34:21.438037 IP xenon.home.arpa.53 > Redmi-Note-13-Pro-5G.home.arpa.42575: 26744 4/0/0 A 188.59.221.1, A 188.59.227.1, A 188.59.228.1, A 188.59.223.1 (124)
00:34:21.480598 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.500: isakmp: parent_sa ikev2_init[I]
00:34:21.523224 IP 188.59.221.1.500 > Redmi-Note-13-Pro-5G.home.arpa.43637: isakmp: parent_sa ikev2_init[R]
00:34:21.721342 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.500: isakmp: parent_sa ikev2_init[I]
00:34:21.757842 IP 188.59.221.1.500 > Redmi-Note-13-Pro-5G.home.arpa.43637: isakmp: parent_sa ikev2_init[R]
00:34:21.958755 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.4500: NONESP-encap: isakmp: child_sa ikev2_auth[I]
00:34:21.993288 IP 188.59.221.1.4500 > Redmi-Note-13-Pro-5G.home.arpa.43637: NONESP-encap: isakmp: child_sa ikev2_auth[R]
00:34:21.998074 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.4500: NONESP-encap: isakmp: child_sa inf2[I]
00:34:22.048624 IP 188.59.221.1.4500 > Redmi-Note-13-Pro-5G.home.arpa.43637: NONESP-encap: isakmp: child_sa inf2[R]
00:34:24.014808 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.4500: NONESP-encap: isakmp: child_sa inf2[I]
00:34:24.048338 IP 188.59.221.1.4500 > Redmi-Note-13-Pro-5G.home.arpa.43637: NONESP-encap: isakmp: child_sa inf2[R]
00:34:28.000367 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.4500: NONESP-encap: isakmp: child_sa inf2[I]
00:34:28.048478 IP 188.59.221.1.4500 > Redmi-Note-13-Pro-5G.home.arpa.43637: NONESP-encap: isakmp: child_sa inf2[R]
00:34:36.017616 IP Redmi-Note-13-Pro-5G.home.arpa.43637 > 188.59.221.1.4500: NONESP-encap: isakmp: child_sa inf2[I]
00:34:36.052326 IP 188.59.221.1.4500 > Redmi-Note-13-Pro-5G.home.arpa.43637: NONESP-encap: isakmp: child_sa inf2[R]
Вроде бы всё чин-чинарём, и виден обмен на порт 500, потом на 4500 и после 8 пакетов всё замирает и индикатор VoWiFi не появляется.
А дальше замечаем, что в дамп попал DNS-request и response по резолвингу собственно самого ePDG, который выглядит так: epdg.epc.mnc001.mcc286.pub.3gppnetwork.org — структура этого URL-а регламентирована стандартами 3GPP и содержит в себе MCC (грубо говоря код страны) и MNC (код оператора внутри страны). И что же мы видим? А видим мы, что MCC = 286 — а это Турция, а MNC = 001 — это оператор Turkcell. Это мой текущий роуминговый оператор. А какого хрена телефон лезет в ePDG Turkcell'а когда сим-карта у него Билайн?
Делаем следующее — на роутере вручную з аменяю резолвинг хоста epdg.epc.mnc001.mcc286.pub.3gppnetwork.org на IP-адрес ePDG Билайна, который можно получить, прорезолвив хост epdg.epc.mnc099.mcc250.pub.3gppnetwork.org, что на момент написания статьи 85.249.16.248.
Перезагружаем телефон и.....
10:56:27.416148 IP Redmi-Note-13-Pro-5G.home.arpa.44534 > xenon.home.arpa.53: 24611+ A? epdg.epc.mnc001.mcc286.pub.3gppnetwork.org. (60)
10:56:27.417382 IP xenon.home.arpa.53 > Redmi-Note-13-Pro-5G.home.arpa.44534: 24611* 1/0/0 A 85.249.16.248 (76)
10:56:27.459363 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.500: isakmp: parent_sa ikev2_init[I]
10:56:27.548772 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.500 > Redmi-Note-13-Pro-5G.home.arpa.43426: isakmp: parent_sa ikev2_init[R]
10:56:27.602700 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: NONESP-encap: isakmp: child_sa ikev2_auth[I]
10:56:27.786840 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: NONESP-encap: isakmp: child_sa ikev2_auth[R]
10:56:27.872478 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: NONESP-encap: isakmp: child_sa ikev2_auth[I]
10:56:28.030002 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: NONESP-encap: isakmp: child_sa ikev2_auth[R]
10:56:28.053222 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: NONESP-encap: isakmp: child_sa ikev2_auth[I]
10:56:28.264091 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: NONESP-encap: isakmp: child_sa ikev2_auth[R]
10:56:28.364039 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: NONESP-encap: isakmp: child_sa ikev2_auth[I]
10:56:28.438758 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: NONESP-encap: isakmp: child_sa ikev2_auth[R]
10:56:28.798690 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x1), length 100
10:56:28.886132 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: UDP-encap: ESP(spi=0x066c9ea5,seq=0x1), length 100
10:56:28.961246 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x2), length 84
10:56:28.961375 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x3), length 1108
10:56:28.961518 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x4), length 852
10:56:29.055347 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: UDP-encap: ESP(spi=0x066c9ea5,seq=0x2), length 100
10:56:29.192925 IP Redmi-Note-13-Pro-5G.home.arpa.55894 > xenon.home.arpa.53: 20730+ A? time.xtracloud.net. (36)
10:56:29.221375 IP xenon.home.arpa.53 > Redmi-Note-13-Pro-5G.home.arpa.55894: 20730 3/0/0 CNAME xtratime.qcomgeo2.com., A 52.35.146.2, A 35.91.218.188 (103)
10:56:29.234664 IP Redmi-Note-13-Pro-5G.home.arpa.39429 > ec2-52-35-146-2.us-west-2.compute.amazonaws.com.123: NTPv4, Client, length 48
10:56:29.300105 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: UDP-encap: ESP(spi=0x066c9ea5,seq=0x3), length 708
10:56:29.373712 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x5), length 84
10:56:29.446557 IP ec2-52-35-146-2.us-west-2.compute.amazonaws.com.123 > Redmi-Note-13-Pro-5G.home.arpa.39429: NTPv4, Server, length 48
10:56:29.469245 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x6), length 84
10:56:29.469246 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x7), length 84
10:56:29.469246 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x8), length 132
10:56:29.559855 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: UDP-encap: ESP(spi=0x066c9ea5,seq=0x4), length 132
10:56:29.563232 IP epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500 > Redmi-Note-13-Pro-5G.home.arpa.43426: UDP-encap: ESP(spi=0x066c9ea5,seq=0x5), length 100
10:56:29.572387 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0x9), length 84
10:56:29.575109 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0xa), length 116
10:56:29.586106 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0xb), length 1140
10:56:29.586677 IP Redmi-Note-13-Pro-5G.home.arpa.43426 > epdg.epc.mnc001.mcc286.pub.3gppnetwork.org.4500: UDP-encap: ESP(spi=0x07947532,seq=0xc), length 1140

Уоаля! Обратите внимание, что хостнейм ePDG старый, а IP‑адрес, в который он прорезолвился на 2-й строке лога — билайновский!
Я не большой знаток стэка протоколов работы сотовых сетей, но ChatGPT подтвердил мою догадку — телефон должен подключаться к ePDG своего оператора, а не к роуминговому оператору. Почему же он лезет к Туркцеллу? Тут у меня несколько догадок о возможных причинах. Если в пост забредет знаток этого хозяйства, то прошу поделиться своими знаниями. Догадки следующие:
Бага в прошивке телефона — помните в начале статьи я писал о том, что обновил перед отъездом, хотя на своём ПМЖ у меня VoWiFi работал. Привет китайским «друзьям»!
Каким‑то образом Турецкий оператор воздействует на логику телефона и убеждает его подключаться к своему ePDG. Зачем? Очевидно, чтобы руссо‑туристо звонил через роуминг.
Российские операторы (на 4pda страдают все клиенты большой тройки в профильной теме) прогнулись под требования турков и каким‑то образом внесли такую корректировку в работы СИМ‑карты, что вне РФ всё работает как надо, но в Турции работает через задницу.
У меня на этом для вас сегодя всё, всем хороших отпусков!
А что делать тем, у кого нет роутера с OpenWRT? Наверное, я бы попробовал поднять где‑нибудь свой личный DNS‑резолвер на основе pi‑hole и подмониторил бы там запросы на резолв ePDG вида epdg.epc.mnc???.mcc???.pub.3gppnetwork.org и после обнаружения похожей ситуации, подменял бы резолвинг вручную на IP ePDG вашего оператора.
Комментарии (7)
Andy_U
06.09.2025 10:20А что делать тем, у кого нет роутера с OpenWRT?
Keenetiс'и тоже умеют и tcpdump, и КВН клиент...
Интересно, когда вернетесь домой, правильный IP для VoWIFI восстановится?
А "домашняя" не российская SIM-карта есть? Что там творится? Такая же дичь?
Если (временно) поменять телефон? А то про RedMi много чего интересного на 4pda пишут в соответствующей теме. Как раз про неправильные адреса серверов.
Случайно eSIM от MTC нет или на крайний случай Мегафона?
А если поднять VPN в Россию или даже к себе домой, или просто в Европу на роутере? Именно на роутере, потому что IpSec организуется не андроидом, а самим мобильным модемом.
А так, да, по крайней мере в том аэропорту, где у Pegasus'а пересадка, у меня на аэропортовском WiFi VoWIFI не работает ни на Мегафоне, ни на финском DNA. Но у меня там пересадки короткие 2 часа, не до экспериментов.
dmitrmax Автор
06.09.2025 10:20Интересно, когда вернетесь домой, правильный IP для VoWIFI восстановится?
Когда я вернусь домой телефон не будет пытаться резолвить хостнейм ePDG турецкого оператора, он будет резолвить другой хостнейм. Поэтому эта настройка DNS, которую я осуществил, не будет иметь никакого влияния дома.
А "домашняя" не российская SIM-карта есть? Что там творится? Такая же дичь?
Есть, но там глухо - в смысле у домашнего опсоса нет поддержки WiFi calling.
Если (временно) поменять телефон?
У меня eSIM, перевыпустить её можно, но нет под рукой никакого другого телефона с eSIM, который бы поддерживался россискими опсосами. Есть Google Pixel 6 тоже с билайновской eSIM, но там от билайна специальная подлянка, чтобы не работали исходящие (поддержка отвечает, что ваш телефон официально не поддерживается, всего хорошего).
Случайно eSIM от MTC нет или на крайний случай Мегафона?
Есть Мегафон. Такая же ерунда в Redmi.
А если поднять VPN в Россию
VPN в Россию никак не поможет. Телефон обращается к хостнейму турецкого опсоса, который резолвится в IP турецкого опсоса. Если резолвинг подменить на IP билайна всё работает. VPN в Россию нужен был бы, если бы ePDG билайна отлупал подключения из-за бугра. Но тут он прекрасно фунциклирует.
dmitrmax Автор
06.09.2025 10:20Keenetiс'и тоже умеют и tcpdump, и КВН клиент...
Но не все ездят в отпуск со своим OpenWRT или Keenetic и вообще имеют доступ к местному роутеру )
corefly
Не волнуйтесь, канадский телефон в роуминге также не включает значок vowifi :)
dmitrmax Автор
Канадский - это какой?
Вообще тут причины могут быть как в телефоне, так и в операторе - некоторые не хотят давать возможность кроить на роуминге. Но с российскими оператора было известно, что в целом они в роуминге работают. Судя по всему тут дело именно в Xiaomi, что подтверждается дискуссиями на 4pda.
Тест такой: выключаем VoWiFi, включаем авиарежим, включаем WiFi, после этого включаем VoWiFi. Если заработало, то скорее всего проблема в телефоне - он формирует адрес ePDG, исходя из текущего оператора. А в авиарежиме он не видит текущего оператора и подключается к домашнему.
corefly
Отбой тревоги :)
Нет у меня сейчас WiFi calling. В прошлом году был, но в ноябре сменил провайдера и сменил телефон на Samsung S24 Ultra, который не привязан к провайдеру. Меню WiFi calling отсутствует. А на S23 от провайдера - был :)
dmitrmax Автор
Это может быть из-за того, что провайдер не поддерживает VoWiFi вообще или на вашем устройстве в частности. Если последнее, то иногда сервисными командами или приложеньками (типа PixelIMS для пикселей) на некоторых телефонах это можно заоверрайдить, чтобы телефон всё равно показал кнопочку включения WiFi Calling и часто оператор тоже пропускает.