habrahabr

Почему не работает VoWiFi в роуминге

  • вторник, 9 сентября 2025 г. в 00:00:15
https://habr.com/ru/articles/944526/

Привет, Хабр!

Есть у меня телефон 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
Индикация VoWiFi
Индикация VoWiFi

Вуаля! Обратите внимание, что хостнейм ePDG старый, а IP‑адрес, в который он прорезолвился на 2-й строке лога — билайновский!

Я не большой знаток стэка протоколов работы сотовых сетей, но ChatGPT подтвердил мою догадку — телефон должен подключаться к ePDG своего оператора, а не к роуминговому оператору. Почему же он лезет к Туркцеллу? Тут у меня несколько догадок о возможных причинах. Если в пост забредет знаток этого хозяйства, то прошу поделиться своими знаниями. Догадки следующие:

  1. Бага в прошивке телефона — помните в начале статьи я писал о том, что обновил перед отъездом, хотя на своём ПМЖ у меня VoWiFi работал. Привет китайским «друзьям»!

  2. Каким‑то образом Турецкий оператор воздействует на логику телефона и убеждает его подключаться к своему ePDG. Зачем? Очевидно, чтобы руссо‑туристо звонил через роуминг.

  3. Российские операторы (на 4pda страдают все клиенты большой тройки в профильной теме) прогнулись под требования турков и каким‑то образом внесли такую корректировку в работы СИМ‑карты, что вне РФ всё работает как надо, но в Турции работает через задницу.

У меня на этом для вас сегодя всё, всем хороших отпусков!

А что делать тем, у кого нет роутера с OpenWRT? Наверное, я бы попробовал поднять где‑нибудь свой личный DNS‑резолвер на основе pi‑hole и подмониторил бы там запросы на резолв ePDG вида epdg.epc.mnc???.mcc???.pub.3gppnetwork.org и после обнаружения похожей ситуации, подменял бы резолвинг вручную на IP ePDG вашего оператора.