BGP优化记录

Posted on Feb 15, 2026

注:为了隐私保护,文中的ip段、asn以及配置文件里的 `my_v6` 等关键信息均已做脱敏处理或替换。

大概一周前在BGP.Exchange群里看到MoeDove在推广 大概意思是有asn就能找他们申请个免费的香港vm来练习BGP。现在那条消息貌似已经被删了,但当时我抱着"反正免费,试试又不亏"的心态提了申请

没几天收到回复,过了。

然后配好环境联系了对方,对方说我有报错其实只是忘记ip addr add了,别问,问就是忘了

处理完之后大概又等了两天,去bgp.tools上一查,路由可见了,这事就算告一段落


然后今天无聊ssh进去瞎逛,顺手跑了一下:

birdc show route for <my_v6> all

不对劲。输出里全是[direct1],没有BGP字样

这段IP确实是我的没错,但感觉就像是网卡在自嗨,完全没有那种「我正在跟全球互联网交换路由」的仪式感。去bgp.tools看了一眼,路由可见度88%,看起来没问题,但总感觉哪里不对

翻开bird.conf看了一眼,问题找到了:之前写Filter太随意,只要网段对了就accept,结果bird随手抓了个eth0的地址就往外发

问题在哪?protocol direct会把所有网卡上的直连路由都塞进来,我没有限制来源,bird就觉得"这个IP在网卡上,那就是你的呗",然后愉快地宣告出去了

小白解释:BGP就是路由器之间互相说"我这里能到哪些ip"的协议,宣告错了相当于告诉全球"那个地址在我这",但实际上你并不一定负责任地接着


行,那改吧:

  1. 先备份原来的conf——留个遗照,警告未来的自己不要重蹈覆辙
  2. protocol direct砍掉,不让它随便碰我的v6
  3. 手动建一个protocol static,起名my_v6,把要宣告的前缀硬写进去
  4. BGP导出过滤器里指定:只准my_v6出来的路由往外走

改完 birdc configure 重载配置,再查一次:

root@localhost:~# birdc show route for my_v6
BIRD 2.17.1 ready.
Table master6:
my_v6  unreachable [my_v6 01:42:53.911] * (200)

大功告成

unreachable 看起来有问题,但这里的意思只是bird说"我知道这条路由,但本机没有实际的下一跳"

换句话说,bird在管它,不靠网卡。这反而是对的,宣告不依赖网卡接口状态,就算我把eth0上的ip删了再加,只要bird进程还在,这条路由就一直挂在全球路由表里