之前有写过NIST BGP SRx的使用,它就是BGPsec的一个软件实现。如果要安装使用,就可以参照我的那篇文章来。它也提供了docker的方式来使用,参照README安装使用就好。它的代码完全开源,托管在GitHub上。
如今分析下其所做的修改吧,反正我们的也需要类似的方式来修改。不过在正式使用之前,首先需要知道BGPsec的流程,其实也就是BGP的流程,是BGP状态机,但是比较麻烦,还是直接看正常的抓包吧。抓包文件可以下载这个bgpsec.pcap,这是wireshark提供的一些sample抓包,如果有别的需要,去对应找就好。
在使用抓包时,用wireshark打开,然后用bgp
作为规则过滤,虽然使用tcp.port==179
也可以,但是会多出来很多没有用的信息,其实也就是多出来了TCP三次握手和四次挥手以及对于收到报文的回复ACK。从抓包中,可以看到所谓的BGPsec,就是BGP的基本流程,两个OPEN,两个KEEPALIVE,两个UPDATE。由于没有出错所以也就没有NOTIFICATION报文。
-
OPEN报文中携带了4个BGPsec相关的Capability,这就是向peer宣告自己支持IPv4/IPv6的收发BGPsec。
-
KEEPALIVE报文中并没有多消息,任然是标准的长度为19字节的BGP-KEEPALIVE报文。
-
UPDATE报文,BGPSec对于BGP-UPDATE报文的修改最大,主要是去掉了AS_PATH路径属性,替换为了BGPsec_PATH属性。BGPsec是不能进行路由聚合的。
但是为了修改这些个字段,BGPsec可是着实费了些功夫,目前实际上虽然BGPsec已经成熟了,甚至2017年InternetSociety还专门写了篇文章来说BGPsec成熟可用了。但是各大厂商直到如今,实现寥寥。
下载NIST-BGP-SRx代码,其实线上查看也挺方便的。我不想下载,所以就在线上查看了。
NIST-BGP-SRx主要分为3部分,一个全局注册的RPKI RTR Server,一个本地的SRx Server,还有就是QuaggaSRx了。代码的主体按照它自己的介绍文档来看吧。
功能缩写 | 代码目录 | 解释说明 |
---|---|---|
SCA | srx-crypto-api | SRx Crypto API (提供了加解密相关的功能,主要是BGPSec使用ECDSA) |
SRxSnP | srx-server | SRx-Server and SRx-Proxy (验证服务器和代理) |
QSRx | quagga-srx | Quagga SRx (Quagga协议套件,也增加了对BGPsec的修改) |
BIO | bgpsec-io | BGPsec traffic generator and crypto module tester. |
EXAMPLES | examples | Examples, test scripts, and test framework generators (TFG) to test BGP-SRx modules. |
NIST的BGPsec实现套件还是基于的quagga-0.99.22版本,所以现在比较老了。但是问题不大,对应着看看就可以,反正后续使用的FRR也是从Quagga修改来的,基本代码还是一样的。其它的模块都是他自己添加维护的,而要做的事情无非就是提供CA证书,分发公钥之类的事情,应该可以复用。后续会主要集中在对于BGP的修改上,也就是Quagga的代码上,而将密钥之类的发送给路由器可能是RTR协议实现。
标签:代码,BGP,BGPsec,SRx,报文,NIST From: https://blog.51cto.com/basilguo/7186345