1import{a as n,c as a,f as t,o as s}from"./app-fWPFO-Ym.js";const i={};function o(l,e){return s(),a("div",null,[...e[0]||(e[0]=[t(`<p>I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP.</p><h2 id="why-bother-with-ixp" tabindex="-1"><a class="header-anchor" href="#why-bother-with-ixp"><span>Why Bother with IXP?</span></a></h2><p>Honestly, the initial motivation was simple - I just wanted to play. BGP, RPKI - these terms sound impressive, but only by actually doing it did I realize I could set it up myself. Plus, it can help friends' networks interconnect more easily, so why not?</p><ul><li>Wanted to deeply understand BGP and RPKI - just reading docs isn't enough, must practice</li><li>Let small networks interconnect with low barriers, experience "the internet of the internet"</li><li>Try remote virtual access, see if friends on the other side of the planet can easily connect</li></ul><h2 id="technology-selection-and-pitfalls" tabindex="-1"><a class="header-anchor" href="#technology-selection-and-pitfalls"><span>Technology Selection and Pitfalls</span></a></h2><p>From the start, I didn't plan to make it too complex - as long as it runs, interconnects, and is secure.</p><ul><li>Chose Bird for routing software - lightweight, easy to use, configuration not difficult</li><li>Used VXLAN for switching, saves the hassle of physical switches, remote access is convenient too</li><li>Set up my own RPKI RTR server for security</li><li>Server in Frankfurt, rich European network resources, decent latency</li></ul><p>The most troublesome part was actually remote virtual access, since not everyone can go to the data center to plug in a cable. VXLAN was a huge help - everyone just needs a public VPS to pull tunnels in.</p><h2 id="build-log" tabindex="-1"><a class="header-anchor" href="#build-log"><span>Build Log</span></a></h2><h3 id="_1-server-and-network" tabindex="-1"><a class="header-anchor" href="#_1-server-and-network"><span>1. Server and Network</span></a></h3><p>First got a VPS that supports BGP, applied for IPv6 segment <code>2a14:67c1:a080::/48</code>. IPv4 is too expensive, IPv6 is really nice to use.</p><div class="language-bash" data-highlighter="prismjs" data-ext="sh"><pre><code class="language-bash"><span class="line"><span class="token comment"># Create IXP VXLAN interface</span></span> 2<span class="line"><span class="token function">ip</span> <span class="token function">link</span> <span class="token function">add</span> vxlan0 <span class="token builtin class-name">type</span> vxlan <span class="token function">id</span> <span class="token number">10</span> dstport <span class="token number">4789</span> <span class="token builtin class-name">local</span> 2a05:f480:1800:2e75:5400:05ff:fe65:88f3</span> 3<span class="line"><span class="token function">ip</span> addr <span class="token function">add</span> 2a14:67c1:a080::1/64 dev vxlan0</span> 4<span class="line"><span class="token function">ip</span> <span class="token function">link</span> <span class="token builtin class-name">set</span> vxlan0 up</span> 5<span class="line"></span></code></pre></div><h3 id="_2-bird-configuration" tabindex="-1"><a class="header-anchor" href="#_2-bird-configuration"><span>2. Bird Configuration</span></a></h3><p>Bird is the core, responsible for BGP route exchange. Configuration is actually not as complex as imagined, mainly ASN filtering, RPKI validation, templating and peers.</p><div class="language-conf" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line">router id 1.1.1.1;</span> 6<span class="line"></span> 7<span class="line"># Define BOGON ASN filtering</span> 8<span class="line">define BOGON_ASNS = [</span> 9<span class="line"> 0, 23456, 64496..64511, # ... other BOGON ASNs</span> 10<span class="line">];</span> 11<span class="line"></span> 12<span class="line">define IX_PEERS = [</span> 13<span class="line"> 213605, 213891, 151194, 198025, 210352</span> 14<span class="line">];</span> 15<span class="line"></span> 16<span class="line">function ix_import() {</span> 17<span class="line"> if bgp_path.last ~ BOGON_ASNS then return false;</span> 18<span class="line"> if !check_roa_v6() then return false;</span> 19<span class="line"> return true;</span> 20<span class="line">}
20</span> 21<span class="line"></span></code></pre></div><p>Templated configuration makes adding members later very convenient:</p><div class="language-conf" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line">template bgp ix_rs {</span> 22<span class="line"> local as 210440;</span> 23<span class="line"> multihop 2;</span> 24<span class="line"> ipv6 {</span> 25<span class="line"> import where ix_import();</span> 26<span class="line"> export where ix_export();</span> 27<span class="line"> next hop self;</span> 28<span class="line"> graceful restart on;</span> 29<span class="line"> };</span> 30<span class="line">}</span> 31<span class="line"></span></code></pre></div><h3 id="_3-rpki-validation" tabindex="-1"><a class="header-anchor" href="#_3-rpki-validation"><span>3. RPKI Validation</span></a></h3><p>Can't skip on security - set up my own RPKI validator, also pulled a backup from Cloudflare.</p><div class="language-conf" data-highlighter="prismjs" data-ext="conf"><pre><code class="language-conf"><span class="line">protocol rpki rpki_akae {</span> 32<span class="line"> roa4 { table roa_table_v4; };</span> 33<span class="line"> roa6 { table roa_table_v6; };</span> 34<span class="line"> remote "rpki.akae.re" port 8282;</span> 35<span class="line"> retry keep 90;</span> 36<span class="line"> refresh keep 43200;</span> 37<span class="line"> expire keep 86400;</span> 38<span class="line">}</span> 39<span class="line"></span> 40<span class="line">protocol rpki rpki_cloudflare {</span> 41<span class="line"> roa4 { table roa_table_v4; };</span> 42<span class="line"> roa6 { table roa_table_v6; };</span> 43<span class="line"> remote "rtr.rpki.cloudflare.com" port 8282;</span> 44<span class="line"> retry keep 90;</span> 45<span class="line"> refresh keep 43200;</span> 46<span class="line"> expire keep 86400;</span> 47<span class="line">}</span> 48<span class="line"></span> 49<span class="line">function check_roa_v6() {</span> 50<span class="line"> case roa_check(roa_table_v6, net, bgp_path.last) {</span> 51<span class="line"> ROA_VALID: return true;</span> 52<span class="line"> ROA_UNKNOWN: return true;</span> 53<span class="line"> ROA_INVALID: return false;</span> 54<span class="line"> }</span> 55<span class="line">}</span> 56<span class="line"></span></code></pre></div><h3 id="_4-peeringdb-registration" tabindex="-1"><a class="header-anchor" href="#_4-peeringdb-registration"><span>4. PeeringDB Registration</span></a></h3><p>After setting up, casually registered on PeeringDB:</p><ul><li>Organization: AKAERE NETWORKS TECHNOLOGY LTD</li><li>Alias: Akaere IX</li><li>Location: CN</li><li>Region: Asia Pacific</li><li>Service Level: Business Hours</li><li>Website: <a href="https://ixpm.akae.re/" target="_blank" rel="noopener noreferrer">ixpm.akae.re</a></li></ul><h2 id="operations-notes" tabindex="-1"><a class="header-anchor" href="#operations-notes"><span>Operations Notes</span></a></h2><p>Currently several friends' networks have connected to Akaere IX, everyone playing BGP together, testing routes, tinkering with RPKI. Bandwidth and scale aren't really the point - the key is being able to interconnect, communicate, and grow together.</p><h3 id="pitfalls-encountered" tabindex="-1"><a class="header-anchor" href="#pitfalls-encountered"><span>Pitfalls Encountered</span></a></h3><ul><li>VXLAN occasionally acts up, tunnels unstable, need more monitoring</li><li>Each member's routing policy is different, configuration needs to be flexible</li></ul><h3 id="technical-gains" tabindex="-1"><a class="header-anchor" href="#technical-gains"><span>Technical Gains</span></a></h3><ul><li>BGP route control and policy tricks - hands-on practice is way more interesting than reading books</li><li>RPKI deployment and exception handling - security level maxed out</li><li>VXLAN cross-regional layer 2 networks - remote access so easy</li><li>Automated script management - saves a lot of worry</li></ul><h2 id="future-ideas" tabindex="-1"><a class="header-anchor" href="#future-ideas"><span>Future Ideas</span></a></h2><p>Akaere IX is still slowly improving, future plans:</p><ul><li>Multiple access points, covering more regions</li><li>Better automation and visualization</li><li>Enrich routing security services more</li><li>Maybe even interconnect with other IXPs for fun</li></ul><h2 id="summary" tabindex="-1"><a class="header-anchor" href="#summary"><span>Summary</span></a></h2><p>This IXP tinkering experience brought not just technical knowledge, but the joy of growing together with a group of friends who also love networking. The essence of the internet is openness and connection - IXP is just a small microcosm of that.</p><p>If you also want to play with BGP and experience network interconnection, feel free to reach out ([email protected]), let's tinker together!</p><figure><img src="https://s3.pysio.online/cdn-cgi/image/f=avif,onerror=redirect,slow-connection-quality=50/https://s3.pysio.online/pysioimages/akaere/Akaere IXP.png" alt="AKIX
56Logo" tabindex="0" loading="lazy"><figcaption>AKIX Logo</figcaption></figure><hr><p><strong>Technical References:</strong></p><ul><li><a href="https://bird.network.cz/" target="_blank" rel="noopener noreferrer">BIRD Router Documentation</a></li><li><a href="https://rpki.readthedocs.io/" target="_blank" rel="noopener noreferrer">RPKI Deployment Guide</a></li></ul>`,39)])])}const p=n(i,[["render",o]]),c=JSON.parse(`{"path":"/en/posts/daily/AKIX.html","title":"Building an IXP - A Small Journal","lang":"en-US","frontmatter":{"title":"Building an IXP - A Small Journal","date":"2025-05-05T00:00:00.000Z","icon":"fa-solid fa-ethernet","category":"daily","tag":["BGP","Daily"],"description":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,...","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"Building an IXP - A Small Journal\\",\\"image\\":[\\"https://s3.pysio.online/cdn-cgi/image/f=avif,onerror=redirect,slow-connection-quality=50/https://s3.pysio.online/pysioimages/akaere/Akaere%20IXP.png\\"],\\"datePublished\\":\\"2025-05-05T00:00:00.000Z\\",\\"dateModified\\":\\"2025-06-01T00:04:33.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Pysio\\",\\"url\\":\\"https://github.com/pysio2007/\\"}]}"],["meta",{"property":"og:url","content":"https://www.pysio.online/en/posts/daily/AKIX.html"}],["meta",{"property":"og:site_name","content":"Pysio's Home"}],["meta",{"property":"og:title","content":"Building an IXP - A Small Journal"}],["meta",{"property":"og:description","content":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://s3.pysio.online/cdn-cgi/image/f=avif,onerror=redirect,slow-connection-quality=50/https://s3.pysio.online/pysioimages/akaere/Akaere%20IXP.png"}],["meta",{"property":"og:locale","content":"en-US"}],["meta",{"property":"og:locale:alternate","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2025-06-01T00:04:33.000Z"}],["meta",{"property":"article:tag","content":"Daily"}],["meta",{"property":"article:tag","content":"BGP"}],["meta",{"property":"article:published_time","content":"2025-05-05T00:00:00.000Z"}],["meta",{"property":"article:modified_time","content":"2025-06-01T00:04:33.000Z"}],["link",{"rel":"alternate","hreflang":"zh-cn","href":"https://www.pysio.online/posts/daily/AKIX.html"}],["meta",{"property":"article:published_time","content":"2025-05-05T00:00:00.000Z"}],["meta",{"name":"article:published_time","content":"2025-05-05T00:00:00.000Z"}],["meta",{"property":"article:tag","content":"BGP"}],["meta",{"property":"article:tag","content":"Daily"}],["meta",{"property":"article:section","content":"daily"}],["meta",{"property":"og:title","content":"Building an IXP - A Small Journal"}],["meta",{"property":"og:url","content":"https://www.pysio.online/en/posts/daily/AKIX.html"}],["meta",{"property":"og:description","content":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,..."}],["meta",{"name":"description","content":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,..."}],["meta",{"name":"twitter:title","content":"Building an IXP - A Small Journal"}],["meta",{"name":"twitter:description","content":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,..."}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"BlogPosting\\",\\"headline\\":\\"Building an IXP - A Small Journal\\",\\"author\\":{\\"@type\\":\\"Person\\",\\"name\\":\\"Pysio\\",\\"url\\":\\"https://github.com/pysio2007\\"},\\"publisher\\":{\\"@type\\":\\"Organization\\",\\"name\\":\\"Pysio's Home\\",\\"url\\":\\"https://www.pysio.online\\"},\\"url\\":\\"https://www.pysio.online/en/posts/daily/AKIX.html\\",\\"datePublished\\":\\"2025-05-05T00:00:00.000Z\\",\\"dateModified\\":\\"2025-05-05T00:00:00.000Z\\",\\"description\\":\\"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,...\\",\\"mainEntityOfPage\\":{\\"@type\\":\\"WebPage\\",\\"@id\\":\\"https://www.pysio.online/en/posts/daily/AKIX.html\\"}}"],["link",{"rel":"canonical","href":"https://www.pysio.online/en/posts/daily/AKIX.html"}],["link",{"rel":"alternate","type":"application/rss+xml","title":"Pysio's Home RSS Feed","href":"https://www.pysio.online/rss.xml"}],["meta",{"property":"og:title","content":"Building an IXP - A Small Journal"}],["meta",{"property":"og:description","content":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,..."}],["meta",{"property":"og:image","content":"https://www.pysio.online/og-images/buildinganixp-asmalljournal.png"}],["meta",{"property":"og:url","content":"https://www.pysio.online/en/posts/daily/AKIX.html"}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:site_name","content":"Pysio's Home"}],["meta",{"name":"twitter:card","content":"summary_large_image"}],["meta",{"name":"twitter:title","content":"Building an IXP - A Small Journal"}],["meta",{"name":"twitter:description","content":"I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP. Why Bother with IXP? Honestly,..."}],["meta",{"name":"twitter:image","content":"https://www.pysio.online/og-images/buildinganixp-asmalljournal.png"}],["link",{"rel":"alternate","type":"application/rss+xml","href":"https://www.pysio.online/en/rss.xml","title":"Pysio's Home RSS Feed"}]]}
56,"git":{"createdTime":1748736273000,"updatedTime":1748736273000,"contributors":[{"name":"pysio2007","username":"pysio2007","email":"[email protected]","commits":1,"url":"https://github.com/pysio2007"}]},"readingTime":{"minutes":2.54,"words":761},"filePathRelative":"en/posts/daily/AKIX.md","excerpt":"<p>I've had my ASN for three months now, and I haven't been tinkering much lately. Recently, on a whim, I suddenly wanted to try building my own IXP.</p>\\n<h2>Why Bother with IXP?</h2>\\n<p>Honestly, the initial motivation was simple - I just wanted to play. BGP, RPKI - these terms sound impressive, but only by actually doing it did I realize I could set it up myself. Plus, it can help friends' networks interconnect more easily, so why not?</p>","autoDesc":true}`);export{p as comp,c as data};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.