Hello
Starlink's IPv6 connection, when using OpenWRT in bypass mode, is dropping and reconnecting. It drops and reconnects every minute.
Does anyone know if there's a custom configuration that needs to be done to fix this?
Hello
Starlink's IPv6 connection, when using OpenWRT in bypass mode, is dropping and reconnecting. It drops and reconnects every minute.
Does anyone know if there's a custom configuration that needs to be done to fix this?
Maybe you can figure out. A good start is to read the logs?
Please connect to your OpenWrt device using ssh and copy the output of the following commands and post it here using the "Preformatted text </> " button (red circle; this works best in the 'Markdown' composer view in the blue oval):
![]()
Remember to redact passwords, VPN keys, MAC addresses and any public IP addresses you may have:
ubus call system board
cat /etc/config/network
cat /etc/config/dhcp
cat /etc/config/firewall
By large starlink allows cgnat ip4 and delegates a routable ip6 prefix, and should work with all defaults.
root@OpenWrt:~# ubus call system board
{
"kernel": "6.6.119",
"hostname": "ROTEADOR_OPENWRT",
"system": "ARMv8 Processor rev 4",
"model": "Xiaomi Mi Router AX3000T",
"board_name": "xiaomi,mi-router-ax3000t",
"rootfs_type": "squashfs",
"release": {
"distribution": "OpenWrt",
"version": "24.10.5",
"revision": "r29087-d9c5716d1d",
"target": "mediatek/filogic",
"description": "OpenWrt 24.10.5 r29087-d9c5716d1d",
"builddate": "1766005702"
}
}
root@OpenWrt:~# cat /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'
config device
option name 'br-lan'
option type 'bridge'
list ports 'lan2'
list ports 'lan3'
list ports 'lan4'
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.30.1'
option netmask '255.255.255.0'
option ip6assign '60'
config device
option name 'wan'
option macaddr 'XX:XX:XX:XX:XX:XX'
config interface 'wan'
option device 'wan'
option proto 'dhcp'
option delegate '0'
config interface 'wan6'
option device 'wan'
option proto 'dhcpv6'
option reqaddress 'try'
option reqprefix '56'
option norelease '1'
option sourcefilter '0'
root@OpenWrt:~# cat /etc/config/dhcp
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 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'
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv4 'server'
option dhcpv6 'server'
option ra 'server'
option ra_default '1'
option ra_slaac '1'
list ra_flags 'other-config'
option ra_maxinterval '60'
option ra_mininterval '20'
option ra_lifetime '1800'
config dhcp 'wan'
option interface 'wan'
option ignore '1'
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'
root@OpenWrt:~# cat /etc/config/firewall
config defaults
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option synflood_protect '1'
option flow_offloading '1'
option flow_offloading_hw '1'
config zone
option name 'lan'
list network 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
config zone
option name 'wan'
list network 'wan'
list network 'wan6'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
config forwarding
option src 'lan'
option dest 'wan'
config rule
option name 'Allow-DHCP-Renew'
option src 'wan'
option proto 'udp'
option dest_port '68'
option target 'ACCEPT'
option family 'ipv4'
config rule
option name 'Allow-Ping'
option src 'wan'
option proto 'icmp'
option icmp_type 'echo-request'
option family 'ipv4'
option target 'ACCEPT'
config rule
option name 'Allow-IGMP'
option src 'wan'
option proto 'igmp'
option family 'ipv4'
option target 'ACCEPT'
config rule
option name 'Allow-DHCPv6'
option src 'wan'
option proto 'udp'
option dest_port '546'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-MLD'
option src 'wan'
option proto 'icmp'
option src_ip 'fe80::/10'
list icmp_type '130/0'
list icmp_type '131/0'
list icmp_type '132/0'
list icmp_type '143/0'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-ICMPv6-Input'
option src 'wan'
option proto 'icmp'
list icmp_type 'echo-request'
list icmp_type 'echo-reply'
list icmp_type 'destination-unreachable'
list icmp_type 'packet-too-big'
list icmp_type 'time-exceeded'
list icmp_type 'bad-header'
list icmp_type 'unknown-header-type'
list icmp_type 'router-solicitation'
list icmp_type 'neighbour-solicitation'
list icmp_type 'router-advertisement'
list icmp_type 'neighbour-advertisement'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-ICMPv6-Forward'
option src 'wan'
option dest '*'
option proto 'icmp'
list icmp_type 'echo-request'
list icmp_type 'echo-reply'
list icmp_type 'destination-unreachable'
list icmp_type 'packet-too-big'
list icmp_type 'time-exceeded'
list icmp_type 'bad-header'
list icmp_type 'unknown-header-type'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-IPSec-ESP'
option src 'wan'
option dest 'lan'
option proto 'esp'
option target 'ACCEPT'
config rule
option name 'Allow-ISAKMP'
option src 'wan'
option dest 'lan'
option dest_port '500'
option proto 'udp'
option target 'ACCEPT'
Try reqprefix "auto" or 64 , otherwise all config is as default as it can be.
Try reqprefix ‘auto’
Starlink provisions a single /64 prefix for WAN via SLAAC by default. DHCPv6-PD support is available but limited to smaller delegations than /48 or /56 (often /62 or /60) when requested.
/56 is maximum....
I set reqprefix to "auto".
I remembered Gemini and asked it for solutions to this.
It gave me some recommendations, which I applied to the router.
So far, after the changes, IPv6 hasn't dropped, and the internet remains stable. It seems to have solved the problem.
Here is what was suggested:
Remove list ra_flags 'managed-config'
This line activated the "M Flag." It forces devices to request an IP via DHCPv6. Android does not support this. If this line remained, your Android phones would see the IPv6 network but wouldn't be able to obtain an address, or they would connect and disconnect endlessly.
ADDED LINE: option ra_slaac '1'
Reason: Forces the SLAAC (Stateless Address Auto-Configuration) method. It is the opposite of the line above. This tells the device: "Here is the network prefix; create your own final IP automatically." This is mandatory for Android and IoT devices.
ADDED LINE: option ra_default '1'
Reason: Makes OpenWrt the ultimate authority for the route. Without this, if Starlink took too long to respond on the WAN port, OpenWrt would stop announcing itself as the Gateway on the LAN port. With "1", it says: "I am the default gateway, trust me always," even if the internet fluctuates.
"Fine-Tuning" Changes (Specifically for Starlink)
ADDED LINE: option ra_maxinterval '60'
Reason: Reduces the router's maximum silence time. The default is too long (up to 10 min). With 60, we ensure that at most every minute, the router shouts "I'm alive" to the network.
ADDED LINE: option ra_mininterval '20'
Reason: Sets the minimum frequency. Together with the line above, this creates an "aggressive" announcement behavior, recovering lost connections much faster.
ADDED LINE: option ra_lifetime '1800'
Reason: Sets the "route validity" to 30 minutes (1800 seconds). This masks Starlink's micro-outages. If the dish signal fails for 1 minute, the phone won't drop the IPv6 connection because it knows the route is valid for 30 minutes.
Now, yes. Depends on how long you’ve been subscriber. I still get my /56.
That’s likely based on what the AI knows (No reference to Prefix Delegation).
You will end up with a single /64. If you’re happy with that, that’s fine. Given that Starlink does offer PD, you can likely add additional IPv6 subnets by using instead :
config interface 'wan6'
option device 'wan'
option proto 'dhcpv6'
option reqaddress 'try'
option reqprefix 'auto'
option norelease '1'
Just reset OpenWrt to config defaults, throw away all your chatbots and it will work.
Show any log entries if anything is failing.
Mini gives /64 on cheapest option....
In my case, I didn't make any custom configurations at all.
The default OpenWRT configuration doesn't work with the Starlink Mini in bypass mode.
I started customizing it because it wasn't working as it should.
The problem is only with IPv6, which would disappear and then reappear.
And what is logged during "does not work" ?
That would have been a relevant distinction if you had initially mentioned you were using a Mini!