[GH-ISSUE #5464] [Bug] [Android] network resources not reachable when defined with domain #11504

Open
opened 2026-08-05 01:29:52 -04:00 by saavagebueno · 0 comments
Owner

Originally created by @kyuuk on GitHub (Feb 26, 2026).
Original GitHub issue: https://github.com/netbirdio/netbird/issues/5464

Describe the problem

When creating a network resource for a host with an FQDN instead of an ip the traffic is not routed for android clients (tested with a linux client works fine), also creating another resource for the same host but with IP works file

To Reproduce

Steps to reproduce the behavior:

  1. Create a network resource with an FQDN
  2. Create a policy to give access to that resource to an Android client
  3. Try accessing the resource with its FQDN from the Android Client
  4. It timeout

Expected behavior

The resource should be accessible as it is from a linux or windows client

Are you using NetBird Cloud?
no, self-host NetBird

NetBird version

  • Management, Relay, Signal : 0.66.0
  • Android client: 0.64.1 (Android version 16)

Is any other VPN software installed?

on the Android client : openVpn client
on the routing peer : OpenVpn server

Additional context

On the routing peer a tcpdump shows no traffic except the dns request when accessing using FQDN,
when accessing the same target but via ip (other resource created on the same network) traffic is flowing normally

Also the routing peer is configured as an exit-node, when i enable the exit-node on the client the resource is accessible normally

i see that the FQDN is resolved on the client

02-26 17:28:56.839 E/GoLog   (30125): [TRAC] [dns_id: ec99, request_id: 1b35a9d9] client/internal/routemanager/dnsinterceptor/handler.go:529 replaced real IP 192.168.0.4 with fake IP 240.0.0.1 in DNS response
02-26 17:28:56.840 E/GoLog   (30125): [TRAC] [request_id: 1b35a9d9, dns_id: ec99] client/internal/dns/handler_chain.go:264 response: domain=immich.MyDomain.com rcode=NOERROR answers=[240.0.0.1] peer=yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo= took=67.967291ms

via ADB i see that the target IP is replaced by a fake IP (in my case 240.0.0.1) and in both cases (via FQDN or IP) request seems to go the fake IP and in case of access with IP i see this additional logs :

02-26 17:29:35.939 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC New egress TCP connection: 100.119.88.69:32842  192.168.0.4:80
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC TCP connection 100.119.88.69:32842  192.168.0.4:80 transitioned from New to SYN Sent (dir: egress)
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC Reverse DNAT: 192.168.0.4 -> 240.0.0.1
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC Dropping local packet (ACL denied): rule_id= proto=TCP src=240.0.0.1:80 dst=100.119.88.69:32842
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC New egress TCP connection: 100.119.88.69:32844  192.168.0.4:80
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC TCP connection 100.119.88.69:32844  192.168.0.4:80 transitioned from New to SYN Sent (dir: egress)
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC Reverse DNAT: 192.168.0.4 -> 240.0.0.1
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:34+00:00 TRAC Dropping local packet (ACL denied): rule_id= proto=TCP src=240.0.0.1:80 dst=100.119.88.69:32844
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:35+00:00 TRAC Reverse DNAT: 192.168.0.4 -> 240.0.0.1
02-26 17:29:35.940 E/GoLog   (30125): 2026-02-26T16:29:35+00:00 TRAC Dropping local packet (ACL denied): rule_id= proto=TCP src=240.0.0.1:80 dst=100.119.88.69:32842

In summary :

  • i have a routing peer router-A on the lan 192.168.0.0/24

  • routing peer router-A is also configured as an Exit-Node

  • i have a host immich.mydomain.com resolves to 192.168.0.4 on router-A Lan

  • Exit-node Disabled :

    • resource with address=immich.mydomain.com => Not reachable
    • resource with address=192.168.0.4 => Reachable
  • Exit-node Enabled :

    • resource with address=immich.mydomain.com => Reachable
    • resource with address=192.168.0.4 => Reachable

other possible rellevant logs when i make a request :

02-26 22:57:37.624 19757 19953 E GoLog   : [TRAC] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:398 allocated fake IP 240.0.0.1 for real IP 192.168.0.4
02-26 22:57:37.624 19757 19953 E GoLog   : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addRouteAndAllowedIP] Increasing ref count [0 -> 1] for key 240.0.0.1/32 with In [{}] Out [{}]
02-26 22:57:37.624 19757 19953 E GoLog   : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addRouteAndAllowedIP] Calling add for key 240.0.0.1/32
02-26 22:57:37.625 19757 19953 E GoLog   : [TRAC] [dns_id: d7f6, request_id: abeac398] client/internal/dns/handler_chain.go:221 question: domain=immich.mydomain.com. type=AAAA class=IN -> handler=immich.mydomain.com pattern=immich.mydomain.com. wildcard=false match_subdomain=false priority=100
02-26 22:57:37.637 19757 19797 E GoLog   : [WARN] client/iface/iface.go:118 Failed to get interface by name tun0: route ip+net: netlinkrib: permission denied
02-26 22:57:37.637 19757 19797 E GoLog   : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addAllowedIPForPrefix] Increasing ref count [0 -> 1] for key 192.168.0.4/32 with In [yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo=] Out []
02-26 22:57:37.637 19757 19797 E GoLog   : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addAllowedIPForPrefix] Calling add for key 192.168.0.4/32
02-26 22:57:37.637 19757 19797 E GoLog   : [DEBG] client/iface/iface.go:193 Adding allowed IP to interface tun0 and peer yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo=: allowed IP 192.168.0.4/32 
02-26 22:57:37.637 19757 19797 E GoLog   : [DEBG] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:496 added DNAT mapping: 240.0.0.1 -> 192.168.0.4
02-26 22:57:37.637 19757 19797 E GoLog   : [DEBG] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:368 added dynamic route(s) for domain=immich.mydomain.com. (pattern: domain=immich.mydomain.com): [192.168.0.4/32]
02-26 22:57:37.637 19757 19797 E GoLog   : [TRAC] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:529 replaced real IP 192.168.0.4 with fake IP 240.0.0.1 in DNS response
02-26 22:57:37.637 19757 19797 E GoLog   : [TRAC] [dns_id: fc2c, request_id: 750c983b] client/internal/dns/handler_chain.go:264 response: domain=immich.mydomain.com. rcode=NOERROR answers=[240.0.0.1] peer=yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo= took=82.314791ms
02-26 22:57:37.682 19757 19953 E GoLog   : [TRAC] [request_id: abeac398, dns_id: d7f6] client/internal/dns/handler_chain.go:264 response: domain=immich.mydomain.com. rcode=NOERROR answers=[] peer=yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo= took=57.63875ms
02-26 22:57:37.761 19757 19797 E GoLog   : 2026-02-26T21:57:37+00:00 TRAC New egress UDP connection: 100.119.88.69:44783 → 100.119.196.38:22054
02-26 22:57:37.761 19757 19797 E GoLog   : 2026-02-26T21:57:37+00:00 TRAC New egress UDP connection: 100.119.88.69:41802 → 100.119.196.38:22054
02-26 22:57:37.762 19757 19797 E GoLog   : 2026-02-26T21:57:37+00:00 TRAC New egress UDP connection: 100.119.88.69:52991 → 100.119.196.38:22054

i saw a Warning about the inet interface
[WARN] client/iface/iface.go:118 Failed to get interface by name tun0: route ip+net: netlinkrib: permission denied
i checked with an ADB shell, the interface for netbird was tun1

EDIT 14-03-2026:
i did further tests, and i observed that at the time of the connection the interface is first created as tun0 and then it immediatly changes to tun1 (tested on android 14, 15 & 16 using android studio virtual devices)

Have you tried these troubleshooting steps?

  • Reviewed client troubleshooting (if applicable)
  • Checked for newer NetBird versions
  • Searched for similar issues on GitHub (including closed ones)
  • Restarted the NetBird client
  • Disabled other VPN software
  • Checked firewall settings
Originally created by @kyuuk on GitHub (Feb 26, 2026). Original GitHub issue: https://github.com/netbirdio/netbird/issues/5464 **Describe the problem** When creating a network resource for a host with an FQDN instead of an ip the traffic is not routed for android clients (tested with a linux client works fine), also creating another resource for the same host but with IP works file **To Reproduce** Steps to reproduce the behavior: 1. Create a network resource with an FQDN 2. Create a policy to give access to that resource to an Android client 3. Try accessing the resource with its FQDN from the Android Client 4. It timeout **Expected behavior** The resource should be accessible as it is from a linux or windows client **Are you using NetBird Cloud?** no, self-host NetBird **NetBird version** - Management, Relay, Signal : 0.66.0 - Android client: 0.64.1 (Android version 16) **Is any other VPN software installed?** on the Android client : openVpn client on the routing peer : OpenVpn server **Additional context** On the routing peer a tcpdump shows no traffic except the dns request when accessing using FQDN, when accessing the same target but via ip (other resource created on the same network) traffic is flowing normally Also the routing peer is configured as an exit-node, when i enable the exit-node on the client the resource is accessible normally i see that the FQDN is resolved on the client ``` 02-26 17:28:56.839 E/GoLog (30125): [TRAC] [dns_id: ec99, request_id: 1b35a9d9] client/internal/routemanager/dnsinterceptor/handler.go:529 replaced real IP 192.168.0.4 with fake IP 240.0.0.1 in DNS response 02-26 17:28:56.840 E/GoLog (30125): [TRAC] [request_id: 1b35a9d9, dns_id: ec99] client/internal/dns/handler_chain.go:264 response: domain=immich.MyDomain.com rcode=NOERROR answers=[240.0.0.1] peer=yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo= took=67.967291ms ``` via ADB i see that the target IP is replaced by a fake IP (in my case 240.0.0.1) and in both cases (via FQDN or IP) request seems to go the fake IP and in case of access with IP i see this additional logs : ``` 02-26 17:29:35.939 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC New egress TCP connection: 100.119.88.69:32842 ÔåÆ 192.168.0.4:80 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC TCP connection 100.119.88.69:32842 ÔåÆ 192.168.0.4:80 transitioned from New to SYN Sent (dir: egress) 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC Reverse DNAT: 192.168.0.4 -> 240.0.0.1 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC Dropping local packet (ACL denied): rule_id= proto=TCP src=240.0.0.1:80 dst=100.119.88.69:32842 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC New egress TCP connection: 100.119.88.69:32844 ÔåÆ 192.168.0.4:80 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC TCP connection 100.119.88.69:32844 ÔåÆ 192.168.0.4:80 transitioned from New to SYN Sent (dir: egress) 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC Reverse DNAT: 192.168.0.4 -> 240.0.0.1 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:34+00:00 TRAC Dropping local packet (ACL denied): rule_id= proto=TCP src=240.0.0.1:80 dst=100.119.88.69:32844 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:35+00:00 TRAC Reverse DNAT: 192.168.0.4 -> 240.0.0.1 02-26 17:29:35.940 E/GoLog (30125): 2026-02-26T16:29:35+00:00 TRAC Dropping local packet (ACL denied): rule_id= proto=TCP src=240.0.0.1:80 dst=100.119.88.69:32842 ``` In summary : - i have a routing peer `router-A` on the lan `192.168.0.0/24` - routing peer `router-A` is also configured as an Exit-Node - i have a host immich.mydomain.com resolves to 192.168.0.4 on `router-A` Lan - Exit-node Disabled : - resource with address=immich.mydomain.com => Not reachable - resource with address=192.168.0.4 => Reachable - Exit-node Enabled : - resource with address=immich.mydomain.com => Reachable - resource with address=192.168.0.4 => Reachable other possible rellevant logs when i make a request : ``` 02-26 22:57:37.624 19757 19953 E GoLog : [TRAC] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:398 allocated fake IP 240.0.0.1 for real IP 192.168.0.4 02-26 22:57:37.624 19757 19953 E GoLog : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addRouteAndAllowedIP] Increasing ref count [0 -> 1] for key 240.0.0.1/32 with In [{}] Out [{}] 02-26 22:57:37.624 19757 19953 E GoLog : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addRouteAndAllowedIP] Calling add for key 240.0.0.1/32 02-26 22:57:37.625 19757 19953 E GoLog : [TRAC] [dns_id: d7f6, request_id: abeac398] client/internal/dns/handler_chain.go:221 question: domain=immich.mydomain.com. type=AAAA class=IN -> handler=immich.mydomain.com pattern=immich.mydomain.com. wildcard=false match_subdomain=false priority=100 02-26 22:57:37.637 19757 19797 E GoLog : [WARN] client/iface/iface.go:118 Failed to get interface by name tun0: route ip+net: netlinkrib: permission denied 02-26 22:57:37.637 19757 19797 E GoLog : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addAllowedIPForPrefix] Increasing ref count [0 -> 1] for key 192.168.0.4/32 with In [yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo=] Out [] 02-26 22:57:37.637 19757 19797 E GoLog : [TRAC] client/internal/routemanager/refcounter/refcounter.go:299 [dnsinterceptor.(*DnsInterceptor).addAllowedIPForPrefix] Calling add for key 192.168.0.4/32 02-26 22:57:37.637 19757 19797 E GoLog : [DEBG] client/iface/iface.go:193 Adding allowed IP to interface tun0 and peer yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo=: allowed IP 192.168.0.4/32 02-26 22:57:37.637 19757 19797 E GoLog : [DEBG] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:496 added DNAT mapping: 240.0.0.1 -> 192.168.0.4 02-26 22:57:37.637 19757 19797 E GoLog : [DEBG] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:368 added dynamic route(s) for domain=immich.mydomain.com. (pattern: domain=immich.mydomain.com): [192.168.0.4/32] 02-26 22:57:37.637 19757 19797 E GoLog : [TRAC] [request_id: 750c983b, dns_id: fc2c] client/internal/routemanager/dnsinterceptor/handler.go:529 replaced real IP 192.168.0.4 with fake IP 240.0.0.1 in DNS response 02-26 22:57:37.637 19757 19797 E GoLog : [TRAC] [dns_id: fc2c, request_id: 750c983b] client/internal/dns/handler_chain.go:264 response: domain=immich.mydomain.com. rcode=NOERROR answers=[240.0.0.1] peer=yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo= took=82.314791ms 02-26 22:57:37.682 19757 19953 E GoLog : [TRAC] [request_id: abeac398, dns_id: d7f6] client/internal/dns/handler_chain.go:264 response: domain=immich.mydomain.com. rcode=NOERROR answers=[] peer=yvYE1pAnkt2U3g4VN7oBZkw8Yk2p4r31l+eiFq4ScWo= took=57.63875ms 02-26 22:57:37.761 19757 19797 E GoLog : 2026-02-26T21:57:37+00:00 TRAC New egress UDP connection: 100.119.88.69:44783 → 100.119.196.38:22054 02-26 22:57:37.761 19757 19797 E GoLog : 2026-02-26T21:57:37+00:00 TRAC New egress UDP connection: 100.119.88.69:41802 → 100.119.196.38:22054 02-26 22:57:37.762 19757 19797 E GoLog : 2026-02-26T21:57:37+00:00 TRAC New egress UDP connection: 100.119.88.69:52991 → 100.119.196.38:22054 ``` i saw a Warning about the inet interface `[WARN] client/iface/iface.go:118 Failed to get interface by name tun0: route ip+net: netlinkrib: permission denied` i checked with an ADB shell, the interface for netbird was `tun1` EDIT 14-03-2026: i did further tests, and i observed that at the time of the connection the interface is first created as `tun0` and then it immediatly changes to `tun1` (tested on android 14, 15 & 16 using android studio virtual devices) **Have you tried these troubleshooting steps?** - [X] Reviewed [client troubleshooting](https://docs.netbird.io/how-to/troubleshooting-client) (if applicable) - [X] Checked for newer NetBird versions - [X] Searched for similar issues on GitHub (including closed ones) - [X] Restarted the NetBird client - [x] Disabled other VPN software - [ ] Checked firewall settings
saavagebueno added the triage-needed label 2026-08-05 01:29:52 -04:00
Sign in to join this conversation.
No Label triage-needed
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#11504