<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>mindspit</title>
  <link>https://blog.mindspit.co.uk/</link>
  <atom:link href="https://blog.mindspit.co.uk/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Tech, travel and the odd life update.</description>
  <language>en-gb</language>
  <item>
    <title>Running BGP on a UniFi Cloud Gateway Fiber over PPPoE</title>
    <link>https://blog.mindspit.co.uk/posts/unifi-bgp-pppoe.html</link>
    <guid isPermaLink="true">https://blog.mindspit.co.uk/posts/unifi-bgp-pppoe.html</guid>
    <pubDate>Sun, 18 Oct 2026 08:00:00 +0000</pubDate>
    <category>Tech</category>
    <description>UniFi UCG Fiber BGP over PPPoE: working FRR config, the TCP 179 firewall rule, and fixes for the DHCPv6 prefix request and bad eth4 default route.</description>
    <content:encoded><![CDATA[<p>In <a href="/posts/becoming-my-own-isp.html">my last post</a> I covered how I became my own ISP: an ASN, a /48 and a sponsoring LIR. This one is the practical follow-up. I announce that /48 with BGP from a UniFi Cloud Gateway Fiber (UCG Fiber) on a PPPoE WAN. It works, but UniFi got in the way in two places: it keeps requesting a DHCPv6 prefix that you can't turn off, and "Static" IPv6 on a PPPoE WAN adds a default route on the wrong interface. This post covers the setup, those two problems, and the workarounds I'm using.</p>
<p>Everything below comes from my own setup, so treat it as a starting point and check it against your firmware and your ISP.</p>
<div class="toc" role="navigation" aria-label="On this page"><strong>On this page</strong><ol><li><a href="#quick-answers">Quick answers: common UniFi BGP problems</a></li><li><a href="#goal">What I was trying to do</a></li><li><a href="#ripe">Step 1: the RIPE side (aut-num, route6 and RPKI ROA)</a></li><li><a href="#frr-config">Step 2: the FRR BGP config on the UCG Fiber</a></li><li><a href="#lan">Step 3: put the /48 on your LAN with SLAAC</a></li><li><a href="#dhcpv6-pd">Problem 1: you can&#x27;t turn off DHCPv6 prefix delegation on a PPPoE WAN (odhcp6c)</a></li><li><a href="#bad-default-route">Problem 2: Static IPv6 on a PPPoE WAN adds a bad default route via eth4</a></li><li><a href="#a-few-smaller-things">A few smaller things</a></li><li><a href="#debugging">Debugging toolbox: vtysh and tcpdump commands</a></li><li><a href="#what-id-do-differently">What I&#x27;d do differently</a></li><li><a href="#still-unsolved">Still unsolved</a></li></ol></div><h2 id="quick-answers">Quick answers: common UniFi BGP problems</h2>
<p>Short answers for anyone who landed here with a specific problem. The detail is further down.</p>
<ul>
<li><strong>Can a UniFi Cloud Gateway Fiber (UCG Fiber) run BGP?</strong> Yes. Upload an FRR config under Settings &gt; Routing &gt; BGP. If your ISP's neighbour address is reached across the PPPoE link, use multihop eBGP with your PPPoE address as the source. <a href="#frr-config">See the FRR config</a>.</li>
<li><strong>BGP session stuck in Active over PPPoE?</strong> Capture packets on <code>ppp0</code>. In my case my ISP opened the connection to TCP 179 on my side, and UniFi was dropping it, so I needed a WAN-to-gateway allow rule limited to the neighbour. <a href="#firewall-179">See the firewall rule</a> and <a href="#debugging">the debugging commands</a>.</li>
<li><strong>BGP is up but my prefix isn't announced?</strong> FRR only announces a prefix that exists in the routing table, so add a static blackhole route for the whole /48. <a href="#blackhole-route">See the route</a>.</li>
<li><strong>UniFi keeps requesting a DHCPv6 prefix on a PPPoE WAN?</strong> <code>odhcp6c -P 0 ppp0</code> keeps running even with prefix delegation off on every LAN. Setting the WAN IPv6 to Static stops it. <a href="#dhcpv6-pd">See Problem 1</a>.</li>
<li><strong>IPv6 and BGP die after switching the PPPoE WAN to Static IPv6?</strong> UniFi adds <code>default via fe80::… dev eth4 table 201.ppp0</code>, which beats the working <code>default dev ppp0</code>. Delete it with <code>ip -6 route del</code>, and expect it back after a reboot. <a href="#bad-default-route">See Problem 2</a> and <a href="#workaround">the workaround</a>.</li>
<li><strong><code>show bgp</code> says "command not found"?</strong> Run FRR commands through <code>vtysh -c "..."</code>. <a href="#debugging">See the toolbox</a>.</li>
</ul>
<h2 id="goal">What I was trying to do</h2>
<p>I wanted to use my own IPv6 space under my own ASN instead of whatever prefix my ISP hands out. My ISP is also my sponsoring LIR, so the starting point was:</p>
<ul>
<li>an ASN registered with RIPE through my sponsoring LIR</li>
<li>a /48 from the same ISP</li>
<li>a UCG Fiber on a PPPoE connection</li>
<li>BGP to my ISP so the /48 is announced under my own ASN</li>
</ul>
<p>I use placeholders throughout: <code>YOUR_ASN</code>, <code>YOUR_PREFIX::/48</code>, <code>ISP_NEIGHBOR</code> (the neighbour address your ISP gives you) and <code>YOUR_PPPOE_IPV6</code> (your address on the PPPoE link). Swap in your own.</p>
<figure><a href="/images/network-diagram.svg" target="_blank" rel="noopener" title="Open full size"><img src="/images/network-diagram.svg" alt="The setup: homelab LANs, UCG Fiber, ONT, Olilo and the internet, with a PPPoE session between the router and the ISP and an eBGP session running over it" loading="lazy"></a><figcaption>The setup: homelab LANs, UCG Fiber, ONT, Olilo and the internet, with a PPPoE session between the router and the ISP and an eBGP session running over it</figcaption></figure>

<h2 id="ripe">Step 1: the RIPE side (aut-num, route6 and RPKI ROA)</h2>
<p>Before any router config, a few objects need to exist. With a sponsoring LIR most of this is their job, so ask them.</p>
<ol>
<li>Your ASN and <code>aut-num</code> object. Check the status is <code>ASSIGNED</code>, the <code>sponsoring-org</code> is right, and your import/export lines are what you expect.</li>
<li>A <code>route6</code> object for the /48 with <code>origin: YOUR_ASN</code>. The prefix holder (your ISP) has to authorise it.</li>
<li>An RPKI ROA for the /48 with your ASN as origin and a max length of /48. Without it, some networks treat your announcement as unverified, and a ROA with the wrong origin makes it invalid.</li>
</ol>
<p>You don't need your own RPKI certificate. The ROA is created by whoever holds the address space.</p>
<h2 id="frr-config">Step 2: the FRR BGP config on the UCG Fiber</h2>
<p>Recent UniFi Network versions let you upload an FRR config. Look under Settings &gt; Routing &gt; BGP, though the menu name may differ on your version. My ISP gave me a neighbour address that isn't on a shared subnet, because it's reached across the PPPoE link. That means multihop eBGP, with the source address set to my PPPoE address.</p>
<pre><code>router bgp YOUR_ASN
 bgp router-id YOUR_IPV4_ADDRESS
 no bgp ebgp-requires-policy
 no bgp default ipv4-unicast
 neighbor ISP_NEIGHBOR remote-as ISP_ASN
 neighbor ISP_NEIGHBOR description ISP
 neighbor ISP_NEIGHBOR ebgp-multihop 10
 neighbor ISP_NEIGHBOR update-source YOUR_PPPOE_IPV6
 !
 address-family ipv6 unicast
  network YOUR_PREFIX::/48
  neighbor ISP_NEIGHBOR activate
  neighbor ISP_NEIGHBOR prefix-list ANNOUNCE out
  neighbor ISP_NEIGHBOR prefix-list DENY-ALL in
 exit-address-family
!
ipv6 prefix-list ANNOUNCE seq 5 permit YOUR_PREFIX::/48
ipv6 prefix-list DENY-ALL seq 5 deny ::/0 le 128
</code></pre>
<p>What the interesting lines do:</p>
<ul>
<li><code>bgp router-id</code> is in IPv4 format even on an IPv6-only setup. It's just a label, but FRR wants one. I used my static IPv4.</li>
<li><code>ebgp-multihop</code> and <code>update-source</code> are needed because the neighbour isn't directly connected. <code>update-source ppp0</code> also worked for me.</li>
<li><code>DENY-ALL</code> inbound means I only announce my /48 and accept nothing back. That stops the ISP's routes from competing with my PPPoE default route.</li>
<li><code>ipv6 prefix-list</code> is the form FRR needs for IPv6. Copying a template that says <code>ip prefix-list</code> won't work.</li>
</ul>
<figure><a href="/images/unifi-bgp-session.png" target="_blank" rel="noopener" title="Open full size"><img src="/images/unifi-bgp-session.png" alt="The UniFi routing page showing the BGP configuration enabled and the neighbour Established" loading="lazy"></a><figcaption>The UniFi routing page showing the BGP configuration enabled and the neighbour Established</figcaption></figure>

<p>Once it's up, the routing page shows the neighbour as Established, with one advertised route and none received. That's the <code>DENY-ALL</code> inbound filter doing its job.</p>
<h3 id="blackhole-route">The /48 needs a route, or nothing is announced</h3>
<p>FRR's <code>network</code> statement only announces a prefix that's in the routing table. Your LANs are /64s, so you need a static blackhole route for the whole /48. FRR didn't install the one in my uploaded file, so I added it as a static route in the UniFi UI instead.</p>
<figure><a href="/images/unifi-static-route.png" target="_blank" rel="noopener" title="Open full size"><img src="/images/unifi-static-route.png" alt="The static route for the /48 in UniFi&#x27;s routing page, with no next hop or interface" loading="lazy"></a><figcaption>The static route for the /48 in UniFi&#x27;s routing page, with no next hop or interface</figcaption></figure>

<h3 id="firewall-179">The firewall: my ISP opened the connection (allow TCP 179)</h3>
<p>I assumed my router initiated the BGP session. A packet capture showed the opposite: my ISP's router connected to port 179 on my side. UniFi drops unsolicited inbound traffic by default, so I needed an allow rule: External to Gateway, TCP, destination port 179, source set to the neighbour address only. Never open 179 to the world.</p>
<p>One mistake worth mentioning: I first set 179 as the source port. BGP connects to port 179 from a random port, so the rule never matched. You can check whether a rule is being hit from the packet counters (<code>ip6tables -L UBIOS_WAN_LOCAL_USER -v -n</code>).</p>
<h2 id="lan">Step 3: put the /48 on your LAN with SLAAC</h2>
<p>Give each LAN its own /64 from the /48 under Settings &gt; Networks &gt; the network &gt; IPv6. Set the interface type to Static, the gateway to <code>YOUR_PREFIX:0:1::1/64</code>, and turn Router Advertisement on. Clients then autoconfigure with SLAAC.</p>
<p>To check a client has picked up an address from your /48, use <code>ipconfig</code> on Windows or <code>ifconfig en0 | grep inet6</code> on a Mac. A Mac has <code>ping6</code>, not <code>ping -6</code>.</p>
<h2 id="dhcpv6-pd">Problem 1: you can't turn off DHCPv6 prefix delegation on a PPPoE WAN (odhcp6c)</h2>
<p>My ISP asked me to make sure prefix delegation was off on my account. UniFi's WAN IPv6 settings only offer DHCPv6 (with a delegation size of Auto or a fixed size, smallest /48) or Static. Even with prefix delegation turned off on every LAN, the gateway runs <code>odhcp6c -P 0 ppp0</code>, which keeps requesting a prefix. You can see it with:</p>
<pre><code>ps aux | grep odhcp6c
</code></pre>
<p>In my case the BGP session sat in Active with no reply while the prefix request was running, and came up within seconds when I set the WAN IPv6 to Static, so no prefix was requested. I saw that twice. I can't prove the prefix request was the cause, but it's the pattern I saw.</p>
<h2 id="bad-default-route">Problem 2: Static IPv6 on a PPPoE WAN adds a bad default route via eth4</h2>
<p>This one cost me hours. With the WAN on Static, UniFi adds this:</p>
<pre><code>default via fe80::&lt;peer link-local&gt; dev eth4 table 201.ppp0 proto static metric 1
</code></pre>
<p>It's bound to the physical port (<code>eth4</code>), but the peer is only reachable over <code>ppp0</code>. It beats the working <code>default dev ppp0</code> on metric, so IPv6 dies and BGP drops. It comes back after every reboot, reprovision or config upload.</p>
<p>To check for it:</p>
<pre><code>ip -6 route show table all | grep -E &quot;^default&quot;
</code></pre>
<p>To remove it:</p>
<pre><code>ip -6 route del default via fe80::200:ff:fe00:0 dev eth4 table 201.ppp0
</code></pre>
<p>Entering the gateway as <code>fe80::...%ppp0</code>, or leaving it blank, gets rejected in the UI. In DHCPv6 mode the default route is fine (<code>dev ppp0</code>, learned from a router advertisement), so the problem only appears with Static.</p>
<h3 id="workaround">The workaround</h3>
<p>A background loop that deletes the route every few seconds:</p>
<pre><code>nohup sh -c 'while true; do ip -6 route del default via fe80::200:ff:fe00:0 dev eth4 table 201.ppp0 2&gt;/dev/null; sleep 10; done' &gt;/dev/null 2&gt;&amp;1 &amp;
</code></pre>
<p>It dies at reboot, so I also wrote a small script for a Raspberry Pi that SSHes into the UCG every minute, removes the route if it's there, restarts the loop if it isn't running, and logs the BGP state. It's a hack, and I'd love a proper fix.</p>
<h2 id="a-few-smaller-things">A few smaller things</h2>
<ul>
<li><code>vtysh</code> is how you get FRR's <code>show</code> commands. Typing <code>show bgp ...</code> in the normal shell gives "command not found".</li>
<li>A reset can take a while to recover. After stopping a session, mine only came back after a few minutes, and once only after a full PPPoE reset.</li>
<li>UniFi may ignore lines in an uploaded FRR file, like the blackhole route. Check <code>vtysh -c "show running-config"</code> to see what actually loaded.</li>
</ul>
<h2 id="debugging">Debugging toolbox: vtysh and tcpdump commands</h2>
<p>On the UCG, SSH in and use <code>vtysh</code> for FRR:</p>
<pre><code>vtysh -c &quot;show bgp ipv6 unicast summary&quot;          # session state and prefixes sent
vtysh -c &quot;show bgp ipv6 unicast YOUR_PREFIX::/48&quot; # what you announce
vtysh -c &quot;show running-config&quot;                    # what actually loaded
vtysh -c &quot;clear bgp ipv6 unicast ISP_NEIGHBOR&quot;    # restart the session
ip -6 route show table all | grep -E &quot;^default&quot;   # look for the bad route
ip -6 addr show ppp0                              # your PPPoE address
tcpdump -n -i ppp0 'ip6 and host ISP_NEIGHBOR and tcp port 179'
</code></pre>
<p>Once the session is Established, check the outside view too. Search your prefix on bgp.tools and confirm it's visible, with the right origin AS and a valid RPKI status.</p>
<p>When a session is stuck in Active, the packet capture is what finds the cause. SYNs leaving and nothing coming back means the other side isn't answering. No SYNs at all means your own router isn't trying.</p>
<h2 id="what-id-do-differently">What I'd do differently</h2>
<ol>
<li>Ask the ISP up front whether they initiate the BGP session or expect you to, and what source address they have configured for you.</li>
<li>Capture packets early instead of guessing at config.</li>
<li>Check the route table after every UniFi change, not just the BGP config.</li>
</ol>
<h2 id="still-unsolved">Still unsolved</h2>
<ul>
<li>I haven't found a way to stop UniFi requesting a DHCPv6 prefix on a PPPoE WAN.</li>
<li>I haven't found a clean way to stop Static IPv6 binding the default route to the physical WAN port.</li>
</ul>
<p>If you've solved either on a UCG Fiber, I'd love to hear how.</p>
<p>This is what worked on my setup, with my ISP. Firmware versions, menus and ISP behaviour differ, so check things against your own situation. Don't paste your PPPoE credentials, or anything containing them, anywhere public.</p>]]></content:encoded>
  </item>
  <item>
    <title>Becoming My Own ISP</title>
    <link>https://blog.mindspit.co.uk/posts/becoming-my-own-isp.html</link>
    <guid isPermaLink="true">https://blog.mindspit.co.uk/posts/becoming-my-own-isp.html</guid>
    <pubDate>Sun, 18 Oct 2026 08:00:00 +0000</pubDate>
    <category>Tech</category>
    <description>How I announce my own IPv6 prefix from a home router with my own ASN, what it costs via a sponsoring LIR, and why I skipped full RIPE NCC membership.</description>
    <content:encoded><![CDATA[<p>I now announce my own IPv6 prefix to the internet from a router at home, under my own AS number. Ten years ago, I'd have assumed that was reserved for people with a rack in a data centre and a budget to match. This post covers how I ended up here, what it takes, and why I went through a sponsoring LIR (Olilo) instead of becoming a full RIPE NCC member.</p>
<p>If you've wondered whether you can do this at home: yes, and it costs a lot less than you'd think.</p>
<div class="toc" role="navigation" aria-label="On this page"><strong>On this page</strong><ol><li><a href="#where-it-started-cardiff-2012">Where it started: Cardiff, 2012</a></li><li><a href="#zen-to-olilo">Zen to Olilo</a></li><li><a href="#first-the-alphabet-soup">First, the alphabet soup</a></li><li><a href="#option-1-become-a-full-ripe-ncc-member">Option 1: Become a full RIPE NCC member</a></li><li><a href="#option-2-use-a-sponsoring-lir">Option 2: Use a sponsoring LIR</a></li><li><a href="#pa-vs-pi-why-i-started-with-pa">PA vs PI: why I started with PA</a></li><li><a href="#the-process">The process</a></li><li><a href="#technical-tips">Technical tips</a></li><li><a href="#what-i-use-it-for">What I use it for</a></li><li><a href="#was-it-worth-it">Was it worth it?</a></li></ol></div><h2 id="where-it-started-cardiff-2012">Where it started: Cardiff, 2012</h2>
<p>Around 2012 I was working for an MSP, and we became a founding member of the Cardiff Internet Exchange. It has since moved to Newport and is now known as IXWales.</p>
<p>That was my introduction to a part of the internet I'd never really thought about. Up to then, "the internet" was something you bought from a provider and plugged in. Being involved with an exchange meant learning how networks actually connect to each other: ASNs, BGP sessions, peering, who exchanges traffic with whom and why. It's one of those things that's hard to unsee once you've seen it.</p>
<p>Fast forward a few years, and I wanted that hands-on experience for myself, at home, without the day job attached.</p>
<h2 id="zen-to-olilo">Zen to Olilo</h2>
<p>For a long time, my home connection was with Zen. Moving to Olilo changed what I could do with it. For a start I was able to add a /29 of IPv4 for my homelab, which gives me a small block of public addresses to play with instead of hiding everything behind a single NAT'd one.</p>
<p>Then Olilo started sponsoring for RIPE. That was the missing piece. I'd already been thinking about my own ASN and IPv6 space, and suddenly there was a straightforward route to getting both through an ISP I was already with. I jumped on it.</p>
<h2 id="first-the-alphabet-soup">First, the alphabet soup</h2>
<p>You'll meet these terms constantly, so here's the short version.</p>
<ul>
<li><strong>RIR</strong>: Regional Internet Registry. They hand out IP addresses and AS numbers for a region of the world. In Europe, that's the <strong>RIPE NCC</strong>.</li>
<li><strong>LIR</strong>: Local Internet Registry. A member of the RIPE NCC, typically an ISP or hosting company.</li>
<li><strong>ASN</strong>: Autonomous System Number. Your network's identity on the internet.</li>
<li><strong>PA</strong> (Provider Aggregatable): address space an LIR holds and assigns to its customers. It stays with the LIR.</li>
<li><strong>PI</strong> (Provider Independent): address space assigned to you directly (via a sponsoring LIR), portable between providers.</li>
<li><strong>Sponsoring LIR</strong>: an LIR that signs the contract with the RIPE NCC on your behalf, because the RIPE NCC doesn't deal with individual end users for this.</li>
</ul>
<p>The key point: <strong>you can't just ask RIPE for an ASN yourself.</strong> You go through an LIR, which leaves two options.</p>
<h2 id="option-1-become-a-full-ripe-ncc-member">Option 1: Become a full RIPE NCC member</h2>
<p>This is the "do it properly" route, and for a home lab it's serious overkill.</p>
<p>For 2026, RIPE's charging scheme is a €1,000 sign-up fee and €1,800 a year per LIR account. The 2027 scheme raises the annual fee to about €1,894. That's before you've announced anything.</p>
<p>What you get for that:</p>
<ul>
<li>Your own IPv6 allocation (a /32 as standard, which is 65,536 /48s)</li>
<li>Voting rights at the RIPE General Meeting</li>
<li>Direct access to the LIR Portal</li>
<li>The ability to assign space to your own customers</li>
</ul>
<p>If you run an actual ISP or hosting business, this is the right move. If you're running a lab at home, it isn't.</p>
<h2 id="option-2-use-a-sponsoring-lir">Option 2: Use a sponsoring LIR</h2>
<p>A sponsoring LIR handles the RIPE NCC paperwork and charges a much smaller fee. Your ASN is assigned to you rather than to them, and under RIPE's rules you can move it to another sponsoring LIR later. The sponsor does have to keep the registration accurate, so pick one that responds to emails.</p>
<p>Sponsors have costs of their own: the RIPE NCC charges them €50 a year per sponsored ASN and €75 a year per PI assignment, which is why free sponsorship is rare these days. Prices across the market vary a lot, so compare.</p>
<p>I went with Olilo (AS212683), who are also my ISP. That's a convenient combination, because BGP needs an upstream willing to run a session with you, and most residential ISPs aren't.</p>
<div class="tablewrap"><table>
<thead>
<tr>
<th></th>
<th>Full RIPE membership</th>
<th>Sponsoring LIR (Olilo)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Upfront</td>
<td>€1,000 sign-up</td>
<td>From £99</td>
</tr>
<tr>
<td>Yearly</td>
<td>~€1,800 (2026), ~€1,894 (2027)</td>
<td>From £99</td>
</tr>
<tr>
<td>Your own ASN</td>
<td>Yes</td>
<td>Yes, sponsored</td>
</tr>
<tr>
<td>IPv6</td>
<td>Your own /32 allocation</td>
<td>A /48 from your sponsor (PA), or PI at extra cost</td>
</tr>
<tr>
<td>Voting rights</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>Admin burden</td>
<td>All yours</td>
<td>Mostly the sponsor's</td>
</tr>
<tr>
<td>Right-sized for a home lab</td>
<td>No</td>
<td>Yes</td>
</tr>
</tbody>
</table></div>
<h2 id="pa-vs-pi-why-i-started-with-pa">PA vs PI: why I started with PA</h2>
<p>My /48 is PA. It comes out of Olilo's allocation and is assigned to me, with Olilo keeping the maintainer relationship in the RIPE database alongside mine.</p>
<p>I chose PA to start with because it was the cheaper way in. I wanted to test the whole setup first (the ASN, the BGP sessions, the RPKI ROA, the announcements) before committing to anything more. That testing is done and it's working, so I've now applied for my PI addresses.</p>
<p>The difference matters, and it's why I'm not stopping at PA:</p>
<ul>
<li><strong>The ASN is mine</strong> and can move to another sponsor.</li>
<li><strong>A PA /48 is on loan.</strong> If I leave Olilo, the prefix stays with them and I'd need to renumber.</li>
<li><strong>PI space is mine and portable.</strong> It needs a separate sponsorship arrangement and brings a recurring €75 RIPE charge, but there's no renumbering if I change provider.</li>
</ul>
<p>One thing to know if you're planning the same: IPv4 PI is closed to new assignments, so for newcomers PI means IPv6 PI. Starting on PA is a low-cost way to prove it all works, as long as you accept that it isn't permanent.</p>
<h2 id="the-process">The process</h2>
<p>Roughly, it went like this:</p>
<ol>
<li><strong>Pick a sponsor and sign up.</strong> Olilo handled the sponsoring LIR side, so I didn't need to work through every RIPE form myself.</li>
<li><strong>Show that you'll multihome.</strong> RIPE expects an ASN to be justified by having, or planning, more than one upstream, usually with written confirmation from the networks involved.</li>
<li><strong>Wait for the ASN.</strong> This can take anywhere from a few days to a couple of weeks depending on paperwork and queues.</li>
<li><strong>Get the /48 assigned and the RIPE database objects in place.</strong> That means <code>inet6num</code>, <code>aut-num</code> and a <code>route6</code> object, plus a maintainer object (mine is MINDSPIT-MNT).</li>
<li><strong>Create the RPKI ROA.</strong> More on this below.</li>
<li><strong>Configure BGP on the router.</strong> Mine is a UniFi UCG Fiber, with the WAN on PPPoE.</li>
<li><strong>Check the result from outside.</strong> Watching the prefix show up on bgp.tools for the first time is very satisfying.</li>
<li><strong>Apply for PI once it's proven.</strong> With the PA setup tested and working, I applied for PI addresses so the space is mine for the long term.</li>
</ol>
<h2 id="technical-tips">Technical tips</h2>
<p>A few things worth knowing before you start:</p>
<p>Create the RPKI ROA before you announce. A ROA says "this ASN is allowed to originate this prefix." More and more networks drop announcements that RPKI marks invalid, and a prefix with no ROA gets less trust than it used to. Do it first.</p>
<p>Create the <code>route6</code> object too. It's the older IRR-based way of declaring who may originate your prefix, and plenty of upstreams still build their filters from it.</p>
<p>Don't announce anything more specific than a /48. For IPv6, a /48 is generally the smallest prefix the internet accepts. A /49 will simply be filtered.</p>
<p>Only announce your own prefix. Leaking routes you learned from one upstream to another is one of the classic BGP mistakes. Use an outbound filter that permits only your prefix.</p>
<p>Watch your PPPoE MTU. PPPoE takes 8 bytes of overhead, so you're at 1492 rather than 1500. Connections that establish but stall on larger transfers are very often an MTU issue. Clamp your MSS.</p>
<p>Verify from the outside. bgp.tools and public looking glasses show what the rest of the world sees, which isn't always what your router believes it announced.</p>
<p>Confirm your upstream will actually run BGP with you. Many ISPs won't. Ask before you commit to anything.</p>
<h2 id="what-i-use-it-for">What I use it for</h2>
<p>Mostly learning, and a lab that doesn't depend on an upstream's address space staying the same. Specifically:</p>
<ul>
<li>A stable address block for my lab (mindspit.net)</li>
<li>A proper understanding of how routing works on the real internet</li>
<li>The chance to add a second path and see failover work properly</li>
</ul>
<p>On that last point, my next step is announcing the same prefix over a WireGuard tunnel to bgptunnel.com. It's 100 Mbps next to my ISP's multi gigabit, so it won't carry my main traffic. Outbound stays on my primary connection and the tunnel acts as an additional announcement path. I'll write that one up separately.</p>
<h2 id="was-it-worth-it">Was it worth it?</h2>
<p>On cost, a sponsored ASN and a /48 is hobby money. Compared with €1,800 or more a year for full LIR membership I'd never use, it's an easy decision.</p>
<p>On time, a few evenings of reading RIPE documentation.</p>
<p>If you're thinking of doing the same: find a sponsoring LIR that answers questions, consider starting on PA to test before moving to PI, and plan how you'll satisfy the multihoming requirement. The rest is configuration.</p>
<p>Spotted something I've got wrong, or have a question? Get in touch. I'm still learning, and corrections are welcome.</p>]]></content:encoded>
  </item>
</channel>
</rss>
