USB tethering not working in F37

I’m trying to connect to internet via USB tethering with a Samsung Galaxy phone but it doesn’t work. I checked on Windows and it works with the same devices. Is there anything I can do or perhaps any drivers to fix this issue?

  • lsusb shows that the device is connected and has network tethering on
  • But nmcli m shows that the connection is stuck “getting IP configuration” and then failing
  • I tried to change to manual IP, which makes it connected but the network is unusable
  • Running ip link show gets UNKNOWN for the network’s state

Interesting. I normally use the Hot Spot feature on my Galaxy devices to connect to my laptop with it. I haven’t done it through USB in a while, but I might try it later on today.

Did it work?

It works for me on Fedora 37 with Samsung Galaxy M22 running Android 13.

Android Phone

:gear: Settings > Connections > Mobile Hotspot and Tethering > USB tethering > Enable

Fedora Linux

> lsusb -v -v -t
...
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/16p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    /sys/bus/usb/devices/usb1  /dev/bus/usb/001/001
    |__ Port 1: Dev 18, If 0, Class=Wireless, Driver=rndis_host, 480M
        ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)
        /sys/bus/usb/devices/1-1  /dev/bus/usb/001/018
    |__ Port 1: Dev 18, If 1, Class=CDC Data, Driver=rndis_host, 480M
        ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)
        /sys/bus/usb/devices/1-1  /dev/bus/usb/001/018
    |__ Port 1: Dev 18, If 2, Class=Vendor Specific Class, Driver=usbfs, 480M
        ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)
        /sys/bus/usb/devices/1-1  /dev/bus/usb/001/018
...

It should work OOTB unless you use USBGuard, which requires extra rules.

1 Like

I ran lsusb and the output is roughly the same as yours, but it still can’t connect. I also don’t use USBGuard. Here is the output of lsusb:

$ lsusb -vvt
...
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/11p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    /sys/bus/usb/devices/usb2  /dev/bus/usb/002/001
    |__ Port 2: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        ID 1a81:101c Holtek Semiconductor, Inc. 
        /sys/bus/usb/devices/2-2  /dev/bus/usb/002/002
    |__ Port 2: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
        ID 1a81:101c Holtek Semiconductor, Inc. 
        /sys/bus/usb/devices/2-2  /dev/bus/usb/002/002
    |__ Port 4: Dev 7, If 0, Class=Wireless, Driver=rndis_host, 480M
        ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)
        /sys/bus/usb/devices/2-4  /dev/bus/usb/002/007
    |__ Port 4: Dev 7, If 1, Class=CDC Data, Driver=rndis_host, 480M
        ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)
        /sys/bus/usb/devices/2-4  /dev/bus/usb/002/007
    |__ Port 4: Dev 7, If 2, Class=Vendor Specific Class, Driver=, 480M
        ID 04e8:6864 Samsung Electronics Co., Ltd GT-I9070 (network tethering, USB debugging enabled)
        /sys/bus/usb/devices/2-4  /dev/bus/usb/002/007
...
1 Like

Unplug Ethernet cable if any, then enable tethering and check the output:

nmcli connection add type ethernet connection.id ether
nmcli connection up id ether
sleep 5; PAGER= nmcli connection show id ether
Connection 'ether' (204e94ab-1652-4d44-92e4-f3e8e622c6c4) successfully added.
Error: Connection activation failed: IP configuration could not be reserved (no available address, timeout, etc.)
Hint: use 'journalctl -xe NM_CONNECTION=204e94ab-1652-4d44-92e4-f3e8e622c6c4 + NM_DEVICE=enp0s20u1' to get more details.
connection.id:                          ether
connection.uuid:                        204e94ab-1652-4d44-92e4-f3e8e622c6c4
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              --
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   0
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
connection.dns-over-tls:                -1 (default)
connection.mptcp-flags:                 0x0 (default)
connection.wait-device-timeout:         -1
connection.wait-activation-delay:       -1
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          no
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     auto
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
802-3-ethernet.accept-all-mac-addresses:-1 (default)
ipv4.method:                            auto
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         --
ipv4.gateway:                           --
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-iaid:                         --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.dhcp-hostname-flags:               0x0 (none)
ipv4.never-default:                     no
ipv4.may-fail:                          yes
ipv4.required-timeout:                  -1 (default)
ipv4.dad-timeout:                       -1 (default)
ipv4.dhcp-vendor-class-identifier:      --
ipv4.link-local:                        0 (default)
ipv4.dhcp-reject-servers:               --
ipv6.method:                            auto
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       --
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.routing-rules:                     --
ipv6.ignore-auto-routes:                no
ipv6.ignore-auto-dns:                   no
ipv6.never-default:                     no
ipv6.may-fail:                          yes
ipv6.required-timeout:                  -1 (default)
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     default
ipv6.ra-timeout:                        0 (default)
ipv6.mtu:                               auto
ipv6.dhcp-duid:                         --
ipv6.dhcp-iaid:                         --
ipv6.dhcp-timeout:                      0 (default)
ipv6.dhcp-send-hostname:                yes
ipv6.dhcp-hostname:                     --
ipv6.dhcp-hostname-flags:               0x0 (none)
ipv6.token:                             --
proxy.method:                           none
proxy.browser-only:                     no
proxy.pac-url:                          --
proxy.pac-script:                       --
GENERAL.NAME:                           ether
GENERAL.UUID:                           204e94ab-1652-4d44-92e4-f3e8e622c6c4
GENERAL.DEVICES:                        enp0s20u1
GENERAL.IP-IFACE:                       --
GENERAL.STATE:                          activating
GENERAL.DEFAULT:                        no
GENERAL.DEFAULT6:                       no
GENERAL.SPEC-OBJECT:                    --
GENERAL.VPN:                            no
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/6
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/25
GENERAL.ZONE:                           --
GENERAL.MASTER-PATH:                    --

1 Like

I had a similar problem when my old phone was connected to OpenVPN, so I had to disconnect the VPN to make tethering work.

I got my VPN down (if 1.1.1.1 is one) but still nothing

It looks like NetworkManager cannot obtain a DHCP lease for some reason.
Verify your firewall configuration is not blocking traffic:

sudo firewall-cmd --list-all

You can also try to analyze traffic to confirm that DHCP operates correctly.
Start capturing packets before enabling tethering:

sudo tcpdump -evni any udp port 67

Here are the outputs of the programs:

$ sudo firewall-cmd --list-all
FedoraWorkstation (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s20u4
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 1025-65535/udp 1025-65535/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

It also seems like tcpdump is receiving roughly the same packets. Here is one of them:

16:14:40.652647 enp0s20u4 Out ifindex 4 d6:7e:03:62:14:a5 ethertype IPv4 (0x0800), length 331: (tos 0xc0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 311)
    0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from d6:7e:03:62:14:a5, length 283, xid 0x14b02a7, secs 1, Flags [none]
	  Client-Ethernet-Address d6:7e:03:62:14:a5
	  Vendor-rfc1048 Extensions
	    Magic Cookie 0x63825363
	    DHCP-Message (53), length 1: Discover
	    Client-ID (61), length 7: ether d6:7e:03:62:14:a5
	    Parameter-Request (55), length 17: 
	      Subnet-Mask (1), Time-Zone (2), Domain-Name-Server (6), Hostname (12)
	      Domain-Name (15), MTU (26), BR (28), Classless-Static-Route (121)
	      Default-Gateway (3), Static-Route (33), YD (40), YS (41)
	      NTP (42), Unknown (119), Classless-Static-Route-Microsoft (249), Unknown (252)
	      RP (17)
	    MSZ (57), length 2: 576
	    Hostname (12), length 5: "dummy"
1 Like

You can also try the following:

  • Upgrade Android firmware to the latest available version.
  • Use another USB port if possible to isolate hardware related issues.
  • Change the Fedora hostname to make sure it is not the reason the server is ignoring the DHCP discovery message sent by the client.

None of it worked sadly. (I’m using Android 13 already)

1 Like