I have Starlink. It works. It’s not fast, it’s not low-latency, and it drops packets when it rains. But it works.

It also doesn’t give me IPv6.

So I built one anyway. I created AS401155, set up a cloud router, tunneled IPv6 over IPv4, and announced my IP space to the internet. Now I have an autonomous system.

Why?

There’s no good reason. That’s the point.

Most people who run home BGP do it for redundancy — dual ISP failover, maybe some traffic engineering. I did it because Starlink doesn’t give me IPv6 and I wanted to understand BGP. The best way to understand something is to break it in production.

Here’s the setup: Starlink gives me IPv4 only. I spin up a VPS in the cloud, configure it as a BGP peer, and tunnel IPv6 traffic over an IPv4 tunnel between my home and the cloud router. From the cloud router, I advertise my IPv6 prefix to the internet via BGP.

So my IPv6 traffic goes: my network → Starlink (IPv4) → IPv4 tunnel → cloud router → BGP → internet.

It’s a lot of indirection for something that should be simple.

Here’s what the BGP config looks like on the cloud router:

set protocols bgp 65001 neighbor 203.0.113.1 remote-as 65001
set protocols bgp 65001 neighbor 203.0.113.1 address-family ipv6 unicast
set protocols bgp 65001 neighbor 203.0.113.1 route-map HOME-IN in
set protocols bgp 65001 neighbor 203.0.113.1 route-map HOME-OUT out
set route-map HOME-OUT rule 10 permit
set route-map HOME-OUT rule 10 action permit
set route-map HOME-OUT rule 10 match ipv6 address prefix-list MY-PREFIX
set prefix-list MY-PREFIX ipv6-prefix 2001:db8::/48 le 64

Three lines of BGP config. One prefix list. And the entire thing hangs on the assumption that the IPv4 tunnel stays up, the cloud router doesn’t reboot, and the peering partner doesn’t change their upstream.

Spoiler: it all breaks. Eventually.

VyOS

I chose VyOS because it’s open-source, it supports BGP natively, and it’s based on Debian. Which means it’s familiar, it’s well-documented, and it has a community that’s actively maintained.

It also means it has a configuration format that’s XML-based, a CLI that’s designed for Cisco veterans, and a habit of silently dropping routes when you least expect it.

VyOS is great. It’s powerful, it’s flexible, and it’s a never-ending source of “what the hell just happened” moments. I’ve spent more time debugging VyOS BGP session flaps than I have actually using the network it’s supposed to be managing.

The good news: VyOS 1.4+ has much better BGP support than earlier versions. The bad news: the good news doesn’t matter when you’re three hours into a troubleshooting session at 2 AM and the BGP session keeps resetting.

What I Learned

BGP is Not a Routing Protocol

BGP is a policy engine. It doesn’t care about the best path. It cares about the path that matches your policies. And if your policies are wrong, BGP will happily route your traffic into a black hole.

I learned this the hard way when I accidentally announced my prefix to the wrong peer and spent six hours watching my traffic go to a null route.

IPv6 Over IPv4 is a Layer Cake of Indirection

Tunneling IPv6 over IPv4 means every IPv6 packet gets wrapped in an IPv4 header, sent across Starlink’s IPv4 connection, unwrapped at the other end, and then routed via BGP. Each layer adds latency, each layer adds a failure mode, and each layer adds something that can go wrong at 3 AM.

It works. But it’s a lot of moving parts for a home network.

Starlink uses LEO satellites. That means your IP address changes when the satellite handoffs. It means your latency varies with the weather. It means your BGP session resets when the satellite moves.

This is fine for a home connection. It’s not fine for BGP. BGP sessions are supposed to be stable. Starlink sessions are supposed to be ephemeral.

The Result

AS401155 is running. It’s announcing my IPv6 prefix via BGP over an IPv4 tunnel through a cloud router. It’s working. It’s also the most fragile thing I’ve ever put into production.

If the IPv4 tunnel drops, my BGP session dies. If the cloud router reboots, my BGP session dies. If Starlink changes its IP, the tunnel breaks.

But it’s working. And I learned a lot. And that’s the point.