BGP从入门到跑路

好几年前, 当时刚玩vps, 就在想, 加一个ip就要十多二十软妹币, 好贵啊, 能不能直接自己买ip自己用呢? 后来看到论坛有人买/24的ipv4, 一年只要4000, 好便宜啊(虽然我还是买不起)

后来了解到自己买ip自己用, 要有自己的asn, 要有服务器用来宣告, 要有人家愿意让你BGP Session, 感觉好麻烦啊 特别是看到RIPE LIR会费的时候 , 再后来才知道可以找大佬注册小ASN, 又省钱, 又省力. 博主就趁着黑五, 找一个很不错的老外商家(cloudie.sh), 注册了一个ASN还拿到了/40的Ipv6 block, 非常爽.

总结一下, 注册ASN这件事, 主要是耗时耗钱, 但是准备好money以后还是比较简单的, 接下来介绍如何宣告自己拿到的ipv6 然后在bgp.he.net上反复观摩自己, 成为一个真正的BGP萌新 天天漏路油那种

事先准备

  1. 一个能进行BGP Session的服务器
  2. 一个ASN
  3. 一段ipv6 or ipv4
  4. LOA文件
  5. IP 所属的网络协调中心创建一个你要广播的inet6num对象

去RIPE 操作一手

当然ripe才上ripe啊, apnic一边玩去

比如我有一个/40的ipv6, 我现在要分/44出来广播, 那么我就去 resource -> ipv6 -> create assignment

RIPE配置

制作LOA文件

感谢v.ps的客服提供的经验, 我推荐使用 https://loa.as1003.net 这个网站制作自己的LOA证书(ip 广播授权书), 你想想, 你得想申明这段ip是你的, 然后给商家一份免责说明不是?

LOA长什么样

以上内容完成以后, 就去找你的服务器提供商, 开个ticket, 让它们帮你配置好BGP宣告吧!

礼貌很重要喔(*^▽^*)

在服务器上安装bird并配置BGP

博主服务器系统版本为ubuntu20的bird版本为1 (BIRD version 1.6.8), 比较老, 推荐安装bird2而不是bird.

但此教程使用bird1来做宣告, 也算是另外一个角度来看东西吧, 其实bird1和bird2语法差别很小, 而且v4和v6可以在一个config里面配, 所以大力推荐使用bird2 , 至于博主为什么不换bird2 因为配好了才发现有bird2的懒狗罢了

apt install bird # 安装 bird1
apt install bird2 # 安装 bird2

修改 /etc/bird/bird6.conf 这个配置文件, 如果你的服务商是vultr, 建议参考文章附录里的几个博主, 它们使用vultr来进行BGP宣告, 与这份配置文件有所不同. 博主使用的服务商是 V.PS

# This is a minimal configuration file, which allows the bird daemon to start
# but will not cause anything else to happen.
#
# Please refer to the documentation in the bird-doc package or BIRD User's
# Guide on http://bird.network.cz/ for more information on configuring BIRD and
# adding routing protocols.

# Change this into your BIRD router ID. It's a world-wide unique identification
# of your router, usually one of router's IPv6 addresses.
router id 你的vps自带的ipv4;

# The Kernel protocol is not a real routing protocol. Instead of communicating
# with other routers in the network, it performs synchronization of BIRD's
# routing tables with the OS kernel.
protocol kernel {
        scan time 20;
        import none;
#       export all;   # Actually insert routes into the kernel routing table
}

# The Device protocol is not a real routing protocol. It doesn't generate any
# routes and it only serves as a module for getting information about network
# interfaces from the kernel.


protocol static
{
    route  你要宣告的地址段,比如1145:1140:0000::/44 via 你的vps自带的ipv6;
}
 
protocol device {
        scan time 20;
}


protocol bgp xTomBGP
{
    local as 你的ASN号;
    source address 你的vps自带的ipv6;
    import none;
    export all;
    graceful restart on;
    multihop; # 这个有坑, vultr是 multihop 2, 但是v.ps是直连的所以不能设置为2
    neighbor 服务商给的那个peer用的ipv6 as 服务商给你peer的ASN;
    password "Your BGP Password";
}

修改好你的bird6配置文件, 然后重启 bird6, 注意, 因为bird 1 里面 IPV4IPV6 宣告是分开来的, 在这篇教程当中我们只宣告ipv6, 所以命令应该是:

systemctl restart bird6
# 然后你可以查看你的bird6运行情况
systemctl status bird6
# 如果你要每次开机时, bird6自动启动, 你可以输入以下命令:
systemctl enable bird6

如果你的配置是成功的, 那么输入:

# 在bird1中, ipv4 和 ipv6是分开来的, 这个是查看ipv4连接的
birdc s p
# 这个是ipv6连接的
birdc6 s p

如果显示 Established 那就是宣告成功了!! (〃'▽'〃), 如果是 Active, 或者 Connect, 都是还没宣告成功正在连接哦!

查看BGP宣告结果

既然已经宣告了, 等待全球路由刷新, 如果 bgp.he.net 上能看到你的asn已经宣告了ipv6, 那就是OK了, 如果想要快的话, 可以看看 bgp.tools

接下来是最爽的使用自己ip上网环节, 我们将设置自己的网卡在走ipv6的时候, 走自己的ipv6!

这里假设你的网卡是eth0, 并且你已经宣告的ipv6块是 1145:1140:aabb::/44

# 这一行将 1145:1140:aabb:6666:6666:6666:6666:6666 这个ip加到eth0网卡上, 这个操作是暂时的, 你重启服务器就会消失, 至于怎么永久配置, 麻烦自己百度一下咯
sudo ip -6 addr add 1145:1140:aabb:6666:6666:6666:6666:6666 dev eth0

# 这一行表达 1145:1140:aabb:6666:6666:6666:6666:6666 这个ipv6, 在eth0上, 要走 服务器商提供给你的网关, 像v.ps, 给你宣告ip用的网关和服务器本身ipv6的网关是不一样的, 所以我们就得这么操作
sudo ip -6 route change default via 服务器商提供给你的网关 dev eth0 proto ra metric 1024 pref medium src 1145:1140:aabb:6666:6666:6666:6666:6666

# 如果你宣告的ip, 走的网关就是你服务器的默认网关, 你可以通过命令
ip -6 r # 来查看你的默认网关, 或者
ip addr # 里面自己找

# 测试上网环节
curl -6 ip.sb
如果出来的结果就是你刚刚配置的1145:1140:aabb:6666:6666:6666:6666:6666, 说明你实名上网成功了!!
✿✿ヽ(°▽°)ノ✿

未完待续, 接下来是选修节目, 加入 LocIX 交换.

感谢 V.PS 买德意志服务器送LocIX接入的福利 什么时候送DE-CIX DUS Port免月费

在加入LocIX之前, 我们先要完善一下你在 Peering DB 上的条目, 这样大家在看到你的时候, 可以通过peeringDB上的条目更了解你的ASN, 然后决定要不要找你peer.

这里帮大家猜一个坑, 在peeringDB注册好, 要关联组织的时候, 只要把自己ASN填进去就好, peeringDB的工作人员审核以后会帮你把关联信息填入的! 非常方便!

然后你会拥有一个漂亮的peer主页, 脑补一下 ->_-> 以后可以写进简历里
PeeringDB

第二步

到 LocIX 的面板里, 找一下LocIX分配给你的ip, 大家可以这么理解IX, 你要跟别人交朋友, 那就要去朋友多的地方交朋友效率比较高, IX 分配给你的IP, 相当于你的独家名片, 还记得在conf里面填写的 neighbor 服务商给的那个peer用的ipv6 这个时候, 你就可以用IX分配给你的名片来通过IX和大家交朋友啦!

LocIX

接下来我们要交的第一个盆友是 LocIX的 Route Servers, 你得先跟IX的工作人员交盆友, 才能靠IX交更多朋友不是?

在Documentation中找到Route Server, 或者访问这个链接

https://manager.dus.locix.network/public-content/routeserver

可以看到这些服务器地址, 把他们全peer了

Route Servers

通过V.PS接入LocIX的话, 工作人员会先给你配置第二个网卡, 这个网卡可以直接连接LocIX, 所以得先给第二个网卡加上 LocIX分配给你的IP like this:

eth1

然后配置bird的conf来实现peer, 在bird6.conf里:

请注意这个LocIX_in过滤器是非常粗糙的, 只接受LocIX的表, 更多的目标得你自己去实现!

filter LocIX_in {
    if bgp_path.first ~ [202409] then accept; # 只收LocIX的表
    reject;
}

protocol bgp LocIXBGP1 {
    local as 你的ASN;
    source address LocIX分给你的ipv6;
    export none;
    import filter LocIX_in;
    graceful restart on;
    neighbor 2a0c:b641:701::a5:20:2409:1 as 202409;
}

protocol bgp LocIXBGP2 {
    local as 你的ASN;
    source address LocIX分给你的ipv6;
    import filter LocIX_in;
    export none;
    graceful restart on;
    neighbor 2a0c:b641:701::a5:20:2409:2 as 202409;
}

依样画葫芦, bird.conf里:

filter LocIX_in_v4 {
    if bgp_path.first ~ [202409] then accept;
    reject;
}

protocol bgp LocIXBGP1v4 {
    local as 你的ASN;
    source address LocIX分给你的ipv4;
    import filter LocIX_in_v4;
    export none;
    neighbor 185.1.155.254 as 202409;
}

protocol bgp LocIXBGP2v4 {
    local as 你的ASN;
    source address LocIX分给你的ipv4;
    import filter LocIX_in_v4;
    export none; 
    neighbor 185.1.155.253 as 202409;
}

然后重启bird服务

systemctl restart bird6
systemctl restart bird

最后查看广播情况

birdc6 s p
birdc s p

bird

bird6

恭喜你已经成功接入LocIX了!

请开始你辉煌的漏油BGP生涯吧!

欢迎大佬们peer我哦 虽然我还没正经peer过谁 o(╥﹏╥)o
开始反复访问bgp.he.net吧!

bird6

文章参考了以下博主
nico, vultr上宣告ipv6
Bird新手教程
Misaka上bird6宣告 有钱我也要买misaka
在 Linux 下通过 BIRD 广播自己的 IPv6

最后修改:2023 年 12 月 10 日
如果觉得我的文章对你有用,请随意赞赏