Bluetooth tethering to an iPhone

I am trying to use an iPhone for internet access for a Tumbleweed install where there is only mobile phone coverage and no separate internet access.

I have installed blueman (Bluetooth manager). I can scan for my iPhone and have paired the two and in the Bluetooth manager’s window I have my phone showing up with 50% signal strength on both receive and transmit and 100% quality. All good. The phone reports that the devices are connected.

I start my “Personal Hotspot” on the phone (in this mode I can connect to it with wifi or USB tether and get internet access). The phone appears to be advertising a network access point service as it appears in the drop down menu for the device. However when I try to connect to it I get the following error:

Connection Failed: Could not find device F0:78:07:BE:34:D5

That is indeed the MAC address of my phone. A quick check shows no extra networking devices have been created.

Any ideas? Anyone actually made this work?

PS Just in case it’s relevant, it’s an iPhone 8 with iOS 14.4


Update. I just marked the device as trusted and can connect and it creates a network device bnep0 but gives an error message saying it was unable to get an IP address for the device.

I assigned an IP manually to bnep0 and setup a default route but no internet access. Here is what I have:

ProgressTM:~ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 08:00:27:71:71:c0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.25.154/24 brd 192.168.25.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2a00:23c5:b39f:7a01:6599:9999:b451:1f7c/64 scope global temporary dynamic 
       valid_lft 601416sec preferred_lft 82627sec
    inet6 2a00:23c5:b39f:7a01:a00:27ff:fe71:71c0/64 scope global dynamic mngtmpaddr 
       valid_lft 2590941sec preferred_lft 603741sec
    inet6 fdaa:bbcc:ddee:0:a7df:88f3:a4ec:6b13/64 scope global temporary dynamic 
       valid_lft 601415sec preferred_lft 82626sec
    inet6 fdaa:bbcc:ddee:0:a00:27ff:fe71:71c0/64 scope global dynamic mngtmpaddr 
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe71:71c0/64 scope link 
       valid_lft forever preferred_lft forever
9: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 5c:f3:70:62:86:dc brd ff:ff:ff:ff:ff:ff
    inet 10.1.2.3/24 scope global bnep0
       valid_lft forever preferred_lft forever
    inet6 fe80::5ef3:70ff:fe62:86dc/64 scope link 
       valid_lft forever preferred_lft forever
ProgressTM:~ # ip route
default via 10.1.2.3 dev bnep0 
10.1.2.0/24 dev bnep0 proto kernel scope link src 10.1.2.3  
192.168.25.0/24 dev enp0s3 proto kernel scope link src 192.168.25.154 linkdown 
ProgressTM:~ # ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 10.1.2.3 icmp_seq=1 Destination Host Unreachable
From 10.1.2.3 icmp_seq=2 Destination Host Unreachable
From 10.1.2.3 icmp_seq=3 Destination Host Unreachable
From 10.1.2.3 icmp_seq=4 Destination Host Unreachable
From 10.1.2.3 icmp_seq=5 Destination Host Unreachable

Hi
I just turn on the same model iPhone hot spot and connect to it that way with wifi, never worried about bluetooth :wink:

Not sure if the bluetooth setup on the phone is designed for network access, likely need some software to turn it into a modem and then connect to an ISP (dial up networking)…

Try it with another device(s).
Your cellular pay plan may restrict tethering.
You may overcome this by editing TTL value for net packages or by another ways.
Maybe cable connection will work.

Often BT needs root access (sudo mode) - in openSUSE part.

Tethering is definitely enabled with my plan and I can use it as a wifi hotspot and even as a usb tether. The iPhone advertises that bluetooth tethering is available. Mind you I have found anything bluetooth that isn’t a mouse or headset descends into a nightmare very quickly.

Works here perfectly. Just downloaded blueman and paired the devices. I’m using the desktop applet. rightclip to the fruit phone and go to “Network Access Point (NAP)”. Switched off wlan to be sure. Just posting via that connection.
Thanks for the thread, BTW. I wasn’t aware of blueman.:wink:

Edit:
Sorry, should share my details: iPhone 8, iOS 14.1.1, Leap 15.2, KDE.
If you need any other details, please let me know.

I have bluez installed and paired them before. Don’t know if that is necessary. Never asked for any IP address but I have to say, I never tried on CLI.

Adapter           /org/bluez/hci0

That’s really useful, many thanks. It is what I was trying to do and what I was expecting to happen.

I have been doing a ton of testing and I now find that I can’t use my hotspot by wifi tethering either and that an IP of 196.254.xx.xx/16 is being assigned (i.e. an automatic IP address and assigned when DHCP fails). So I think that something fundamentally broke DHCP wise in my iPhone and there are not any issues with BT and Linux.

Thanks everyone for the comments.

Oh, well. And now try trouble shooting with an Apple device. Update to 14.4.1 or did just not bother mentioning the ..1 version?
FWIW, here is my route using the personal hotspot:

kasi@pluto:~> route 
Kernel IP Routentabelle 
Ziel            Router          Genmask         Flags Metric Ref    Use Iface 
default         172.20.10.1     0.0.0.0         UG    750    0        0 bnep0 
172.20.10.0     0.0.0.0         255.255.255.240 U     750    0        0 bnep0 
kasi@pluto:~> 

Just for your info, I have never used 172.20.10.1. That was chosen by that phone.

Thanks. Trouble shooting an Apple device, oh joy! I did update last night to 14.4.1 and hope that might make a difference but not checked yet. Given your IP range I went searching on the net and found this:

The iPhone has a small DHCP address pool that can give out 16 addresses (172.20.10.0-172.20.10.15). Of these 16 addresses are 3 taken by the network, broadcast (172.20.10.0 and 172.20.10.15) and iPhone itself (172.20.10.1). Leaving 13 addresses for other devices.

It may just be that with all my testing, swapping systems, I have just run out of IP addresses in the pool. 24 hours may just clear the problem?
*
*

I’m crossing my fingers. Otherwise, please let me know if you need any details to share for further trouble shooting.

Just out of interest: Does it work now?
FWIW, I have found some settings in blueman which might have some effect.
(hope the English terms are correct)
menu - view - local services
There’s two options PAN-support and DUN-support. You can choose Network Manager or Blueman (dhclient). In my settings it’s both Network Manager.

Really appreciate your help on this. I have it working now thanks to your comments but with some limitations.

If I set PAN-support and DUN-support to Network Manager it says it fails to find the device when I try and connect. But I am using wicked to manage my networks. If I change to Network Manager and reboot all is fine. So it just works if I go Network Manager everywhere.

If I switch back to wicked and set PAN-support and DUN-support to Blueman then it simply fails to get an IP when trying to finalise the setup (the problem I originally diagnosed as a DHCP pool issue on the iPhone) and I can’t find a way of getting the IP manually with a seperate DHCP client.

I have an additional problem here. The machine in question is running headless. When I logon using Remote Desktop there is already running the Blueman App and it really does not like having two instances of the Blueman applet active at the same time it looks like. Solution here I guess is to disable auto logon, I mean it’s not like it’s useful when running headless!

So “Yes” got it working :slight_smile: but several niggles to sort out :\ … many thanks for the help.

Glad to hear it works - partly. I have wicked running on my desktop and an AVM bluetooth adapter. I’ll try later when I’ve got some time. Let’s see if I’m going to run into the same issues.

Ha! If that wasn’t an epic fail… I couldn’t even get the phone to a proper pairing with the desktop. After messing about with the settings, unnerved, I ended up with the most stupid action, clicking on “ignore the device” in the fruit phone. Why the …? And that’s it for a while. Yeah, there’s advice on the how net to get ignored devices back - which is rather useless if the required pairing hasn’t ever worked before. After all, I don’t really need it. I have deleted all bluetooth related packages and will search and erase all remaining setting before reinstalling. Maybe the fruit will give up rejecting the pairing requests.
And to avoid this post being moved into general chit-chat, here’s some findings in the blueman docs: “Dependencies.md” says, blueman needs “net-tools” and / or “iproute2”:

/usr/share/doc/packages/blueman/

Oh well, that wasn’t supposed to sound as bitter as it did. Life’s too short for that!:slight_smile:
The advice from Cupertino is something like “just press the pairing button of your device again…”. Trying the equivalent there’s a few seconds time to enter some PIN before the message that the request was rejected pops up. Apparently, the overrated mobile phone just keeps doing what it has been told for good: ignoring. And that’s what I shall be doing for the time being. :stuck_out_tongue:
Sorry that I can’t be of further help, here. I was quite curious to compare the results. I’ll check from time to time if the phone might be convinced.

Your efforts are much appreciated. I have found pairing to be very hit and miss. Popup windows with conformation dialogues just don’t appear. When things start getting iffy like that I have reverted to bluetoothctl from the command line and paired using that utility which is a bit tedious but often effective. I’ll keep the thread updated as and when …

Hi JulinaB,

Many thanks for the useful information. (Who’s helping whom, here?) lol! bluetoothctl shell seems quite powerful. I got the phone back and managed to pair it. Now I can’t connect but at least I’m back to where I was in #14. rotfl! I’ll keep on trying. Although I think you’ll have your issue settled sooner than I can reproduce it (or not).:slight_smile:

Horay!
At last after all the efforts I can…

…reproduce your problem. Same here with wicked. Can’t get an IP address:

mars:~ # journalctl | grep blue
(...)
Mar 22 21:46:23 mars bluetoothd[1249]:  connected
Mar 22 21:46:23 mars bluetoothd[1249]: bnep0 disconnected
Mar 22 21:46:23 mars blueman-applet[15354]: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8d in position 0: invalid start byte
Mar 22 21:46:23 mars blueman-applet[15354]: blueman-applet 21.46.23 WARNING  DhcpClient:51 err       : g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.Failed: Traceback (most recent call last):
Mar 22 21:46:23 mars blueman-applet[15354]:   File "/usr/lib/python3.6/site-packages/blueman/bluez/Base.py", line 102, in get
Mar 22 21:46:23 mars blueman-applet[15354]:     None)
Mar 22 21:46:23 mars blueman-applet[15354]: gi.repository.GLib.GError: g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs: No such property 'Interface' (16)
Mar 22 21:46:23 mars blueman-applet[15354]: During handling of the above exception, another exception occurred:
Mar 22 21:46:23 mars blueman-applet[15354]: Traceback (most recent call last):
Mar 22 21:46:23 mars blueman-applet[15354]:   File "/usr/lib/python3.6/site-packages/blueman/main/DbusService.py", line 122, in _handle_method_call
Mar 22 21:46:23 mars blueman-applet[15354]:     method(*(args + (ok, lambda exception: self._return_dbus_error(invocation, exception))))
Mar 22 21:46:23 mars blueman-applet[15354]:   File "/usr/lib/python3.6/site-packages/blueman/plugins/mechanism/Network.py", line 34, in _run_dhcp_client
Mar 22 21:46:23 mars blueman-applet[15354]:     dh = DhcpClient(BluezNetwork(obj_path=object_path)"Interface"])
Mar 22 21:46:23 mars blueman-applet[15354]:   File "/usr/lib/python3.6/site-packages/blueman/bluez/Base.py", line 139, in __getitem__
Mar 22 21:46:23 mars blueman-applet[15354]:     return self.get(key)
Mar 22 21:46:23 mars blueman-applet[15354]:   File "/usr/lib/python3.6/site-packages/blueman/bluez/Base.py", line 110, in get
Mar 22 21:46:23 mars blueman-applet[15354]:     raise parse_dbus_error(e)
Mar 22 21:46:23 mars blueman-applet[15354]: blueman.bluez.errors.BluezDBusException: org.freedesktop.DBus.Error.InvalidArgs No such property 'Interface'
Mar 22 21:46:23 mars blueman-applet[15354]:  (0)
Mar 22 21:46:43 mars bluetoothd[1249]: bnep%d connected
Mar 22 21:46:44 mars blueman-mechanism[15367]: blueman-mechanism 21.46.44 ERROR    DhcpClient:71 _check_client: dhcp client failed with status code 1
Mar 22 21:46:44 mars blueman-mechani[15367]: blueman-mechanism ERROR DhcpClient:71 _check_client: dhcp client failed with status code 1
Mar 22 21:46:44 mars blueman-applet[15354]: blueman-applet 21.46.44 WARNING  DhcpClient:51 err       : g-dbus-error-quark: GDBus.Error:org.freedesktop.DBus.Error.Failed: 1 (0)

I’m sure you have already tried what is possible here. Probably that should be reported…
and you have already. :wink:
Let’s see…

Nice one! Congratulations. Perseverance always works … well most times … sometimes

I guess the question is now if it’s just iPhones or Android devices also behave the same? Is it actually an Apple Issue? I have no means of testing it here.

Also would be interested in any comments from the networking gurus here …