21.02 - support for Voice over Wifi?

Hi,
I'm desperate with having functional Voice over Wifi on my setup, I can't initiate outgoing calls.

I have Ubiquiti UniFi AC Pro and Ubiquiti UniFi AC Light connected to the Ubiquiti EdgeRouter X.
On Wifi routers I have OpenWrt 21.02.0-rc4, on EdgeRouter I'm compiling myself latest snapshot of Openwrt 21.02. Everything works fine, I have many Wifi devices, all are reachable etc but can't get working Voice of Wifi from Vodafone.

I some older articles I found that I have to install kmod-nf-nat-helper-extra but that didn't make any difference.

What is interesting, on very old TP-Link TL-WR841N/ND v8 and TL-WR841N/ND v9 with OpenWrt SNAPSHOT and Kernel Version 4.19.98 this works flawless without any further configuration (v9 is relaying traffic via relayd to v8).

Before digging into configuration files, any quick idea what is wrong ?

Thank you.

tpddump for particular phone shows on AP :

00:12:05.252850 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcd5), length 136
00:12:05.272915 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcd6), length 136
00:12:05.293138 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcd7), length 136
00:12:05.312866 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcd8), length 136
00:12:05.332864 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcd9), length 136
00:12:05.352854 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcda), length 136
00:12:05.372935 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcdb), length 136
00:12:05.392966 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcdd), length 120
00:12:05.453009 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0xcde), length 120

tpddump for particular phone shows on EdgeRouter :

00:37:23.508564 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a3f), length 136
00:37:23.528759 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a40), length 136
00:37:23.548682 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a41), length 136
00:37:23.568650 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a42), length 136
00:37:23.588909 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a43), length 136
00:37:23.608589 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a44), length 136
00:37:23.628582 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a45), length 136
00:37:23.648606 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a46), length 136
00:37:23.668638 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a47), length 136
00:37:23.688631 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a48), length 136
00:37:23.708581 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a49), length 136
00:37:23.728565 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a4a), length 136
00:37:23.748743 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a4b), length 136
00:37:23.769281 IP epdg.epc.mnc003.mcc230.pub.3gppnetwork.org.4500 > Galaxy-S20.lan.60214: UDP-encap: ESP(spi=0x116048c8,seq=0x2a4c), length 136

I was on RC4 but even after updating to stable, no change....I would appreciate any suggestion here and I'm off my ideas... thank you.

So I was using for some time OnePlus phone, then I changed back to Samsung brand.
On any Samsung VoWifi doesn't work BUT - it was working just fine on OnePlus.
Also I shall note that I have standard Firewall config...but even disabling firewall makes no difference.

Also some additional observations.

VoWifi works in cases (even on Samsung) where there is Wifi AP directly connected to the router (all different Openwrts compiled by myself including very old TPlink 841 v7...) but it doesn't work in case where it's connected to my own Wifi APs (Ubiquity AC Pro / Light) ,which are then connected via LAN to LAN router (Edgerouter X) and this one is connected to provider metallic converter and then to the "internet".

I tried almost everything, UDP port redirects (500 / 4500), kmod modues for ipsec, disabling firewalls on all network devices but still no success, IGMP snooping, UPnP, kmod extra helpers. I can receive VoWifi calls but I can't dial VoWifi calls on Samsung phones but Oneplus works fine on the same Openwrt most basic configuration and Samsung also works in all others combination.

Really nobody can advice anything, what am I missing?

I'm finding the description a bit confusing because I can't really understand how things are truly connected. Can you draw a digram of your topology. On that digram, be sure to include the OS that each device is running (OpenWrt, Unifi firmware, EdgeOS, etc.) and also the mode in which it operates (i.e. bridge mode, router mode, etc.). Also use the digram to indicate which devices allow VoWifi to function properly vs which do not.

FWIW, VoWifi has worked without any issues on my setup for as long as I can remember. I currently use a USG + 2x UAP-AC-PRO units (all running the Unifi firmware), but it also worked well when I was using an ER-X as my router (with EdgeMax firmware).

1 Like

I'd try running a release build, as close to default configuration as you can get, since this is something that does not require any special routing to work.

1 Like

Thanks, I was not thinking about that, so I just reverted everything to default, using 21.02 and reset to default - absolutely same behavior ;-(

Firmware Version	OpenWrt 21.02.2 r16495-bf0c965af0 / LuCI openwrt-21.02 branch git-22.046.85957-59c3392
Kernel Version	5.4.179

Thank you, indeed it might be confusing, I was hoping someone will write "you are idiot, you are missing key part" :wink:

Hope this brings some additional clarity into that...

Wireless routers have bridged interfaces (Wifi+LAN), Edgerouter is in bridge mode on LAN, routing out to WAN.

I' not sure which AP is at issue here, but the topology looks fairly straight forward.

I'd try disabling 802.11r -- this is not required for roaming to work properly. A properly tuned network will encourage clients to roam from AP to AP in a nearly transparent way. 802.11r is not universally supported and can cause some issues with some devices.

Do you have any VLANs setup on your ER-X, or is it just a single network?

Beyond that, we'd now need to see the configuration to understand what is different between the 2 APs.

Please copy the output of the following commands and post it here using the "Preformatted text </> " button:
grafik
Remember to redact passwords, MAC addresses and any public IP addresses you may have:

cat /etc/config/network
cat /etc/config/wireless
cat /etc/config/dhcp
cat /etc/config/firewall

For the ER-X, obviously the wireless file doesn't apply. When you post the configs for the two APs, please make it clear which is which.

1 Like

Thank you. Tried that unfortunately when reverted back to defaults - no difference, no matter on which AP I'm connected to.

No VLANs at all, single network.

The examples I mentioned where VoWifi works was applicable for different locations (difference is that the AP is also directly the router) - none of those two APs works with VoWifi on Samsung (two phones tested), it works only on Oneplus (any location). It doesn't work even with default config, I haven't yet reverted to full stock (I mean Ubiquity default stock fw) because of the limitations. I believe the Samsung phones themselves are not the issue here as they works on different connections.
So when even the default / factory Openwrt doesn't work, not sure it is config issue.

But I know what I will do - I will bring one of the AP from the location it works (I just replaced there hardware keeping the old device aside) and test it with my current location....

Thanks to all of you trying to help, even talking about that helps :wink:

VoWIFI

androids use a random source port, iphones use udp 4500, androids have a timeout of 60 seconds, iphones have 20 seconds.

On PfSense, the default UDP.multiple state table timeout is 60 seconds
To solve this on PfSense, you increase the above table timeout to 900 seconds

In OpenWRT this file is here: https://github.com/openwrt/openwrt/blob/master/package/base-files/files/etc/sysctl.d/10-default.conf

tcp timeout is set to 120 seconds, I'm having trouble finding the udp timeout

1 Like

I was searching around, because indeed I think I haven't tried increasing that, interesting, when I initiate VoWifi call, I see after launching "cat /proc/net/nf_conntrack | grep 4500" following

ipv4     2 udp      17 src=10.0.0.83 dst=31.30.69.152 sport=60020 dport=4500 packets=21 bytes=5302 src=31.30.69.152 dst=MY_IP sport=4500 dport=60020 packets=7 bytes=2656 [HW_OFFLOAD] mark=0 zone=0 use=3
ipv4     2 udp      17 src=10.0.0.24 dst=54.36.111.8 sport=32885 dport=4500 packets=15 bytes=2400 src=54.36.111.8 dst=MY_IP sport=4500 dport=32885 packets=8 bytes=1280 [HW_OFFLOAD] mark=0 zone=0 use=3
ipv4     2 udp      17 58 src=10.255.149.152 dst=54.36.111.8 sport=32885 dport=4500 packets=1157 bytes=33553 [UNREPLIED] src=54.36.111.8 dst=MY_IP sport=4500 dport=22309 packets=0 bytes=0 mark=0 zone=0 use=2
ipv4     2 udp      17 src=10.0.0.95 dst=51.15.16.184 sport=60772 dport=4500 packets=6 bytes=926 src=51.15.16.184 dst=MY_IP0 sport=4500 dport=60772 packets=4 bytes=2168 [HW_OFFLOAD] mark=0 zone=0 use=3
ipv4     2 udp      17 src=10.0.0.161 dst=163.172.73.63 sport=41495 dport=4500 packets=5069 bytes=7014474 src=163.172.73.63 dst=MY_IP sport=4500 dport=41495 packets=2534 bytes=335056 [HW_OFFLOAD] mark=0 zone=0 use=3

Btw, my phone IP is just the 1st 10.0.0.83, the rest are Netatmo devices connected via Wifi and they just works fine...

Anyway, even changing the timeout didn't help, it's indeed 60 sec default.

echo 120 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout