更新记录 2020-10-01:添加警告,模拟 Confederation 时不能在内网滤掉内部 ASN 2020-06-07:添加 Bird Confederation 的局限,及模拟 Confederation 方法 2020-05-17:最初版本 ISP 内部 BGP 互联方案比较 互联网中各个 ISP(互联网服务提供商)绝大多数都使用 BGP 协议互相交换自己的路由信息。每个 ISP 都会从所在区域的网络信息中心(NIC,例如 APNIC,RIPE)获得一个 ASN(自治域编号),例如中国电信的 ASN 是 4134。然后 ISP 之间通过物理连接(铜缆,光纤,卫星网络等)连接各自的边界路由器,然后在边界路由器上配置 BGP 协议,告诉对方:「我是 AS4134,我这里可以访问到 202.101.0.0/18 这个 IP 段」。与中国电信相连的 ISP 的路由器会接力把这条消息广播下去:「我是 ASXXXX,我距离 202.101.0.0/18 有一格距离」,以此类推。各个 ISP 的路由器就会根据到目标的距离等参数,把数据包发送到对这个路由器来说最优的目标。 (注:以上内容经过简化,...
Docker 容器共享网络命名空间,集成 Bird 实现 Anycast 高可用
正好一年前,我 在 DN42 网络内用 Docker 建立了 Anycast 服务 。当时我的方法是,自定义容器的镜像,在其中安装一个 Bird,然后加入 OSPF 协议的配置文件来广播 Anycast 路由。但是随着时间推移,这套方案出现了以下问题: 安装 Bird 本身是个较花时间的过程。我的 Bird 不是用 apt-get 装的,因为 我的 Dockerfile 需要支持多种 CPU 架构 ,而 Debian 有些架构的软件源里没有 Bird。而又因为我的构建服务器是 AMD64 架构, 使用 qemu-user-static 支持其它架构的镜像运行 ,为其它架构制作镜像、编译程序时就涉及到大量的指令集翻译,效率非常低。构建一个镜像在不同架构下的版本可能需要 2 小时以上,而安装应用本身的 apt-get 流程只需要几分钟。 自己定制镜像也比较花时间。因为容器中需要同时运行目标应用(例如之前的 PowerDNS)和 Bird,就不能直接把目标应用作为 ENTRYPOINT 了,...