LINUX.ORG.RU

USB-tethering работает на старом телефоне, но не работает на новом

 , , , ,


0

1

Сабж. Куда копать?

Gentoo, AMD64, ядро 5.15.32, OpenRC.

Со старым телефоном:

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 018: ID 17ef:7ad6 Lenovo Android
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial
...
Bus 008 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 009 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

С новым то же, но

Bus 001 Device 010: ID 12d1:108a Huawei Technologies Co., Ltd. MNA-LX9

вместо Lenovo Android.

dmesg для старого:

[95942.121950] usb 1-4: new high-speed USB device number 18 using ehci-pci
[95942.251558] usb 1-4: New USB device found, idVendor=17ef, idProduct=7ad6, bcdDevice= 3.18
[95942.251570] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[95942.251576] usb 1-4: Product: Android
[95942.251580] usb 1-4: Manufacturer: Android
[95942.251584] usb 1-4: SerialNumber: 29f25081
[95942.253897] rndis_host 1-4:1.0 usb0: register 'rndis_host' at usb-0000:00:12.2-4, RNDIS device, 06:7d:55:2f:03:af
[95942.289292] rndis_host 1-4:1.0 enp0s18f2u4: renamed from usb0

для нового:

[48479.493890] usb 1-4: new high-speed USB device number 6 using ehci-pci
[48479.624851] usb 1-4: New USB device found, idVendor=12d1, idProduct=108a, bcdDevice= 5.10
[48479.624863] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[48479.624868] usb 1-4: Product: MNA-LX9
[48479.624872] usb 1-4: Manufacturer: HUAWEI
[48479.624875] usb 1-4: SerialNumber: JUP0224109002027
[48479.676635] usbcore: registered new interface driver cdc_ether
[48479.679944] rndis_host 1-4:1.0 usb0: register 'rndis_host' at usb-0000:00:12.2-4, RNDIS device, 66:8d:69:17:13:74
[48479.680007] usbcore: registered new interface driver rndis_host
[48479.711297] rndis_host 1-4:1.0 enp0s18f2u4: renamed from usb0
[48877.717711] usb 1-4: USB disconnect, device number 6
[48877.717794] rndis_host 1-4:1.0 enp0s18f2u4: unregister 'rndis_host' usb-0000:00:12.2-4, RNDIS device

(дополнение: последние 2 строки могут не появиться, но модем всё равно не работает)

Автоматическое подключение USB-модема не настроено. Я каждый раз беру имя из dmesg и создаю соответствующий линк на /etc/init.d/net.lo, в данном случае — /etc/init.d/net.enp0s18f2u4 и запускаю net.enp0s18f2u4 start. Для старого этого хватает, для нового — ничего не ресолвится и не пингуется.

При запуске net.enp0s18f2u4 с новым пишет:

# /etc/init.d/net.enp0s18f2u4 -v start
net.enp0s18f2u4           |net.enp0s18f2u4           | * Executing: /usr/libexec/rc/sh/openrc-run.sh /usr/libexec/rc/sh/openrc-run.sh /etc/init.d/net.enp0s18f2u4 start
net.enp0s18f2u4           | * Bringing up interface enp0s18f2u4
net.enp0s18f2u4           | *   Skipping module adsl due to missing program: adsl-start pppoe-start
net.enp0s18f2u4           | *   Skipping module br2684ctl due to missing program: br2684ctl
net.enp0s18f2u4           | *   Skipping module clip due to missing program: atmsigd
net.enp0s18f2u4           | *   Skipping module netplugd due to missing program: netplugd
net.enp0s18f2u4           | *   Skipping module ifplugd due to missing program: ifplugd
net.enp0s18f2u4           | *   Skipping module ipppd due to missing program: ipppd
net.enp0s18f2u4           | *   Skipping module iwconfig due to missing program: iwconfig
net.enp0s18f2u4           | *   Skipping module iwd due to missing program: /usr/libexec/iwd
net.enp0s18f2u4           | *   Skipping module iw due to missing program: iw
net.enp0s18f2u4           | *   Skipping module firewalld due to missing program: firewall-cmd
net.enp0s18f2u4           | *   Skipping module udhcpc due to missing program: busybox
net.enp0s18f2u4           | *   Skipping module dhclient due to missing program: dhclient
net.enp0s18f2u4           | *   Skipping module dhclientv6 due to missing program: dhclient
net.enp0s18f2u4           | *   Skipping module wireguard due to missing program: wg
net.enp0s18f2u4           | *   Loaded modules: apipa arping bonding l2tp tuntap bridge ccwgroup ethtool dummy hsr macvlan macchanger macnet qmi wpa_supplicant ssidnet iproute2 pppd system vlan dhcpcd ip6rd ip6to4 veth
net.enp0s18f2u4           | *   ip link set dev enp0s18f2u4 up
net.enp0s18f2u4           | *   Configuring enp0s18f2u4 for MAC address 9A:AF:12:F5:CB:8E ...                                                                         [ ok ]
net.enp0s18f2u4           | *   config_enp0s18f2u4 not specified; defaulting to DHCP
net.enp0s18f2u4           | *   dhcp ...
net.enp0s18f2u4           | *     Running dhcpcd ...
net.enp0s18f2u4           |dhcpcd-10.2.2 starting
net.enp0s18f2u4           |DUID 00:01:00:01:1a:ee:99:27:f4:6d:04:45:83:c4
net.enp0s18f2u4           |enp0s18f2u4: IAID 12:f5:cb:8e
net.enp0s18f2u4           |enp0s18f2u4: adding address fe80::387c:bdb6:1a53:efe9
net.enp0s18f2u4           |enp0s18f2u4: soliciting a DHCP lease
net.enp0s18f2u4           |enp0s18f2u4: soliciting an IPv6 router
net.enp0s18f2u4           |enp0s18f2u4: probing for an IPv4LL address
net.enp0s18f2u4           |enp0s18f2u4: using IPv4LL address 169.254.201.93
net.enp0s18f2u4           |enp0s18f2u4: adding route to 169.254.0.0/16
net.enp0s18f2u4           |enp0s18f2u4: adding default route                                                                                                          [ ok ]
net.enp0s18f2u4           | *     received address 169.254.201.93/16                                                                                                  [ ok ]
net.enp0s18f2u4           | *   ip -4 route flush table cache dev enp0s18f2u4
net.enp0s18f2u4           | *   ip -6 route flush table cache dev enp0s18f2u4

со старым:

# /etc/init.d/net.enp0s18f2u4 -v start
net.enp0s18f2u4           |net.enp0s18f2u4           | * Executing: /usr/libexec/rc/sh/openrc-run.sh /usr/libexec/rc/sh/openrc-run.sh /etc/init.d/net.enp0s18f2u4 start
net.enp0s18f2u4           | * Bringing up interface enp0s18f2u4
net.enp0s18f2u4           | *   Skipping module adsl due to missing program: adsl-start pppoe-start
net.enp0s18f2u4           | *   Skipping module br2684ctl due to missing program: br2684ctl
net.enp0s18f2u4           | *   Skipping module clip due to missing program: atmsigd
net.enp0s18f2u4           | *   Skipping module netplugd due to missing program: netplugd
net.enp0s18f2u4           | *   Skipping module ifplugd due to missing program: ifplugd
net.enp0s18f2u4           | *   Skipping module ipppd due to missing program: ipppd
net.enp0s18f2u4           | *   Skipping module iwconfig due to missing program: iwconfig
net.enp0s18f2u4           | *   Skipping module iwd due to missing program: /usr/libexec/iwd
net.enp0s18f2u4           | *   Skipping module iw due to missing program: iw
net.enp0s18f2u4           | *   Skipping module firewalld due to missing program: firewall-cmd
net.enp0s18f2u4           | *   Skipping module udhcpc due to missing program: busybox
net.enp0s18f2u4           | *   Skipping module dhclient due to missing program: dhclient
net.enp0s18f2u4           | *   Skipping module dhclientv6 due to missing program: dhclient
net.enp0s18f2u4           | *   Skipping module wireguard due to missing program: wg
net.enp0s18f2u4           | *   Loaded modules: apipa arping bonding l2tp tuntap bridge ccwgroup ethtool dummy hsr macvlan macchanger macnet qmi wpa_supplicant ssidnet iproute2 pppd system vlan dhcpcd ip6rd ip6to4 veth
net.enp0s18f2u4           | *   ip link set dev enp0s18f2u4 up
net.enp0s18f2u4           | *   Configuring enp0s18f2u4 for MAC address 9A:AF:12:F5:CB:8E ...                                                                         [ ok ]
net.enp0s18f2u4           | *   config_enp0s18f2u4 not specified; defaulting to DHCP
net.enp0s18f2u4           | *   dhcp ...
net.enp0s18f2u4           | *     Running dhcpcd ...
net.enp0s18f2u4           |dhcpcd-10.2.2 starting
net.enp0s18f2u4           |DUID 00:01:00:01:1a:ee:99:27:f4:6d:04:45:83:c4
net.enp0s18f2u4           |enp0s18f2u4: IAID 12:f5:cb:8e
net.enp0s18f2u4           |enp0s18f2u4: soliciting an IPv6 router
net.enp0s18f2u4           |enp0s18f2u4: soliciting a DHCP lease
net.enp0s18f2u4           |enp0s18f2u4: offered 192.168.42.39 from 192.168.42.129
net.enp0s18f2u4           |enp0s18f2u4: probing address 192.168.42.39/24
net.enp0s18f2u4           |enp0s18f2u4: leased 192.168.42.39 for 3600 seconds
net.enp0s18f2u4           |enp0s18f2u4: adding route to 192.168.42.0/24
net.enp0s18f2u4           |enp0s18f2u4: adding default route via 192.168.42.129                                                                                       [ ok ]
net.enp0s18f2u4           | *     received address 192.168.42.39/24                                                                                                   [ ok ]
net.enp0s18f2u4           | *   ip -4 route flush table cache dev enp0s18f2u4
net.enp0s18f2u4           | *   ip -6 route flush table cache dev enp0s18f2u4

В старом телефоне при подключении кабеля tethering не предлагает, нужно искать в настройках. В новом настройки RNDIS спрятали ещё глубже — «только для разработчиков».

Специально для анонимного параноика, у которого власти воруют DNS: до ресолвинга имён дело не доходит. Ничего не пингуется. При подключении не задаётся гейт. На старом телефоне всё работает, поэтому твоя бредовая конструкция о саботаже неприменима.

UPD: Не связана ли причина с usb 1-4: USB disconnect, device number 6 через 400с после подключения нового телефона? Что с этим делать? Самопроизвольное отключение прекратило воспроизводиться.

★★★★★

Последнее исправление: question4 (всего исправлений: 5)
Ответ на: комментарий от ALiEN175

подозрительно одинаковый интерфейс enp0s18f2u4.

Да, странно. Тем более, в прошлые разы для старого создавались enp3s0u1u2u1 и enp3s0u1u2u3.

В правилах udev ничего не нашалили?

Всё дефолтное, ничего никогда не менял.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 2)
Ответ на: комментарий от question4

Имена интерфейсов придумывают правила udev. Если втыкаешь одно и то же usb устройство в один и тот же usb порт, имя интерфейса не изменится. Rndis композиция у этих двух телефонов видимо тоже одинаковая. Вот и получаются одинаковые имена интерфейсов.

Если по делу: хватит запускать с умным видом скрипты. Всё равно понятия не имеешь как они работают. Поставь уже NetworkManager. Там магии ещё больше, но она работает стабильнее.

iliyap ★★★★★
()

Судя по выводу, скрипт получил по DHCP адрес 192.168.42.39/24 и дефолтный шлюз 192.168.42.129. Дефолтный шлюз на пинги отвечает? Мутных правил iptables на хосте нет? Тогда вопросы не к хосту, а к телефону.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Судя по выводу, скрипт получил по DHCP адрес 192.168.42.39/24 и дефолтный шлюз 192.168.42.129.

Прошу прощения, опечатка. Шлюз 192.168.42.129 — когда работает. Когда не работает, выводит:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         0.0.0.0         0.0.0.0         U     1000016 0        0 enp0s18f2u4
loopback        localhost       255.0.0.0       UG    0      0        0 lo
link-local      0.0.0.0         255.255.0.0     U     16     0        0 enp0s18f2u4

При пинговании идёт From 169.254.201.93 icmp_seq=1 Destination Host Unreachable или From 192.168.88.1 icmp_seq=1 Destination Net Unreachable.

Мутных правил iptables на хосте нет?

Всё дефолтное, никогда ничего не правил.

Тогда вопросы не к хосту, а к телефону.

Куда копать?

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

169.254.201.93/16 это IPv4 link-local address, который хост присвоил себе сам из-за того, что DHCP сервер не отвечает. Это вопрос к телефону, почему он не отвечает на DHCP запросы после включения шаринга интернета по usb rndis.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Это вопрос к телефону, почему он не отвечает на DHCP запросы после включения шаринга интернета по usb rndis.

Кажется, нашёл, пока описывал проблему на 4PDA: предпоследняя строка лога dmesg: usb 1-4: USB disconnect, device number 6

Понять бы теперь, что с этим делать.

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

Куда копать?

У меня для включения режима USB-модема надо (внезапно!) зайти в настройки точки доступа и там поставить флажок «USB-модем». После этого на компьютере создаëтся сетевой интерфейс, который или начинает работать сразу, или нужно его скормить dhcpcd или другому DHCP-клиенту, чтоб заработал.

yars068 ★★★★★
()
Ответ на: комментарий от yars068

У меня для включения режима USB-модема надо (внезапно!) зайти в настройки точки доступа и там поставить флажок «USB-модем». После этого на компьютере создаëтся сетевой интерфейс,

Именно так.

который или начинает работать сразу, или нужно его скормить dhcpcd или другому DHCP-клиенту, чтоб заработал.

Как я понимаю, у меня это делает скрипт https://pastebin.com/p2wU7D6d Проблема в том, что старый телефон на запрос DHCP отвечает, а новый — нет.

question4 ★★★★★
() автор топика
Ответ на: комментарий от question4

А если всё сделать вручную, а не скриптом? Ничего не поменяется ли? И попробуйте доставить usb_modeswitch, когда-то он для работы режима модема в телефонах был нужен. У меня, кстати, тоже когда-то была проблема с мобильником в режиме модема, так и не смог исправить. Со временем проблема отпала сама собой :)

yars068 ★★★★★
()
Последнее исправление: yars068 (всего исправлений: 1)
Ответ на: комментарий от yars068

usb_modeswitch

Стоит. Что с ним делать? «RNDIS device» компьютер видит. Только это устройство ему не отвечает.

А если всё сделать вручную, а не скриптом?

Как послать запрос DHCP на телефон?

question4 ★★★★★
() автор топика
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от yars068

dhcpcd $IFACE

Никакого эффекта. С какими ключами запускать? Попробовал с --test:

# dhcpcd -T enp0s18f2u4
dhcpcd-10.2.2 starting
DUID 00:01:00:01:1a:ee:99:27:f4:6d:04:45:83:c4
dhcp6_openudp: Address already in use
enp0s18f2u4: IAID 12:f5:cb:8e
enp0s18f2u4: soliciting a DHCP lease
enp0s18f2u4: soliciting an IPv6 router
enp0s18f2u4: using IPv4LL address 169.254.201.93
interface=enp0s18f2u4
pid=1771
protocol=ipv4ll
reason=TEST
ifcarrier=up
ifflags=69699
ifmetric=1020
ifmtu=1500
ifwireless=0
new_broadcast_address=169.254.255.255
new_ip_address=169.254.201.93
new_network_number=169.254.0.0
new_subnet_cidr=16
new_subnet_mask=255.255.0.0
dhcpcd exited
question4 ★★★★★
() автор топика
Ответ на: комментарий от yars068

Без параметров вообще.

После остановки скриптов:

# dhcpcd enp0s18f2u4
dhcpcd-10.2.2 starting
DUID 00:01:00:01:1a:ee:99:27:f4:6d:04:45:83:c4
enp0s18f2u4: waiting for carrier
enp0s18f2u4: carrier acquired
enp0s18f2u4: IAID 12:f5:cb:8e
enp0s18f2u4: adding address fe80::387c:bdb6:1a53:efe9
enp0s18f2u4: soliciting a DHCP lease
enp0s18f2u4: soliciting an IPv6 router
enp0s18f2u4: probing for an IPv4LL address
enp0s18f2u4: using IPv4LL address 169.254.201.93
enp0s18f2u4: adding route to 169.254.0.0/16
enp0s18f2u4: adding default route

После этого route начинает выводить на 2 строки больше:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         0.0.0.0         0.0.0.0         U     1001020 0        0 enp0s18f2u4
loopback        localhost       255.0.0.0       UG    0      0        0 lo
link-local      0.0.0.0         255.255.0.0     U     1020   0        0 enp0s18f2u4

Всё так же, как и со скриптом. 169.254.201.93 пингуется, для прочих IP пишет «From 169.254.201.93 icmp_seq=1 Destination Host Unreachable».

question4 ★★★★★
() автор топика