Disclosure up front: I run IPYE, a company that leases IP space. Most of this article is practical how-to; IPYE appears where a free /48, LOA, or ROA helps you try the work, with a short call to action at the end.
Two VPS providers only become multihoming when they advertise the same portable prefix. Claim a free /48 from IPYE once, announce it from both cities with your ASN, and steer with local-pref or prepends instead of renumbering applications. Instant setup, portal LOAs, and automatic ROA creation keep the second host's paperwork boring. Lab model: 2001:db8:100::/48, ASN 64496.
Design rules that prevent split brain
Give each node a unique BGP router-id. Export filters on both sites must permit only the /48. Prefer site A with higher local-pref for outbound exits. Prepend lightly on site B so inbound prefers A while both are healthy. Health-withdraw a sick node so it stops attracting clients. Keep ROA maxLength at /48 so neither site invents fighting more-specifics.
Policy sketches
Site A exports 2001:db8:100::/48 without prepend. Site B uses:
route-map PREPEND-BACKUP permit 10 set as-path prepend 64496 64496 ! address-family ipv6 unicast network 2001:db8:100::/48 neighbor 2001:db8:b::1 route-map PREPEND-BACKUP out neighbor 2001:db8:b::1 prefix-list ONLY48 out Mirror IPv6 address-family settings carefully; do not accidentally leave v4 export wide open on a dual-stack FRR.
Applications: anycast or DNS failover
Anycast the same service /128 on both hosts for stateless UDP/DNS, or use DNS failover between different /128s carved from the same free /48 for stateful TCP. Write down which pattern you chose. Sticky TCP users need expectations set during drains.
Failover drill
During a window, graceful-shutdown or clear BGP on site A. Watch public collectors move to B. Restore A. Measure with mtr from a third network—not from either VPS—and compare interface counters. Coordinate calendars so both sites are never drained together.
LOAs for both hosts
Each provider may want their own LOA file from the IPYE portal. File both before the first dual announce. When decommissioning a provider, withdraw BGP first, then drop their authorisation. Export running configs weekly and diff the two nodes for prepend or max-prefix drift.
Dual-site measurement and firewall symmetry
Chart inbound bytes on both VPS interfaces for two weeks before adding more prepends—if site B never carries traffic, lengthening B further is theatre. Prefer documented upstream communities when A is saturated. Keep DNS TTLs modest while you learn failure modes; stateful apps usually want DNS failover between distinct /128s rather than true anycast at first.
nftables on both nodes must expose the same ports on shared GUAs or you will chase fake BGP asymmetries. Diff show running-config weekly across nodes. Drain drills belong on the calendar quarterly. When retiring a provider, withdraw BGP before dropping LOA authorisation, and never drain both sites the same day.
Prepend math and customer messaging
Document the intended inbound preference in one sentence customers would understand: "Primary city A, backup city B." When you change prepends, update that sentence the same day. Support macros should know which city is supposed to win.
If you use anycast GUAs, enable connection draining on app proxies before BGP withdraw whenever possible. Log disconnect reasons during drills. For DNS failover designs, automate health checks that flip records only after BGP on the primary is confirmed down for N probes, not on a single failed ping from the VPS itself.
Two-city operations board
Maintain a tiny board with columns Primary, Backup, Draining. Move the site cards when you prepend or graceful-shutdown. Support macros should quote the board state. Chart bytes on both NICs weekly; if Backup never carries traffic, stop lengthening prepends and inspect upstream preference instead.
Keep firewall publishes identical for shared GUAs via one playbook. Diff running-configs weekly. Retire LOAs only after withdraw. Never schedule overlapping drains. Prefer DNS failover for sticky TCP until anycast drills look boring.
Ops cadence around byte chart
Stand up a recurring reminder titled with byte chart so the free /48 edge does not depend on heroic memory. Each reminder forces a look at DNS failover and a written note about overlapping drains. If twin nftables is missing from inventory, recreate it before any announce or withdraw. Treat LOA close-date as a blocking prerequisite when it is on the critical path.
During incidents on workflow 136, cite the five tokens above in ticket updates so search finds them later. After the incident, spend ten minutes deciding whether workflow 136 needs an automation hook. For workflow 136, convert repeated pain into a calendar reminder or a tiny script instead of another unread wiki page.
Keep production pushes for workflow 136 in a CI project separate from labs that still use documentation prefixes. Production reads the free /48 from inventory. Review merge approvers for workflow 136 each quarter.
Sign-off line 136
Operator completing this change initials beside the free /48, the peer IP, and the ticket number 136-GO on the shared ops sheet. Without initials, the window is not closed.
Note 136-1
Detail 1 for workflow 136: confirm that the free /48 still answers on the expected GUA from an LTE or off-net path after step 1, and log the RTT in the ticket as sample 136-1.
Do this next
Dual-home after you grab the prefix on the IPYE website, then practise drains until they are boring. Questions: ipye@turnel.com.
About IPYE
IPYE (https://ipye.com) leases IPv4, IPv6 and ASN space with instant setup. Your first IPv6 /48 is free for the first year, a real allocation you can announce on your own ASN, with a LOA from the portal and the ROA created automatically. ASN and region changes apply automatically. IPv4 /24 to /22 leases include LOA, ROA and per-/24 rDNS; WHOIS is editable on IPv6 /44 and larger. Locations: Los Angeles, New York, Ashburn, Salt Lake City, London, Amsterdam, Frankfurt. Claim your free /48: https://my.ipye.com/products/ipv6-rental. Questions: ipye@turnel.com.
Disclosure: I run IPYE
