Same issue on Jolla Phone 2026, 5.2.0.18, Bouygues (FR), which is IPv6-only on mobile data. I found two bugs:
1. CLAT doesn’t start (unable to open /run/connman/tayga.conf). This one is already known and a fix is coming, see @jlaakkonen’s post.
2. DNS doesn’t work in AAS. This is what actually breaks AAS. On mobile data, Android uses [::1]:53 as its DNS server, but nothing listens there. connman’s dnsproxy fails to bind (Failed to bind UDP listener socket) and systemd-resolved only listens on 127.0.0.53. Like @nas noticed, pinging an IP works but names don’t resolve.
To check if you have the same problem, run this on mobile data:
devel-su appsupport-attach /system/bin/dumpsys dnsresolver
If the only DNS server is ::1 with INTERNAL_ERROR, it’s the same bug.
Disclaimer: I used AI to diagnose this and write the workaround below. It works for me (AAS has internet on mobile data again), but it’s not an official fix. Read it before installing, and do it at your own risk.
Workaround: forward \[::1\]:53 to systemd-resolved
/usr/local/sbin/aas-dns-forward.py (chmod 755):
#!/usr/bin/env python3
# Forward DNS from [::1]:53 (what Android App Support uses) to the
# systemd-resolved stub at 127.0.0.53:53. UDP and TCP.
import os
import socket
import socketserver
import threading
LISTEN = (os.environ.get("LISTEN_ADDR", "::1"), int(os.environ.get("LISTEN_PORT", "53")))
UP = (os.environ.get("UP_ADDR", "127.0.0.53"), int(os.environ.get("UP_PORT", "53")))
class UDPHandler(socketserver.BaseRequestHandler):
def handle(self):
data, sock = self.request
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as u:
u.settimeout(5)
u.sendto(data, UP)
try:
resp, _ = u.recvfrom(65535)
except socket.timeout:
return
sock.sendto(resp, self.client_address)
def pipe(src, dst):
try:
while True:
buf = src.recv(65535)
if not buf:
break
dst.sendall(buf)
except OSError:
pass
finally:
for s in (src, dst):
try:
s.shutdown(socket.SHUT_RDWR)
except OSError:
pass
class TCPHandler(socketserver.BaseRequestHandler):
def handle(self):
c = self.request
try:
u = socket.create_connection(UP, timeout=10)
except OSError:
return
u.settimeout(30)
c.settimeout(30)
t = threading.Thread(target=pipe, args=(u, c), daemon=True)
t.start()
pipe(c, u)
t.join(5)
u.close()
class UDPServer(socketserver.ThreadingMixIn, socketserver.UDPServer):
address_family = socket.AF_INET6
allow_reuse_address = True
daemon_threads = True
class TCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
address_family = socket.AF_INET6
allow_reuse_address = True
daemon_threads = True
if __name__ == "__main__":
udp = UDPServer(LISTEN, UDPHandler)
tcp = TCPServer(LISTEN, TCPHandler)
threading.Thread(target=tcp.serve_forever, daemon=True).start()
print("forwarding [%s]:%d -> %s:%d" % (LISTEN + UP), flush=True)
udp.serve_forever()
/etc/systemd/system/aas-dns-forward.service:
[Unit]
Description=DNS forwarder [::1]:53 -> systemd-resolved, for Android App Support
After=systemd-resolved.service network.target
[Service]
ExecStart=/usr/bin/python3 /usr/local/sbin/aas-dns-forward.py
Restart=always
RestartSec=2
User=nobody
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=yes
[Install]
WantedBy=multi-user.target
Enable:
devel-su
systemctl daemon-reload
systemctl enable --now aas-dns-forward
Undo:
devel-su
systemctl disable --now aas-dns-forward
rm /etc/systemd/system/aas-dns-forward.service /usr/local/sbin/aas-dns-forward.py