; Date: Tue Dec 24 2024
Tags: WiFi Calling »»»»
WiFi Calling is an excellent tool when traveling outside your home country. Curiously, WiFi Calling did not work with my GL-INET SFT-1200 router, but did work with my GL-X750V2 (Spitz) Router. The solution surprisingly requred an exploration of the Linux internals in the Opal router.

In normal use, WiFi Calling simply works. You enable the WiFi Calling feature in the phone, and whenever your phone is connected to WiFi it automatically connects to your cell phone carrier. The desired result is making/sending and receiving phone calls or text messages, through your home cell phone carrier network, even from the other side of the world.
It always worked so well for me that I never gave a thought to how it worked. I simply enabled the feature in my phone, and it always worked. If your reasoning says it must rely on the SIP protocol, that would be accurate.
In other words, if a given router blocks WiFi Calling then it probably has SIP turned off.
"Not Works" in this case means that the phone does not automatically connect to the WiFi Calling service for your carrier. The result is you're unable to make/receive phone calls using WiFi Calling.
If you're outside your home country, making/receiving phone calls requires paying for roaming service. If available that can be expensive. AT&T International Roaming, for example, is USD $12/day as of this writing. That's what makes WiFi Calling so attractive.
A summary of debugging WiFi Calling
There's a fairly obvious set of steps to debug why WiFi Calling might not work.
Make sure WiFi is enabled on your phone: Obviously for WiFi Calling to work, WiFi must be enabled on your phone, and your phone must be connected to the WiFi.
WiFi Calling is enabled on the phone: The feature is optional, and not all phones support WiFi Calling. Open the settings area of your phone, navigate to the Cellular settings, and enable WiFi Calling. For iPhone this may require entering E-911 data as well.
Set the phone to Airplane Mode: The phone may be preferring a strong cellular system signal over a weak WiFi signal. Airplane mode ensures your phone will solely be on WiFi making it easy to verify it is connecting to the WiFi Calling service over WiFi.
Alternately you can position yourself next to the WiFi router to ensure it has the strongest signal.
A simple verification is using the web browser to search the web.
Update the on-phone software: Make sure you're on the latest stuff.
Reboot both router and phone: A reboot ensures the systems are freshly initialized.
Try a different WiFi network: To verify whether it is an issue with your WiFi router, use a different WiFi network. If WiFi calling works on one WiFi and not another, then it's likely there's an issue with that WiFi router.
You've verified a router problem, then what?
In my case I ran through all those tests and verified the router was the problem. We have two apartments in different cities with different router models in each. In one apartment, WiFi calling calling worked great, but in the other it did not work.
We have a few iPhone's, a Moto G8, and a Google Pixel 4a. All but the Moto G8 support WiFi Calling with AT&T and Tello, both of which are USA carriers. The Moto G8, however, supports WiFi Calling with the carrier in the Europe country where we are staying.
The router which worked great with WiFi Calling is the GL-INET GL-X750V2 4G LTE Smart Router (Spitz). This is a small compact router which directly supports 4G cellular networks with a built-in 4G modem. In that apartment we do not have a wired Internet connection, and the 4G-capable modem works great. WiFi calling did work correctly through this router.
The router which did not work with WiFi Calling is the GL-INET GL-SFT1200 (Opal). This is also a small compact router, which can easily use an external 4G modem. The apartment where this is installed has a wired Internet connection, however.
The question I pondered is - do I replace the Opal router outright? Fortunately a little bit of searching showed a fix, and I didn't have to consider finding a new router and disposing of the Opal.
Reconfiguring the GL-INET GL-SFT1200 (Opal) router to support WiFi Calling
GL-INET is amazingly open about folks mucking about with the logic boards of their routers. For example, the online documentation includes pinouts of the logic board. That is amazingly open considering the policies of other manufacturers.
It turns out GL-INET is refreshingly open about folks using SSH to login to the router and muck about in the configuration files.
Being open to users to mucking with both the logic board and internal configuration files is simply amazing. Most router makers put up barriers to this.
The fix to allow the Opal router to support WiFi calling is to simply login to the router, edit a file, run a couple commands, then reboot the router. It's very easy if you're Linux-tech-chapable.
The details are on the GL-INET support forum, where another router owner had exactly the same problem:
https://forum.gl-inet.com/t/wifi-calling-not-working-with-gl-sft1200-over-starlink/32695/2
Before starting on that, you must first ensure you can SSH into the router. The GL-INET documentation shows how to set up SSH on Windows, Mac and Linux.
https://docs.gl-inet.com/router/en/3/tutorials/ssh/
In the best scenario this command will work as-is:
$ ssh root@192.168.8.1
root@192.168.8.1's password:
BusyBox v1.29.3 () built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 18.06, LEDE
-----------------------------------------------------
root@GL-SFT1200:~#
This is logging in as root
on the IP address of your router. I believe GL-INET defaults to the 192.169.8.1
address but you may have reconfigured this.
The password is the same as what you use to login to the router's web dashboard. It is recommended you change the password from whatever is printed on the label on the router.
One surprising error that I had NEVER seen despite decades of using SSH is this:
Unable to negotiate with 10.0.0.1 port 22: no matching host key type found. Their offer: ssh-rsa
The cure for that is to add the following to ~/.ssh/config
:
host 192.168.8.1
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
Once you're logged in to the router's command-line, the first step is:
root@GL-SFT1200:~# vi /etc/modules.d/nf-nathelper-extra
If you prefer nano, you're out of luck.
In that file make the following change:
# Allow SIP for WiFI Calling
# nf_conntrack_sip
# nf_nat_sip
That is, comment out nf_conntrack_sip
and nf_nat_sip
.
You may be lucky and after rebooting the router WiFi Calling will begin working. If not, run these additional commands:
root@GL-SFT1200:~# uci set firewall.@defaults[0].flow_offloading='0'
root@GL-SFT1200:~# uci set firewall.@defaults[0].flow_offloading_hw='0'
root@GL-SFT1200:~# uci commit firewall
root@GL-SFT1200:~# /etc/init.d/firewall restart
The uci
command comes from OpenWRT and is documented here:
https://openwrt.org/docs/guide-user/base-system/uci
If you're copying these commands from the GL-INET forum, make sure to correct the final quote character.
After running these commands, reboot the router, and WiFi Calling should work.
Guidance on modifying files on GL-INET routers
Maybe you're not comfortable with using SSH to login and run the vi
command to edit files. I've been doing this since the early 1980s on a large variety of Unix-like systems.
GL-INET suggests using WinSCP:
https://docs.gl-inet.com/router/en/3/tutorials/scp/ ... This is an SCP/SFTP client that includes the ability to edit remote files.
For Ubuntu (where I'm typing this), I tried Filezilla, Putty, and Muon. Those GUI programs failed to connect an SCP/SFTP session into the router.
These commands also failed:
$ sftp root@192.168.8.1
root@192.168.8.1's password:
ash: /usr/libexec/sftp-server: not found
Connection closed.
Connection closed
$ sshfs -o allow_other,default_permissions,idmap=user \
root@192.168.8.1:/ ~/mounts/root@192.168.8.1
root@192.168.8.1's password:
remote host has disconnected
The fix to allow SFTP clients to connect to the GL-INET router internal storage is relatively simple but not at all obvious. It's found on the old OpenWRT forum:
https://oldwiki.archive.openwrt.org/doc/howto/sftp.server
One logs in (using SSH) to the router, then run these commands:
opkg update
opkg install openssh-sftp-server
This installs the OpenSSH sftp server.
Once openssh-sftp-server
was installed, both FileZilla and Muon can connect to the SFTP side of the Opal router. Both let you easily browse the remote filesystem, and to edit remote files. With FileZilla some additional configuration is required so it knows what application to use for file editing. With Muon, one simply uses the internal editor.
Another option is to use the file explorer in Ubuntu. At the bottom of the left-hand sidebar is a button labeled "Other locations". Enter sftp://192.168.8.1
and click the Connect button. A dialog window pops up asking for user name and password, which you enter appropriately. Voila the file browser shows the file system of the router. For text files you can right click and open with e.g. Other, and to select a program like Gedit.
Another option is the sshfs
command shown above. That command will now work, and you'll get a file-system mount like this:
$ df -h
Filesystem Size Used Avail Use% Mounted on
...
root@192.168.8.1:/ 94M 2.9M 86M 4% /home/david/mounts/root@192.168.8.1
At that point regular shell commands will work, and you can directly edit files like so:
$ vi ~/mounts/root\@192.168.8.1/etc/hotplug.json
When done, run this command to dismount the file system:
$ umount ~/mounts/root\@192.168.8.1
Another option is the Samba server built-in to the router. I did not try this option, but Samba files exist on the router:
root@GL-SFT1200:~# ls /etc/samba/
lowcase.dat smb.conf smb.conf.template-opkg upcase.dat
secrets.tdb smb.conf.template smbpasswd valid.dat
OpenWRT and GL-INET routers
As you can see above, the GL-INET GL-SFT1200 uses OpenWRT software, as evidenced by the banner when you login to the router. But, there is a distinction here where this specific router is not an official OpenWRT thingy.
The OpenWRT
Table of Hardware page lets you query to see if a particular router is officially supported by OpenWRT.
When a router is officially supported there is a device page, such as this for the Spitz router:
https://openwrt.org/toh/gl.inet/gl-x750
There is no such page for the GL-INET Opal router.
See:
https://openwrt.org/supported_devices for more information.
Conclusion
I had never heard of a WiFi Router not supporting WiFi Calling.
It seems to be a configurable option on some router control panels, to enable/disable WiFi Calling support.
The GL-INET Opal router has no such setting on the control panel. While, it's easy to fix this by logging in to the Linux system built-in to the router, should we customers have to do this? Most of us are not Linux-savvy, and I don't think this passes the Mom Test.
On the other hand it is refreshing for a router manufacturer to be open to us hacking on and manipulating the router internals. As a Linux-savvy certified geek, I'm now interested in learning more about using this mode.
If you've determined your router is blocking WiFi Calling, it is best to try searching the Web before replacing the router. If you have a GL-INET router, the above information will be helpful. If not, you need information specific for your router.
The first search phrase I tried, "debug wificalling fail connect overseas" gave good general information. The second search phase, "GL-SFT1200 wifi calling", got directly to the solution. The pattern here is the model number of your router followed by "wifi calling". For the issue of setting up SFTP on the router, "connect to busybox server with sftp" and "access GL-INET Opal with SFTP" were useful search phrases.
With this information you should be able to enable WiFi Calling on GL-INET routers, or to find information for your specific router.