1

I have a Raspberry Pi running the latest Raspberry Pi OS with Linux Kernel 6.6.

I have a Quectel EC25 modem with an active SIM card that successfully connects to the internet. I can ping 8.8.8.8 through this wwan0 interface, but not google.com. I have tried setting the nameserver entries in resolv.conf, however DNS seems to keep failing. I have disabled NetworkManager and systemd-resolved services so that they do not interface ( they did not improve the DNS situation when running ). I have tried nslookup and dig with the wwan0 interface inside a network namespace and they immediately succeed. I don't understand how dig/nslookup work, but not ping. How can I get DNS to work through the cellular modem?

Network namespace setup script:

root@raspberrypi:/home/pi/Desktop# cat create_and_enter_ns.sh
#!/bin/bash

MODEM_IF="wwan0"

ip netns add cellular ip link set $MODEM_IF netns cellular ip netns exec cellular bash

Connection script ran from inside the network namespace:

root@raspberrypi:/home/pi/Desktop# cat connect-cellular.sh
#!/bin/bash

MODEM_IF="wwan0"

echo "-------------------------------------------------------" echo "*** Setting up cellular modem ..."

ip link set $MODEM_IF down echo 'Y' | sudo tee /sys/class/net/wwan0/qmi/raw_ip ip link set $MODEM_IF up qmicli -p -d /dev/cdc-wdm0 --device-open-net='net-raw-ip|net-no-qos-header' --wds-start-network="apn='super',ip-type=4" --client-no-release-cid

echo "-------------------------------------------------------" echo "*** Requesting IP Address for modem ..."

udhcpc -q -f -i wwan0

echo "-------------------------------------------------------" echo "*** Displaying cellular connection details ..."

qmicli -d /dev/cdc-wdm0 --wds-get-current-settings

echo "-------------------------------------------------------" echo "*** Setting nameservers in resolv.conf ..."

echo "nameserver 8.8.8.8" > /etc/resolv.conf echo "nameserver 8.8.4.4" > /etc/resolv.conf

echo "-------------------------------------------------------" echo "*** Displaying routes ..."

ip route route

echo "-------------------------------------------------------" echo "*** DNS Lookups ..."

nslookup google.com dig google.com

echo "-------------------------------------------------------" echo "*** Attempting pings ..."

echo "*** Pinging 8.8.8.8 ..." ping -c 3 -W 3 8.8.8.8

echo "*** Pinging google.com ..." ping -c 3 -W 3 google.com

echo "-------------------------------------------------------" echo "*** Done ..."

Connection script output:

root@raspberrypi:/home/pi/Desktop# ./connect-cellular.sh
-------------------------------------------------------
*** Setting up cellular modem ...
Y
[/dev/cdc-wdm0] Network started
        Packet data handle: '2269105392'
[/dev/cdc-wdm0] Client ID not released:
        Service: 'wds'
            CID: '18'
-------------------------------------------------------
*** Requesting IP Address for modem ...
udhcpc: started, v1.35.0
Dropped protocol specifier '.udhcpc' from 'wwan0.udhcpc'. Using 'wwan0' (ifindex=3).
Failed to revert interface configuration: Unit dbus-org.freedesktop.resolve1.service not found.
udhcpc: broadcasting discover
udhcpc: broadcasting select for 100.75.157.67, server 100.75.157.68
udhcpc: lease of 100.75.157.67 obtained from 100.75.157.68, lease time 7200
Dropped protocol specifier '.udhcpc' from 'wwan0.udhcpc'. Using 'wwan0' (ifindex=3).
Failed to set DNS configuration: Unit dbus-org.freedesktop.resolve1.service not found.
-------------------------------------------------------
*** Displaying cellular connection details ...
[/dev/cdc-wdm0] Current settings retrieved:
           IP Family: IPv4
        IPv4 address: 100.75.157.67
    IPv4 subnet mask: 255.255.255.248
IPv4 gateway address: 100.75.157.68
    IPv4 primary DNS: 8.8.4.4
  IPv4 secondary DNS: 8.8.8.8
                 MTU: 1360
             Domains: none
-------------------------------------------------------
*** Setting nameservers in resolv.conf ...
-------------------------------------------------------
*** Displaying routes ...
default via 100.75.157.68 dev wwan0
100.75.157.64/29 dev wwan0 proto kernel scope link src 100.75.157.67
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         100.75.157.68   0.0.0.0         UG    0      0        0 wwan0
100.75.157.64   0.0.0.0         255.255.255.248 U     0      0        0 wwan0
-------------------------------------------------------
*** DNS Lookups ...
Server:         8.8.4.4
Address:        8.8.4.4#53

Non-authoritative answer: Name: google.com Address: 142.251.163.139 Name: google.com Address: 142.251.163.101 Name: google.com Address: 142.251.163.138 Name: google.com Address: 142.251.163.102 Name: google.com Address: 142.251.163.113 Name: google.com Address: 142.251.163.100 Name: google.com Address: 2607:f8b0:4004:c1b::8b Name: google.com Address: 2607:f8b0:4004:c1b::8a Name: google.com Address: 2607:f8b0:4004:c1b::64 Name: google.com Address: 2607:f8b0:4004:c1b::71

; <<>> DiG 9.18.24-1-Debian <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7473 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google.com. IN A

;; ANSWER SECTION: google.com. 15 IN A 142.251.163.100 google.com. 15 IN A 142.251.163.101 google.com. 15 IN A 142.251.163.138 google.com. 15 IN A 142.251.163.139 google.com. 15 IN A 142.251.163.102 google.com. 15 IN A 142.251.163.113

;; Query time: 132 msec ;; SERVER: 8.8.4.4#53(8.8.4.4) (UDP) ;; WHEN: Fri Apr 05 02:36:11 BST 2024 ;; MSG SIZE rcvd: 135


*** Attempting pings ... *** Pinging 8.8.8.8 ... PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=145 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=183 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=115 time=142 ms

--- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 142.221/156.747/183.145/18.697 ms *** Pinging google.com ... PING google.com (142.251.163.139) 56(84) bytes of data.

--- google.com ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2056ms


*** Done ...

Update:

In fact, it seems DNS is working fine to resolve various domain names, but I can never ping them through wwan0.

root@raspberrypi:/home/pi/Desktop# dig stackoverflow.com

; <<>> DiG 9.18.24-1-Debian <<>> stackoverflow.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3647 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;stackoverflow.com. IN A

;; ANSWER SECTION: stackoverflow.com. 300 IN A 104.18.32.7 stackoverflow.com. 300 IN A 172.64.155.249

;; Query time: 168 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP) ;; WHEN: Fri Apr 05 14:05:58 BST 2024 ;; MSG SIZE rcvd: 78

root@raspberrypi:/home/pi/Desktop# ping 104.18.32.7 PING 104.18.32.7 (104.18.32.7) 56(84) bytes of data. ^C --- 104.18.32.7 ping statistics --- 6 packets transmitted, 0 received, 100% packet loss, time 5098ms

I also cannot seem to ping 1.1.1.1 ( Cloudflare public DNS ):

root@raspberrypi:/home/pi/Desktop# ping -W 3 -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=294 ms

--- 8.8.8.8 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 294.368/294.368/294.368/0.000 ms root@raspberrypi:/home/pi/Desktop# ping -W 3 -c 1 8.8.4.4 PING 8.8.4.4 (8.8.4.4) 56(84) bytes of data. 64 bytes from 8.8.4.4: icmp_seq=1 ttl=57 time=181 ms

--- 8.8.4.4 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 181.163/181.163/181.163/0.000 ms root@raspberrypi:/home/pi/Desktop# ping -W 3 -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.

--- 1.1.1.1 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms

root@raspberrypi:/home/pi/Desktop#

Here are the traceroute results:

root@raspberrypi:/home/pi/Desktop# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * dns.google (8.8.8.8)  571.410 ms
root@raspberrypi:/home/pi/Desktop# traceroute google.com
traceroute to google.com (142.251.163.100), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
root@raspberrypi:/home/pi/Desktop# traceroute -n google.com
traceroute to google.com (142.251.163.101), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
root@raspberrypi:/home/pi/Desktop#

Update 2:

I tried a different board that I had with a PCIe Quectel EC25 modem and it can ping google through that interface. I double checked everything I could think of between that one and the Sixfab hat - and found no errors. But the Sixfab one cannot ping google ( please see the output below as a comparison of the routes and everything else between the two ).

Could this be a service level DNS thing not related to the actual Linux configuration?

Working other board:

root@iot-gate-imx8plus:~# qmicli -d /dev/cdc-wdm0 --wds-get-current-settings
[/dev/cdc-wdm0] Current settings retrieved:
           IP Family: IPv4
        IPv4 address: 10.204.79.165
    IPv4 subnet mask: 255.255.255.252
IPv4 gateway address: 10.204.79.166
    IPv4 primary DNS: 8.8.8.8
  IPv4 secondary DNS: 8.8.4.4
                 MTU: 1500
             Domains: none
root@iot-gate-imx8plus:~#
root@iot-gate-imx8plus:~# ifconfig wwan0
wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.204.79.165  netmask 255.255.255.252  destination 10.204.79.165
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 1538  bytes 197923 (193.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1374  bytes 171063 (167.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@iot-gate-imx8plus:~# ip route default via 10.204.79.166 dev wwan0 metric 10 10.2.0.0/16 dev wg0 scope link 10.204.79.164/30 dev wwan0 proto kernel scope link src 10.204.79.165 root@iot-gate-imx8plus:~# root@iot-gate-imx8plus:~# ping google.com PING google.com (142.250.180.14) 56(84) bytes of data. 64 bytes from lhr25s32-in-f14.1e100.net (142.250.180.14): icmp_seq=1 ttl=112 time=236 ms 64 bytes from lhr25s32-in-f14.1e100.net (142.250.180.14): icmp_seq=2 ttl=112 time=275 ms 64 bytes from lhr25s32-in-f14.1e100.net (142.250.180.14): icmp_seq=3 ttl=112 time=243 ms 64 bytes from lhr25s32-in-f14.1e100.net (142.250.180.14): icmp_seq=4 ttl=112 time=274 ms ^C --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 236.348/257.205/275.411/17.489 ms root@iot-gate-imx8plus:~# cat /etc/resolv.conf

This is /run/systemd/resolve/resolv.conf managed by man:systemd-resolved(8).

Do not edit.

This file might be symlinked as /etc/resolv.conf. If you're looking at

/etc/resolv.conf and seeing this text, you have followed the symlink.

This is a dynamic resolv.conf file for connecting local clients directly to

all known uplink DNS servers. This file lists all configured search domains.

Third party programs should typically not access this file directly, but only

through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a

different way, replace this symlink by a static file or a different symlink.

See man:systemd-resolved.service(8) for details about the supported modes of

operation for /etc/resolv.conf.

nameserver 8.8.8.8 nameserver 8.8.4.4 search .

Sixfab HAT failing DNS:

root@raspberrypi:/home/pi/Desktop# qmicli -d /dev/cdc-wdm0 --wds-get-current-settings
[/dev/cdc-wdm0] Current settings retrieved:
           IP Family: IPv4
        IPv4 address: 100.75.157.67
    IPv4 subnet mask: 255.255.255.248
IPv4 gateway address: 100.75.157.68
    IPv4 primary DNS: 8.8.4.4
  IPv4 secondary DNS: 8.8.8.8
                 MTU: 1360
             Domains: none
root@raspberrypi:/home/pi/Desktop#
root@raspberrypi:/home/pi/Desktop# ifconfig wwan0
wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1360
        inet 100.75.157.67  netmask 255.255.255.248  destination 100.75.157.67
        inet6 fe80::b750:b71f:6494:4e58  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 153  bytes 16644 (16.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47348  bytes 8168507 (7.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@raspberrypi:/home/pi/Desktop# root@raspberrypi:/home/pi/Desktop# ip route default via 100.75.157.68 dev wwan0 metric 10 100.75.157.64/29 dev wwan0 proto kernel scope link src 100.75.157.67 root@raspberrypi:/home/pi/Desktop# root@raspberrypi:/home/pi/Desktop# ping -I wwan0 -W 3 -C 3 google.com PING google.com (142.251.163.100) from 100.75.157.67 wwan0: 56(124) bytes of data. ^C --- google.com ping statistics --- 19 packets transmitted, 0 received, 100% packet loss, time 18431ms

root@raspberrypi:/home/pi/Desktop# root@raspberrypi:/home/pi/Desktop# ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=118 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=116 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=115 time=115 ms ^C --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 115.051/116.219/117.650/1.077 ms root@raspberrypi:/home/pi/Desktop# cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 search . root@raspberrypi:/home/pi/Desktop#

Update 3:

I installed tshark, and then monitored wwan0 while I tried to ping google in a different terminal. It is interesting that the DNS response is received on the interface, but the ping then is never responded to.

root@raspberrypi:/home/pi/Desktop# tshark -i wwan0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'wwan0'
 ** (tshark:456216) 20:56:56.160995 [Main MESSAGE] -- Capture started.
 ** (tshark:456216) 20:56:56.161146 [Main MESSAGE] -- File: "/tmp/wireshark_wwan05F4ZL2.pcapng"
    1 0.000000000 100.75.157.67 → 8.8.8.8      DNS 56 Standard query 0x4501 A google.com
    2 0.000025703 100.75.157.67 → 8.8.8.8      DNS 56 Standard query 0x6c0c AAAA google.com
    3 0.287190564      8.8.8.8 → 100.75.157.67 DNS 168 Standard query response 0x6c0c AAAA google.com AAAA 2607:f8b0:4004:c1b::8b AAAA 2607:f8b0:4004:c1b::71 AAAA 2607:f8b0:4004:c1b::66 AAAA 2607:f8b0:4004:c1b::8a
    4 0.287191675      8.8.8.8 → 100.75.157.67 DNS 152 Standard query response 0x4501 A google.com A 142.251.163.138 A 142.251.163.102 A 142.251.163.101 A 142.251.163.100 A 142.251.163.113 A 142.251.163.139
    5 0.287529002 100.75.157.67 → 142.251.163.138 ICMP 84 Echo (ping) request  id=0xb5fb, seq=1/256, ttl=64
PhilBot
  • 131

0 Answers0