IPv6 relay issue (IPv6 sites are not working)

I recently updated from 23.05 to the latest 24.10.4. I never figured out how to properly enable IPv6 and am now reinvestigating this issue.

  • I am connected via usb0 using USB tether.
  • On the usb0 device it-self, I am able to connect to ipv6 sites and passes the tests on https://test-ipv6.com/
  • On the router, I am receiving a /64 IPv6 assignment.
    • I tried various Request IPv6 prefix and always received a /64 assignment.
  • On the luci diagnostics page, I am able to run IPv6 traceroute but IPv6 pings always return 100% packet loss.

I have not been able to get relay to work after trying various settings and combinations such as ra_useleasetime, ra_dns, etc and have not seen any improvements. Am I missing something, or should I consider using NAT6 instead?

Here is my current /etc/config/network:

config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'

config globals 'globals'
option packet_steering '1'

config device
option name 'br-lan'
option type 'bridge'
list ports 'lan1'
list ports 'lan2'
list ports 'lan3'
list ports 'lan4'

config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.10.1'
option netmask '255.255.255.0'
option delegate '0'

config interface 'wan'
option device 'wan'
option proto 'dhcp'

config interface 'wan6'
option device 'wan'
option proto 'dhcpv6'

config interface 'TetheringWAN'
option proto 'dhcp'
option device 'usb0'
option hostname '*'
option delegate '0'

config interface 'TetheringWAN6'
option proto 'dhcpv6'
option device 'usb0'
option reqaddress 'none'
option reqprefix 'no'
option norelease '1'
option delegate '0'

Here is my current /etc/config/dhcp. With this setting, clients on lan are getting timeout failures on https://test-ipv6.com/ tests.

config dnsmasq
option domainneeded '1'
option boguspriv '1'
option filterwin2k '0'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option nonegcache '0'
option cachesize '1000'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
option nonwildcard '1'
option localservice '1'
option ednspacket_max '1232'
option filter_aaaa '0'
option filter_a '0'
list addnmount '/bin/busybox'
list addnmount '/var/run/adblock-lean/abl-blocklist.gz'

config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv4 'server'
option dhcpv6 'relay'
option ra 'relay'
option ndp 'relay'

config dhcp 'TetheringWAN6'
option interface 'TetheringWAN6'
option master '1'
option ra 'relay'
option dhcpv6 'relay'
option ndp 'relay'

config odhcpd 'odhcpd'
option maindhcp '0'
option leasefile '/tmp/hosts/odhcpd'
option leasetrigger '/usr/sbin/odhcpd-update'
option loglevel '4'
option piofolder '/tmp/odhcpd-piofolder'

You may need to follow the example in How to enable ipv6 in Openwrt - #129 by foxtokyo

1 Like

Please share details about your USB device and show the output of cat /sys/kernel/debug/usb/devices

Thanks for the advice, I will take a look at the linked thread. Here is the content of /sys/kernel/debug/usb/devices:

T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 2
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1d6b ProdID=0002 Rev= 6.06
S:  Manufacturer=Linux 6.6.110 xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=1axxxxxx.usb
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  5 Spd=480  MxCh= 0
D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=1004 ProdID=6344 Rev= 4.14
S:  Manufacturer=LGE
S:  Product=LM-G900TM
S:  SerialNumber=LMG900TMxxxxxxxxxxxx
C:* #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA
A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
A:  FirstIf#= 2 IfCount= 2 Cls=02(comm.) Sub=02 Prot=01
I:* If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=(none)
E:  Ad=84(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=(none)
E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
P:  Vendor=1d6b ProdID=0003 Rev= 6.06
S:  Manufacturer=Linux 6.6.110 xhci-hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=1axxxxxx.usb
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
1 Like

Run ifstatus TetheringWAN6 and try wget -O - https:ipv6.google.com (should return the page HTML, don't post that just note if it was successful).

LTE only gives you an IP inside a /64, there is no separate prefix but the whole /64 is routed to your line. Relay mode is designed for this situation. Accessing the v6 Internet from the router itself does not depend on relay mode working.

I made 1 improvement thus far. I enabled extendprefix and I now see the IPv6-PD on the wan6 interface.

From the router, I am getting an error when trying to get the google ipv6 site.

Downloading 'https://ipv6.google.com'
Connecting to 2607:f8b0:4023:1002::71:443
SSL error: NET - Sending information through the socket failed
Connection error: Connection failed

I think this might be MTU related. Earlier when doing research and experimenting, I do know that my usb0 has a MTU of 1500 but I think it needs to be 1,440 (1412 + 28) based on data I collected. But it looks like MTU is no longer on the luci gui and I haven’t set it. I haven’t figured out if I should set MTU on the device or lan interface or wan/wan6 interface.

Here is the ifstatus TetheringWAN6


{
        "up": true,
        "pending": false,
        "available": true,
        "autostart": true,
        "dynamic": false,
        "uptime": 2437,
        "l3_device": "usb0",
        "proto": "dhcpv6",
        "device": "usb0",
        "updated": ["prefixes"],
        "metric": 0,
        "dns_metric": 0,
        "delegation": false,
        "ipv4-address": [],
        "ipv6-address": [{
                        "address": "2600:100d:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx",
                        "mask": 64,
                        "preferred": 3248,
                        "valid": 3248
                }],
        "ipv6-prefix": [{
                        "address": "2600:100d:xxxx:xxxx::",
                        "mask": 64,
                        "preferred": 3248,
                        "valid": 3248,
                        "class": "TetheringWAN6",
                        "assigned": {}
                }],
        "ipv6-prefix-assignment": [],
        "route": [{
                        "target": "::",
                        "mask": 0,
                        "nexthop": "fe80::3425:xxxx:xxxx:xxxx",
                        "metric": 384,
                        "valid": 3248,
                        "source": "2600:100d:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64"
                }],
        "dns-server": ["2600:100d:xxxx:xxxx::xx"],
        "dns-search": [],
        "neighbors": [],
        "inactive": {
                "ipv4-address": [],
                "ipv6-address": [],
                "route": [],
                "dns-server": [],
                "dns-search": [],
                "neighbors": []
        },
        "data": {}
}

I defined the MTU option for the TetheringWAN and TetheringWAN6 interfaces. I get an error when trying to pull up the Google IPv6 site from the router.

Downloading 'https://ipv6.google.com'
Failed to send request: Operation not permitted

ip -6 route show should show the default route is the phone's link local IP via interface usb0. Try to ping that.

Here is ip -6 route show dev usb0 or do you want to see the whole thing?

default from 2600:100d:xxxx:xxxx::/64 via fe80::182a:xxxx:xxxx:xxxx dev usb0  metric 384
fe80::/64 dev usb0  metric 256
anycast 2600:100d:xxxx:xxxx:: dev usb0  metric 0
anycast fe80:: dev usb0  metric 0
multicast ff00::/8 dev usb0  metric 256

I am also exploring ideas from LLMs and this is what it said about the route table. I don’t know if I am accept its interpretation as I never read about in any wiki or forum topics that I looked at.

Good — thanks for the route table.
Your IPv6 interface looks configured, but it is missing one critical thing:
:red_exclamation_mark: No IPv6 DNS and no DHCPv6 prefix delegation (PD)
This is typical when Android only gives a single /64 address but does not forward IPv6 traffic.
This creates the illusion of IPv6 but no actual connectivity.