GitHub - bradleypeabody/myispsucksv6: Linux daemon to fix missing IPv6 prefix delegation for certain ISPs (e.g. certain Tea-Mobile and Etientee services) · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
bradleypeabody
myispsucksv6
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>3 Commits<br>3 Commits
cmd/myispsucksv6
cmd/myispsucksv6
examples
examples
internal
internal
.gitignore
.gitignore
DOC.md
DOC.md
LICENSE
LICENSE
README.md
README.md
SCOPE.md
SCOPE.md
go.mod
go.mod
go.sum
go.sum
View all files
Repository files navigation
myispsucksv6
IPv6 has been a standard for over 25 years. DHCPv6 prefix delegation has been an RFC since 2003. And yet here we are — major US carriers handing out a single /64 via SLAAC and calling it a day, as if nobody behind their gateway might want to actually route packets. This tool exists because some of us refuse to NAT our way out of a problem that shouldn't exist.
myispsucksv6 is an NDP proxy daemon with dynamic prefix tracking for home routers behind ISPs that assign IPv6 via SLAAC but don't offer DHCPv6 prefix delegation (T-Mobile Home Internet, AT&T Internet Air, Verizon 5G Home, etc.).
The problem
Some ISPs give a single /64 on your WAN interface via SLAAC. You have a Linux router between the modem and your LAN. You want LAN clients to get real, routable IPv6 addresses — no NAT — but the ISP prefix changes over time and the prefix can't be delegated.
The existing tool for this is ndppd, which proxies NDP so your upstream gateway believes your LAN devices live on the WAN interface. It works, but it assumes a static prefix. When T-Mobile renumbers you, everything breaks until you manually reconfigure ndppd, your router's LAN address, and your RA daemon.
myispsucksv6 fixes that.
The right solution is for carriers to offer DHCPv6 prefix delegation — sadly, some simply don't, for no good reason anyone has been able to explain.
What it does
Watches the upstream interface for global IPv6 prefix changes via netlink
Automatically updates its NDP proxy rules when the prefix changes
Assigns/updates the router's own address on the LAN interface (::1)
Sends Router Advertisements (with Prefix Information and RDNSS) on LAN interfaces — no radvd or dnsmasq RA config needed
Fires optional hook scripts on prefix change (for nftables reload, etc.)
What it does not do: run DHCPv6, or touch your firewall.
Quick start
1. Build and install
Requires Go 1.22+:
git clone https://github.com/bradleypeabody/myispsucksv6<br>cd myispsucksv6<br>mkdir -p bin<br>go build -o bin/myispsucksv6 ./cmd/myispsucksv6<br>install -m 755 bin/myispsucksv6 /usr/local/bin/myispsucksv6
2. Configure
cp examples/myispsucksv6.jsonc /etc/myispsucksv6.jsonc
Edit /etc/myispsucksv6.jsonc and set your interface names:
"global": {<br>"log_level": "info"<br>},<br>"upstream": [<br>"interface": "enp1s0", // WAN interface — change this<br>"debounce_seconds": 5,<br>"proxy": [<br>"to_interface": "enp2s0", // LAN interface — change this<br>"lan_host_suffix": "::1"
This tells myispsucksv6 to:
Watch enp1s0 for a global unicast IPv6 prefix
Proxy NDP from enp1s0 to/from enp2s0
Keep ::1 on enp2s0
Send Router Advertisements on enp2s0 so LAN clients auto-configure via SLAAC
3. Install the systemd unit
cp examples/myispsucksv6.service /etc/systemd/system/<br>systemctl daemon-reload<br>systemctl enable --now myispsucksv6
Check that it's running:
systemctl status myispsucksv6<br>journalctl -u myispsucksv6 -f
That's it. LAN clients should start receiving Router Advertisements and configuring IPv6 addresses within a few seconds.
Troubleshooting
LAN clients aren't getting IPv6 addresses.
Check that the upstream interface has a global unicast address:
ip -6 addr show dev enp1s0 scope global
If it only shows scope link, your ISP hasn't assigned a prefix yet — check your WAN connection.
NDP proxy isn't responding to Neighbor Solicitations.
Check the daemon has the capabilities it needs:
journalctl -u myispsucksv6 | grep -i...