<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ROA on Sisy's Blog</title><link>https://blog.sisy.cc/tags/roa/</link><description>Recent content in ROA on Sisy's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.sisy.cc/tags/roa/index.xml" rel="self" type="application/rss+xml"/><item><title>从零开始接入 DN42 网络 - 3: Dummy 网卡创建与保持、ROA 配置</title><link>https://blog.sisy.cc/p/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%8E%A5%E5%85%A5-dn42-%E7%BD%91%E7%BB%9C-3-dummy-%E7%BD%91%E5%8D%A1%E5%88%9B%E5%BB%BA%E4%B8%8E%E4%BF%9D%E6%8C%81roa-%E9%85%8D%E7%BD%AE/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><guid>https://blog.sisy.cc/p/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%8E%A5%E5%85%A5-dn42-%E7%BD%91%E7%BB%9C-3-dummy-%E7%BD%91%E5%8D%A1%E5%88%9B%E5%BB%BA%E4%B8%8E%E4%BF%9D%E6%8C%81roa-%E9%85%8D%E7%BD%AE/</guid><description>&lt;img src="https://blog.sisy.cc/p/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E6%8E%A5%E5%85%A5-dn42-%E7%BD%91%E7%BB%9C-3-dummy-%E7%BD%91%E5%8D%A1%E5%88%9B%E5%BB%BA%E4%B8%8E%E4%BF%9D%E6%8C%81roa-%E9%85%8D%E7%BD%AE/img/cover.png" alt="Featured image of post 从零开始接入 DN42 网络 - 3: Dummy 网卡创建与保持、ROA 配置" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;2026-05-01 更新：配置在 dummy 网卡上的 IP 段 v4:&lt;code&gt;/27&lt;/code&gt; 和 v6:&lt;code&gt;/48&lt;/code&gt; 分别改为 &lt;code&gt;/32&lt;/code&gt; 和 &lt;code&gt;/128&lt;/code&gt;
这包括 &lt;code&gt;/etc/netplan/60-dn42-dummy.yaml&lt;/code&gt; 中的配置，以及文中示例命令 &lt;code&gt;ip addr add dev dn42-dummy &amp;lt;路由器IP&amp;gt;/&amp;lt;子网&amp;gt;&lt;/code&gt; 中的 &lt;code&gt;&amp;lt;子网&amp;gt;&lt;/code&gt; 部分。
如果需要配置内网，这里不应该填自己分配到的整个 IP 段，否则会导致后续配置内网 IGP 时出现问题：
例如对于 IPv4，如果给网卡配置 fd24:ac8e:9e04::3/48，内网的两个节点都会通过 direct protocol 产生同一条 /48 的路由，内核会把去往 ::2 的包直接丢给 dummy 接口（本地连接路由），而不是走隧道。
改为 fd24:ac8e:9e04::3/128 后，direct protocol 产生的是主机路由，每个节点通过 Babel/OSPF 等协议，只通告自己的 loopback 地址，对端就能学到一条指向隧道的具体路由。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="前言"&gt;前言
&lt;/h2&gt;&lt;p&gt;在前两篇文章里我们已经完成了 DN42 网络的注册和 Bird2 的基础配置，接下来首先必须创建一个 dummy 网卡来承载 BGP 协议的 IP 地址，之后还要配置 ROA 来让 Bird 能够正确地验证路由的合法性。&lt;/p&gt;
&lt;h2 id="dummy-网卡创建与保持"&gt;Dummy 网卡创建与保持
&lt;/h2&gt;&lt;p&gt;DN42 网络中 BGP 协议的 IP 地址是不会绑定在物理网卡上的，而是绑定在一个 dummy 网卡上，它作为虚拟的网络接口来承载这些 IP 地址，而 Bird 会监听这个接口来进行 BGP 通信。&lt;/p&gt;
&lt;p&gt;创建 dummy 接口：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip link add dn42-dummy &lt;span class="nb"&gt;type&lt;/span&gt; dummy
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip link &lt;span class="nb"&gt;set&lt;/span&gt; dev dn42-dummy up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;为其分配此路由器的 IP 地址（对 ipv4 和 ipv6 都要执行一次）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip addr add dev dn42-dummy &amp;lt;路由器IP&amp;gt;/&amp;lt;子网&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;需要注意这里的 IP 指的是 DN42 网络中选定的 IP 地址，而不是主机的真实公网 IP。&lt;/p&gt;
&lt;p&gt;然而这些命令是临时生效的，重启后会丢失。如果需要维持这个 dummy 网卡的配置在重启后不变，可以把这些命令写入系统的网络配置中，例如我的 Ubuntu 24.04 默认使用 Netplan 管理网络，可以创建一个新的 Netplan 配置文件 &lt;code&gt;/etc/netplan/60-dn42-dummy.yaml&lt;/code&gt; 来定义这个 dummy 网卡：（注意这里提到的两个地址段应当调整）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&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;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dummy-devices&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dn42-dummy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;172.23.15.34&lt;/span&gt;&lt;span class="l"&gt;/27&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;fd24:ac8e:9e04::2/48&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;保存后执行&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod &lt;span class="m"&gt;600&lt;/span&gt; /etc/netplan/60-dn42-dummy.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;netplan apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;来设置安全的权限并应用配置。如果不设置 600 权限，可能会在 apply 时遇到以下 warning：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;** (generate:924409): WARNING **: 03:49:04.343: Permissions for /etc/netplan/60-dn42-dummy.yaml are too open. Netplan configuration should NOT be accessible by others.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="roa-配置"&gt;ROA 配置
&lt;/h2&gt;&lt;p&gt;ROA 表一般是由社区维护的一个公共资源，包含了 DN42 网络中所有合法的路由前缀和它们对应的 ASN 信息。&lt;/p&gt;
&lt;p&gt;可以直接从注册中心生成，也可以用下面这些预构建的 BIRD ROA 表，我用的是 burble 源里列出的最后两个表：&lt;/p&gt;
&lt;p&gt;由 &lt;a class="link" href="https://git.burble.com/burble.dn42/dn42regsrv" target="_blank" rel="noopener"
 &gt;dn42regsrv&lt;/a&gt; 生成的 ROA 文件可从 burble.dn42 获取：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;URL&lt;/th&gt;
 &lt;th&gt;IPv4/IPv6&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_46.json" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_46.json&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;两者皆有&lt;/td&gt;
 &lt;td&gt;用于 RPKI 的 JSON 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_bird1_46.conf" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_bird1_46.conf&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;两者皆有&lt;/td&gt;
 &lt;td&gt;Bird1 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_bird1_4.conf" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_bird1_4.conf&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;仅 IPv4&lt;/td&gt;
 &lt;td&gt;Bird1 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_bird1_6.conf" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_bird1_6.conf&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;仅 IPv6&lt;/td&gt;
 &lt;td&gt;Bird1 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_bird2_46.conf" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_bird2_46.conf&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;两者皆有&lt;/td&gt;
 &lt;td&gt;Bird2 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_bird2_4.conf" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_bird2_4.conf&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;仅 IPv4&lt;/td&gt;
 &lt;td&gt;Bird2 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://dn42.burble.com/roa/dn42_roa_bird2_6.conf" target="_blank" rel="noopener"
 &gt;https://dn42.burble.com/roa/dn42_roa_bird2_6.conf&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;仅 IPv6&lt;/td&gt;
 &lt;td&gt;Bird2 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;由 &lt;a class="link" href="https://github.com/Kioubit/dn42_registry_wizard" target="_blank" rel="noopener"
 &gt;roa_wizard&lt;/a&gt; 生成的 ROA 文件可从 kioubit.dn42 获取：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;URL&lt;/th&gt;
 &lt;th&gt;IPv4/IPv6&lt;/th&gt;
 &lt;th&gt;说明&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://kioubit-roa.dn42.dev/?type=v4" target="_blank" rel="noopener"
 &gt;https://kioubit-roa.dn42.dev/?type=v4&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;仅 IPv4&lt;/td&gt;
 &lt;td&gt;Bird2 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://kioubit-roa.dn42.dev/?type=v6" target="_blank" rel="noopener"
 &gt;https://kioubit-roa.dn42.dev/?type=v6&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;仅 IPv6&lt;/td&gt;
 &lt;td&gt;Bird2 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://kioubit-roa.dn42.dev/?type=json" target="_blank" rel="noopener"
 &gt;https://kioubit-roa.dn42.dev/?type=json&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;两者皆有&lt;/td&gt;
 &lt;td&gt;用于 RPKI 的 JSON 格式&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;为了即时生效，并且能定时更新到最新的 ROA 表，我们分两步走：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;先简单地手动下载最新的 ROA 表到本地，并放到 Bird 的配置目录下，以便直接跑通 Bird 服务。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -4 -O /tmp/roa_dn42.conf https://dn42.burble.com/roa/dn42_roa_bird2_4.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv -f /tmp/roa_dn42.conf /etc/bird/roa_dn42.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget -4 -O /tmp/roa_dn42_v6.conf https://dn42.burble.com/roa/dn42_roa_bird2_6.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv -f /tmp/roa_dn42_v6.conf /etc/bird/roa_dn42_v6.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 cron 或者 systemd timer 定时执行一个脚本来定期更新 ROA 表，这里我还是用 cron。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;0&lt;/span&gt; * * * * wget -4 -O /tmp/roa_dn42.conf https://dn42.burble.com/roa/dn42_roa_bird2_4.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv -f /tmp/roa_dn42.conf /etc/bird/roa_dn42.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; wget -4 -O /tmp/roa_dn42_v6.conf https://dn42.burble.com/roa/dn42_roa_bird2_6.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv -f /tmp/roa_dn42_v6.conf /etc/bird/roa_dn42_v6.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; birdc c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个 cron job 每小时执行一次，下载最新的 ROA 表并替换掉旧的文件，最后执行 &lt;code&gt;birdc c&lt;/code&gt; 来让 Bird 重新加载配置，使新的 ROA 表生效。&lt;/p&gt;
&lt;p&gt;现在 ROA 配置好了，Bird 就能够正确地运行了，下一步就可以直接开始添加 Peer 了。运行一下 &lt;code&gt;birdc c&lt;/code&gt; 来跑通 Bird 服务，输出应该类似于：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plaintext" data-lang="plaintext"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BIRD 2.18.1 ready.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reading configuration from /etc/bird/bird.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reconfigured
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>