海上的宫殿 - bgp
type: channel
link: https://www.soha.moe/tag/bgp/
items: BIRD 与 BGP 的新手开场

BIRD 与 BGP 的新手开场
type: item
date: 2020-06-21T17:53:00+08:00
description: 本文同步发布于 GitHub，如有问题、意见、建议，请移步 GitHub issue。 我本来是一直不想写这个这类文章的，因为我一直认为动态路由（包括但不限于 BGP）这玩意儿基本都是学习了计算机网络基础知识的人玩的。这些人大都有足够的阅读、学习经验与能力，根据 BIRD 的官方文档也都能写出基本正确、可用的配置。而且教程往往会导致更多的新手入坑，我并不是很希望什么都不会的人在没有前置知识储备的基础下来研究这个，所以一直没动笔。 但是在我对入坑的新手的行为观察下来，好像有很多人只是想拥有自己的 ASN 然后实名上网，并不想、或没时间对计算机网络、对 BIRD 的配置文件进行深一度的研究和学习，亦或者是因为语言问题，没有去阅读文档。配置文件只是拿别人放出来的进行拼凑（如某些个人博客，和 Vultr 的样例），知其然而不知其所以然，也造成了很多错误的理解。出于这些原因，我还是动笔写下了这篇文章，希望能为新手留下尽量正确的理解。 话虽如此，我还是希望新手能在学习一部分计算机网络的基础后再来，不然有些部分可能会理解困难。 以及建议学习的话选择开几台虚拟机，或者在 DN42（一个世界性的很大的实验性互联网）上进行试验。只有在不满足于在本地或 DN42 实验的情况下，想要真真正正的自己当 ISP，才申请、租用互联网上的 ASN 和 IP 地址资源。 BIRD 与 BGP 的新手开场 版本：1.0-20220806 本文以 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License 进行授权。 本文中使用的 BIRD 版本为撰写此文时的最新版，BIRD 2.0.7。目前 BIRD 1.x 和 2.x 同时在维护，区别是 1.x 中 IPv4 和 IPv6 协议是分开的（bird 和 bird6），而 2.x 将两部分代码合并在了一起且引入了更多功能。但是 1.x 本身也是落后技术终将被淘汰，所以我推荐使用 BIRD 2.x。两个版本的语法并无差别，无非就是 2.x 在和路由表相关的操作的时候，需要指定特别的协议，如 ipv4; ipv6;。 本文追求的是为有心学习的人提供一个更容易达到的起点。如果只是为了最简单的装逼或者说这篇文章完全看不懂，建议还是别看下去了，可能蔡老师的 RouterOS 版本更适合你。 本文因为是 BIRD 与 BGP 的快速起步，因此不会介绍 BGP 协议，也只会介绍实践部分中用得到的 BIRD 配置，并稍微扩展介绍一些其他 BIRD 的功能，更多的内容则建议在阅读完本文后试着去阅读官方文档，以更深入地理解。 BIRD 官方也提供了一些样例，可以去 BIRD 的 GitLab Wiki 查看。 正文 什么是 BIRD BIRD 的基本语法 杂项 变量与常量 操作符 分支 过滤器和函数 过滤器 filter 函数 function 过滤器写什么呢 路由属性 协议实例 频道 channel 协议 protocol 协议模板 template 杂七杂八的东西 更多配置 控制台 实践中学习 结语 附录 BIRD 全局选路规则 BIRD BGP 协议选路规则 BIRD 的包含（~）操作符 常用的各种配置 公网上约定俗成的最小前缀 Bogon Prefixes and ASNs 与 Vultr 的 BGP session 与 HE TunnelBroker 的 BGP session 1 什么是 BIRD BIRD 是一个实现多种动态路由协议（如 OSPF、BGP、RIP 等）的软件，相似的软件有 FRR（Quagga）、MRT。在 BGP 玩家常用的软件中，BIRD 因其内存占用小、管理方便大受欢迎。 在 BIRD 中，有一个存储了从各个协议收到的路由（包括静态路由）的 RIB（Route Information Base，路由表），经过选路规则的挑选，产生最优的一条路由，这条最优的路由会被写入 FIB（Forward Information Base，转发表）中，导出给系统（如 Linux 内核）中的转发表，这样发到该路由器的流量就能被继续转发了。 注：在高阶玩法中可以使用多个 RIB，在协议中可以指定其使用哪个 RIB，在 BIRD 中也可以指定 RIB 对应的是内核中的哪个 FIB。为了简洁明白，本文只使用 BIRD 的默认 RIB，和内核的默认 FIB。 2 BIRD 的基本语法 和 Juniper、Cisco 等路由器，或 FRR（Quagga）等路由软件不同，写 BIRD 的配置文件就像是在写程序，如果你是个程序员，那么上手应该会很快。正因如此，它也有着和常见编程语言所类似的语法。下面则是一些基础语法。 杂项 用 /* */ 包起来的内容是注释…