<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AS58280</title><link>https://as58280.net/</link><description>An autonomous system for fun and profit</description><atom:link href="https://as58280.net/it/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>it</language><copyright>Contents © 2025 &lt;a href="mailto:max@as58280.net"&gt;Max Stucchi&lt;/a&gt; </copyright><lastBuildDate>Thu, 30 Jan 2025 15:53:05 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Membership costs in other RIRs</title><link>https://as58280.net/it/articles/RIR-Costs/</link><dc:creator>Max Stucchi</dc:creator><description>&lt;h3&gt;Membership costs in other RIRs.  What would I pay somewhere else ?&lt;/h3&gt;
&lt;p&gt;During the upcoming &lt;a href="https://ripe88.ripe.net"&gt;RIPE88 Meeting&lt;/a&gt; in Krakow, there will be a &lt;a href="https://www.ripe.net/membership/meetings/gm/meetings/may-2024/"&gt;RIPE NCC General Meeting&lt;/a&gt;, and a vote about the charging scheme for 2025 will be held.&lt;/p&gt;
&lt;p&gt;The RIPE NCC has provided us with the options for voting, as set by the board.  They are three, as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Option A - Charging Scheme as is with 22.58% price increase for the annual contribution per LIR account (EUR 1,900) and a 0% price increase for Independent Internet number resource assignments* (EUR 50)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Option B - Charging Scheme as is with 20.97% price increase for the annual contribution per LIR account (EUR 1,875) and a 50% price increase for Independent Internet number resource assignments* (EUR 75)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Option C - Charging Scheme as is with 16.13% price increase for the annual contribution per LIR account (EUR 1,800), a 50% price increase for Independent Internet number resource assignments* (EUR 75) and a new AS Numbers fee of EUR 50 per assignment&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This proposal has created a lot of discussions on both the &lt;a href="https://t.me/ripe_chat"&gt;RIPE Community Telegram Group&lt;/a&gt; and on the &lt;em&gt;members-discuss&lt;/em&gt; mailing list.&lt;/p&gt;
&lt;p&gt;On the &lt;a href="https://t.me/IT_NOG"&gt;ITNOG Telegram Group&lt;/a&gt; there were claims that RIPE NCC was the most expensive RIR to be a member of.  This led me to start looking at what costs I would need to consider for my LIR if I ever wish to move it elsewhere.&lt;/p&gt;
&lt;p&gt;My LIR has the following resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An ASN (AS58280, of course);&lt;/li&gt;
&lt;li&gt;A /22 IPv4 (45.129.224.0/22);&lt;/li&gt;
&lt;li&gt;Two /29 IPv6 (2a0e:5040::/29 and 2a0f:fd00::/29).  The first one came as a direct allocation, while the second one came as a transfer, and has been used for research purposes for the last couple of years.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have decided to check how much I would pay, with the same amount of resources, in other RIRs.&lt;/p&gt;
&lt;p&gt;Just to set the tone, for RIPE NCC, my membership fees were &lt;strong&gt;1550 euro plus VAT&lt;/strong&gt;, so in total &lt;strong&gt;1810.28 euro&lt;/strong&gt;, as taken from my credit card statement.&lt;/p&gt;
&lt;h3&gt;AfriNIC&lt;/h3&gt;
&lt;p&gt;I headed to the AfriNIC fee calculator - https://afrinic.net/fee-calculator-nf, and filled it in as in the picture:&lt;/p&gt;
&lt;p&gt;&lt;img alt="AfriNIC Fees Calculator Form" src="https://as58280.net/images/AfriNIC-form.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="AfriNIC Fees" src="https://as58280.net/images/AfriNIC-fees.png"&gt;&lt;/p&gt;
&lt;p&gt;The total cost with current fees would be &lt;strong&gt;3550 $&lt;/strong&gt;.  At first glance, this is around twice as much as the RIPE NCC fees, but there are only &lt;strong&gt;1400 $ of recurring fees&lt;/strong&gt;, while &lt;strong&gt;2150 $ are for the "setup"&lt;/strong&gt; and are non-recurring.
I have asked on the &lt;a href="https://t.me/+SflBZLki-4g7CxAo"&gt;ZANOG Discuss Telegram Group&lt;/a&gt;  for more information about the proposed new fees, and was told that the initiative stalled when AfriNIC started having the issues we all know about.&lt;/p&gt;
&lt;h3&gt;APNIC&lt;/h3&gt;
&lt;p&gt;APNIC has a fee scheme where you pay based on the resources you hold.  I went to the calculator for fees for Non-Members (https://www.apnic.net/get-ip/apnic-membership/how-much-does-it-cost/non-member-fees-calculator/), and filled it in as follows:&lt;/p&gt;
&lt;p&gt;&lt;img alt="APNIC Fees Calculator for Non-Members" src="https://as58280.net/images/APNIC-Form.png"&gt;&lt;/p&gt;
&lt;p&gt;Which returned the following result:&lt;/p&gt;
&lt;p&gt;&lt;img alt="APNIC Results" src="https://as58280.net/images/APNIC-Results.png"&gt;&lt;/p&gt;
&lt;p&gt;There are some additional explanations:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="n"&gt;If&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;specified&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;above&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;were&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;held&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;under&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;would&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;964&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;instead&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;858&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;yielding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;saving&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AUD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;&lt;span class="mf"&gt;894.&lt;/span&gt;

&lt;span class="n"&gt;IPv4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IPv6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calculations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;separately&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;The&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;charged&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;greater&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;two&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;Your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;renewal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;invoices&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;be&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calculated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resource&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;holdings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assessed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;anniversary&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;applies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;APNIC&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Members&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Estimated&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fees&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;are&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;higher&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IPv4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IPv6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fees&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;holdings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;include&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;historical&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;resources&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;These&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;estimates&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;exclude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Good&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;consumption&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tax&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;varies&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;according&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Member&lt;/span&gt;&lt;span class="s1"&gt;'s economy and whether the organization is registered to pay such tax&lt;/span&gt;
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Based&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2024&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Fee&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Schedule&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Which means I would need to pay &lt;strong&gt;6858 Australian Dollars&lt;/strong&gt;, which amount roughly to &lt;strong&gt;4458.39 $ on the day of writing&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If I were to become a member, I would pay &lt;strong&gt;5964 Australian Dollars&lt;/strong&gt;, about &lt;strong&gt;3876.24 $&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;As I said initially, my LIR could be a bit of an outlier, in the sense that the second /29 IPv6 allocation is not a normal condition.  Without it, the costs would go down to &lt;strong&gt;4552 Australian dollars (2961.12$) or 5235 Australian Dollars (3405.42$)&lt;/strong&gt;, wether I would decide to be a member or not.&lt;/p&gt;
&lt;h3&gt;ARIN&lt;/h3&gt;
&lt;p&gt;ARIN has a category-based model, which you can find at https://www.arin.net/resources/fees/fee_schedule/:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Arin Categories" src="https://as58280.net/images/ARIN.png"&gt;&lt;/p&gt;
&lt;p&gt;In my case, my LIR would fall into the "Small" category, mostly due to the IPv6 allocations, which amount to a /28.  This would mean &lt;strong&gt;2000 $ of recurring fees&lt;/strong&gt;. &lt;/p&gt;
&lt;h3&gt;LACNIC&lt;/h3&gt;
&lt;p&gt;LACNIC is also based on categories, and you pay the highest amount between IPv4 and IPv6 and the category you end up in.&lt;/p&gt;
&lt;p&gt;For IPv4 the categories are the following (from https://www.lacnic.net/5448/2/lacnic/):&lt;/p&gt;
&lt;p&gt;&lt;img alt="LACNIC IPv4 Categories" src="https://as58280.net/images/LACNIC-v4.png"&gt;&lt;/p&gt;
&lt;p&gt;There are more, bigger categories, but they are out of scope of this article.&lt;/p&gt;
&lt;p&gt;As you can see, my LIR would fall into the &lt;em&gt;Micro&lt;/em&gt; Category, which would have a renewal fee of &lt;strong&gt;1000$, or 950$&lt;/strong&gt; if paid before the expiration date.&lt;/p&gt;
&lt;p&gt;Looking at IPv6, we have the following categories (from https://www.lacnic.net/5450/2/lacnic/isp-ipv6-fees):&lt;/p&gt;
&lt;p&gt;&lt;img alt="LACNIC IPv6 Categories" src="https://as58280.net/images/LACNIC-v6.png"&gt;&lt;/p&gt;
&lt;p&gt;With 2x /29 - which account for a /28, my LIR would fall under the &lt;em&gt;X Large&lt;/em&gt; category, which would mean having to pay &lt;strong&gt;28000$, or 26600$&lt;/strong&gt; if paid before expiration date.  As in the case of APNIC, my LIR is an outlier, but even with just a single /29 - which is the "most normal" allocation from the RIPE NCC, we would still be looking at &lt;strong&gt;14000$, or 13300$ discounted&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Luckily, there is no fee for ASNs.&lt;/p&gt;
&lt;p&gt;All in all, I would be billed 28000$, which is about 14 times what I pay at the RIPE NCC for the same amount of resources.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;Here is a breakdown of what I would pay in all the RIRs, in a simple table.  Everything in USD:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;RIR&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPv4&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPv6&lt;/th&gt;
&lt;th style="text-align: right;"&gt;ASN&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Payable Fee&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AfriNIC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.400,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APNIC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.515,04&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.458,39&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;4.458,39&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARIN&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.000 (X-Small)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.000 (Small)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.000,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LACNIC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.000 (Micro)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;28.000 (X-Large)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;28.000,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RIPE NCC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.657,11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For a better comparison, let's check what it would look like without the additional /29.  Amounts are in USD:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;RIR&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPv4&lt;/th&gt;
&lt;th style="text-align: right;"&gt;IPv6&lt;/th&gt;
&lt;th style="text-align: right;"&gt;ASN&lt;/th&gt;
&lt;th style="text-align: right;"&gt;Payable Fee&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AfriNIC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.400,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APNIC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.515,04&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.961,12&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.961,12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ARIN&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.000 (X-Small)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.000 (Small)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;2.000,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LACNIC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.000 (Micro)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;14.000 (X-Large)&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;14.000,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RIPE NCC&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;-&lt;/td&gt;
&lt;td style="text-align: right;"&gt;1.657,11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The two changes would be at APNIC and LACNIC, where LACNIC would see a 50% reduction in costs.  Still, we are talking of almost 10x what I am actually paying at the RIPE NCC.&lt;/p&gt;
&lt;p&gt;RIPE NCC scores as the second cheapest RIR to hold resources similar to what my LIR has.  It is a simple fee that does not need any calculations.  If the majority of voters were to choose option A, increasing fees to 1900 eur, that would bring RIPE NCC slightly above ARIN with actual exchange rate, at 2031.29$.  With options B and C, it would still be below ARIN, albeit very close.&lt;/p&gt;
&lt;p&gt;My LIR is a personal project, tied of course with AS58280, so of course I'm not particularly happy about increases in fees, but there are reasons for doing it at the moment.  I will be participating in the &lt;a href="https://ripe88.ripe.net/programme/meeting-plan/bof/"&gt;BoF about building a stable future for the RIPE NCC&lt;/a&gt; at the upcoming RIPE88 meeting in Krakow, and I hope many other people will do as well, with the intent of creating a good discussion on how to keep the RIPE NCC running in these challenging times.&lt;/p&gt;</description><guid>https://as58280.net/it/articles/RIR-Costs/</guid><pubDate>Wed, 24 Apr 2024 14:16:18 GMT</pubDate></item><item><title>RPKI Origin Validation on Mikrotik</title><link>https://as58280.net/it/articles/RPKI-on-Mikrotik/</link><dc:creator>Max Stucchi</dc:creator><description>&lt;h3&gt;Configuring RPKI-based Route Origin Validation on Mikrotik&lt;/h3&gt;
&lt;p&gt;About a week ago, Mikrotik announced that the latest version of their OS - I mean, the beta version of RouterOSv7 - now has support for RPKI Origin Validation.&lt;/p&gt;
&lt;p&gt;I have decided to try to configure it and report here.&lt;/p&gt;
&lt;p&gt;Unfortunately, &lt;strong&gt;IPv6 BGP&lt;/strong&gt; in RouterOSv7 Beta 8 is &lt;strong&gt;broken&lt;/strong&gt;, in which it does not send any network announcement to the other peer in the BGP session.  This means that at the time of this writing, my whole IPv6 configuration is broken, because I can't originate any IPv6 announcement from my network.&lt;/p&gt;
&lt;p&gt;Anyway, on with the experiment.  First of all we need to find our &lt;em&gt;canary&lt;/em&gt;, a network that is covered by a ROA that makes it &lt;em&gt;invalid&lt;/em&gt;.  There is a route announced by Cloudflare that we can use, and it's all described in &lt;a href="https://blog.cloudflare.com/is-bgp-safe-yet-rpki-routing-security-initiative/"&gt;this article&lt;/a&gt;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/ipv6/route&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print&lt;span class="w"&gt; &lt;/span&gt;where&lt;span class="w"&gt; &lt;/span&gt;dst-address&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"2606:4700:7000::/48"&lt;/span&gt;
Flags:&lt;span class="w"&gt; &lt;/span&gt;D&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;DYNAMIC&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;I&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;INACTIVE,&lt;span class="w"&gt; &lt;/span&gt;A&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;ACTIVE&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;b&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;BGP,&lt;span class="w"&gt; &lt;/span&gt;m&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;MODEM
Columns:&lt;span class="w"&gt; &lt;/span&gt;DST-ADDRESS,&lt;span class="w"&gt; &lt;/span&gt;GATEWAY,&lt;span class="w"&gt; &lt;/span&gt;DISTANCE
&lt;span class="w"&gt;       &lt;/span&gt;DST-ADDRESS&lt;span class="w"&gt;          &lt;/span&gt;GA&lt;span class="w"&gt;  &lt;/span&gt;DI
&lt;span class="w"&gt;  &lt;/span&gt;DIb&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2606&lt;/span&gt;:4700:7000::/48&lt;span class="w"&gt;  &lt;/span&gt;::&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;DIb&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;2606&lt;/span&gt;:4700:7000::/48&lt;span class="w"&gt;  &lt;/span&gt;::&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;20&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;As you can see, we are now receiving it.  I am receiving a full IPv6 feed from &lt;a href="https://www.openfactory.ch"&gt;OpenFactory - AS58299&lt;/a&gt; at the moment.&lt;/p&gt;
&lt;p&gt;We have to do work in three stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install a validator.  In this case we will use &lt;a href="https://www.nlnetlabs.nl/projects/rpki/routinator/"&gt;routinator&lt;/a&gt; from NLNetLabs.  It's really easy to install, fast, and will fit here;&lt;/li&gt;
&lt;li&gt;Set up a connection to the validator from the router.  In this case I am running a RB4011;&lt;/li&gt;
&lt;li&gt;Use the information we obtain from the validator to filter out the invalid networks.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;1. Install routinator&lt;/h4&gt;
&lt;p&gt;I have been using FreeBSD for about 20 years, so I will go ahead with it.  Routinator can also be installed on any Linux flavour.&lt;/p&gt;
&lt;p&gt;On FreeBSD, we have a package, so I will go ahead with pkg.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;root@routinator&lt;span class="w"&gt; &lt;/span&gt;/root&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;pkg&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;routinator
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Then configure to init it for the TALs&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;routinator&lt;span class="w"&gt; &lt;/span&gt;-g&lt;span class="w"&gt; &lt;/span&gt;routinator&lt;span class="w"&gt; &lt;/span&gt;routinator&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;/usr/local/etc/routinator/routinator.conf&lt;span class="w"&gt; &lt;/span&gt;init

sudo&lt;span class="w"&gt; &lt;/span&gt;-u&lt;span class="w"&gt; &lt;/span&gt;routinator&lt;span class="w"&gt; &lt;/span&gt;-g&lt;span class="w"&gt; &lt;/span&gt;routinator&lt;span class="w"&gt; &lt;/span&gt;routinator&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;/usr/local/etc/routinator/routinator.conf&lt;span class="w"&gt; &lt;/span&gt;init&lt;span class="w"&gt; &lt;/span&gt;--accept-arin-rpa
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The first command actually errored out, so I first copy the config file manually, and then re-run those two commands.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;root@routinator&lt;span class="w"&gt; &lt;/span&gt;/root&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/usr/local/etc/routinator/routinator.conf.example&lt;span class="w"&gt; &lt;/span&gt;/usr/local/etc/routinator/routinator.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Additionally, I didn't have &lt;em&gt;sudo&lt;/em&gt;, so I ran the commands as root and then I changed the owner of all the directories to be the &lt;em&gt;routinator&lt;/em&gt; user.&lt;/p&gt;
&lt;p&gt;I also changed the configuration so that the directory structure is more in line with what FreeBSD uses as standard hierarchy.&lt;/p&gt;
&lt;p&gt;You can find the complete file &lt;a href="https://github.com/AS58280/AS58280-Confs/blob/master/routinator.rpki.as58280.net/usr/local/etc/routinator/routinator.conf"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The last thing to do is to configure routinator to run in &lt;em&gt;rc.conf&lt;/em&gt; and then run it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;root@routinator&lt;span class="w"&gt; &lt;/span&gt;/root&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'routinator_enable="YES"'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/rc.conf
root@routinator&lt;span class="w"&gt; &lt;/span&gt;/root&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/usr/local/etc/rc.d/routinator&lt;span class="w"&gt; &lt;/span&gt;start
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and now we have routinator running and listening on 45.129.224.37 port 3323.&lt;/p&gt;
&lt;p&gt;This instance of routinator is available to use, and I'll soon setup a hostname for it.&lt;/p&gt;
&lt;h4&gt;2. Configure the RTR Session&lt;/h4&gt;
&lt;p&gt;Then, on to configuring our router.  As you can see, we have a specific menu for RPKI:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp&amp;gt;

..&lt;span class="w"&gt; &lt;/span&gt;--&lt;span class="w"&gt; &lt;/span&gt;go&lt;span class="w"&gt; &lt;/span&gt;up&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;routing
advertisements&lt;span class="w"&gt; &lt;/span&gt;--
connection&lt;span class="w"&gt; &lt;/span&gt;--
peer-cache&lt;span class="w"&gt; &lt;/span&gt;--
rpki&lt;span class="w"&gt; &lt;/span&gt;--
template&lt;span class="w"&gt; &lt;/span&gt;--
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The work we have to do is divided in two parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Setting up communication to the routinator instance; and&lt;/li&gt;
&lt;li&gt;Setting up our filters so that we filter based on RPKI.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;First of all, we have to configure the RTR Session.  We will connect to the routinator instance we have set up previously, so here:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;admin&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;r1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;btl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;as58280&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;net&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;routing&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;bgp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;rpki&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m m-Double"&gt;45.129.224.37&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3323&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;preference&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and I got an error while trying to print the entries:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/rpki&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print
Flags:&lt;span class="w"&gt; &lt;/span&gt;X&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;disabled
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;group&lt;span class="w"&gt; &lt;/span&gt;name&lt;span class="w"&gt; &lt;/span&gt;must&lt;span class="w"&gt; &lt;/span&gt;be&lt;span class="w"&gt; &lt;/span&gt;specified
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;.129.224.37&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3323&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;preference&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/rpki&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;

Group&lt;span class="w"&gt; &lt;/span&gt;::&lt;span class="o"&gt;=&lt;/span&gt;


&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/rpki&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;validator
&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/rpki&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print
Flags:&lt;span class="w"&gt; &lt;/span&gt;X&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;disabled
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;validator&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;.129.224.37&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3323&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;preference&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/rpki&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Turns out you can configure groups of validators to talk to, and I later on discovered that in your filters you can point to these specific groups.  That looks like an interesting feature.&lt;/p&gt;
&lt;h4&gt;3. Configure the filters&lt;/h4&gt;
&lt;p&gt;Let's go ahead and see what we need to do next with the filters.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/filter/rule&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;accept&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;-v6&lt;span class="w"&gt; &lt;/span&gt;rpki-verify&lt;span class="o"&gt;=&lt;/span&gt;validator&lt;span class="w"&gt; &lt;/span&gt;rpki-match&lt;span class="o"&gt;=&lt;/span&gt;valid
&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/filter/rule&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;-v6&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;reject&lt;span class="w"&gt; &lt;/span&gt;match-rpki&lt;span class="o"&gt;=&lt;/span&gt;invalid
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and then we need to add this filter chain to the template we use for BGP.  In &lt;em&gt;/routing/bgp/template/&lt;/em&gt; I have the following:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/template&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print
Flags:&lt;span class="w"&gt; &lt;/span&gt;*&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;default,&lt;span class="w"&gt; &lt;/span&gt;X&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;disabled,&lt;span class="w"&gt; &lt;/span&gt;I&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;inactive
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;*&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;reserved&lt;span class="w"&gt; &lt;/span&gt;AS&lt;span class="w"&gt; &lt;/span&gt;value
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"stucchinet4"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;routing-table&lt;span class="o"&gt;=&lt;/span&gt;main&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;58280&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;address-families&lt;span class="o"&gt;=&lt;/span&gt;ip,ipv6
&lt;span class="w"&gt;     &lt;/span&gt;output.filter&lt;span class="o"&gt;=&lt;/span&gt;out-v4&lt;span class="w"&gt; &lt;/span&gt;.network&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;.129.224.0/22

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"stucchinet6"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;routing-table&lt;span class="o"&gt;=&lt;/span&gt;main&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;apply-changes&lt;span class="o"&gt;=&lt;/span&gt;auto&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;58280&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;address-families&lt;span class="o"&gt;=&lt;/span&gt;ipv6&lt;span class="w"&gt; &lt;/span&gt;output.filter&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;.network&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And especially for the IPv6 template, I have no input.filter set, yet.  So let's go ahead and add it:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/template&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;input.filter&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;-v6
&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/template&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print
Flags:&lt;span class="w"&gt; &lt;/span&gt;*&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;default,&lt;span class="w"&gt; &lt;/span&gt;X&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;disabled,&lt;span class="w"&gt; &lt;/span&gt;I&lt;span class="w"&gt; &lt;/span&gt;-&lt;span class="w"&gt; &lt;/span&gt;inactive
&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;*&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;reserved&lt;span class="w"&gt; &lt;/span&gt;AS&lt;span class="w"&gt; &lt;/span&gt;value
&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"stucchinet4"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;routing-table&lt;span class="o"&gt;=&lt;/span&gt;main&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;58280&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;address-families&lt;span class="o"&gt;=&lt;/span&gt;ip,ipv6
&lt;span class="w"&gt;     &lt;/span&gt;output.filter&lt;span class="o"&gt;=&lt;/span&gt;out-v4&lt;span class="w"&gt; &lt;/span&gt;.network&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;.129.224.0/22

&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"stucchinet6"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;routing-table&lt;span class="o"&gt;=&lt;/span&gt;main&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default&lt;span class="w"&gt; &lt;/span&gt;apply-changes&lt;span class="o"&gt;=&lt;/span&gt;auto&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;58280&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;address-families&lt;span class="o"&gt;=&lt;/span&gt;ipv6&lt;span class="w"&gt; &lt;/span&gt;output.filter&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;.network&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="w"&gt;     &lt;/span&gt;input.filter&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;-v6
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;and there it is.&lt;/p&gt;
&lt;h4&gt;4. Check the result&lt;/h4&gt;
&lt;p&gt;Let's now check if Origin Validation gets applied:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/routing/bgp/template&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/ipv6&lt;span class="w"&gt; &lt;/span&gt;route/
&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/ipv6/route&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print&lt;span class="w"&gt; &lt;/span&gt;where&lt;span class="w"&gt; &lt;/span&gt;dst-address&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"2606:4700:7000::/48"&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;admin@r1.btl.ch.as58280.net&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/ipv6/route&amp;gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here we go!  The prefix is not visible anymore and gets filtered out.&lt;/p&gt;
&lt;p&gt;You might have to disable and re-enable the BGP Session for the filter to kick in.&lt;/p&gt;
&lt;p&gt;This is the end.  Besides the issues with IPv6 BGP, it seems that Mikrotik is going towards a nice result with this, so I hope they work quickly on making RouterOS v7 available for production, and hopefully this will increase RPKI adoption around the World, and will make &lt;a href="http://instituut.net/~job/"&gt;Job Snijders&lt;/a&gt; happy... :)&lt;/p&gt;</description><guid>https://as58280.net/it/articles/RPKI-on-Mikrotik/</guid><pubDate>Tue, 17 Nov 2020 14:16:18 GMT</pubDate></item></channel></rss>