FRR编译

环境:centos 7.6.1810

版本:FRR 7.3

编译

下载FRR源代码包

wget https://github.com/FRRouting/frr/archive/frr-7.3.tar.gz

使用yum下载依赖包

yum install git autoconf automake libtool make \readline-devel texinfo net-snmp-devel groff pkgconfig \json-c-devel pam-devel bison flex pytest c-ares-devel \python-devel systemd-devel python-sphinx libcap-devel

安装libyang,版本要求 >= 0.16.105,这里有各个系统的安装包,根据环境下载对应的libyang和libyang-devel。

#下载libyang
wget https://ci1.netdef.org/artifact/LIBYANG-YANGRELEASE/shared/build-10/CentOS-7-x86_64-Packages/libyang-0.16.111-0.x86_64.rpm
#下载libyang-devel
wget https://ci1.netdef.org/artifact/LIBYANG-YANGRELEASE/shared/build-10/CentOS-7-x86_64-Packages/libyang-devel-0.16.111-0.x86_64.rpm#安装
rpm -ihv libyang-0.16.111-0.x86_64.rpm
rpm -ihv libyang-devel-0.16.111-0.x86_64.rpm

编译FRR源码

tar -zxvf frr-7.3.tar.gz
cd frr-frr-7.3/
sh bootstrap.sh#安装目录改为/usr/local/frr
#使用root用户运行
./configure --prefix=/usr/local/frr -exec-prefix=/usr/local/frr --enable-watchfrr --enable-user=root --enable-group=root --enable-static --enable-static-bin --enable-systemd

这里的–enable-systemd很关键,使用systemctl启动时,frr.service使用了WatchdogSec,这个配置项如果没有在规定时间内调用sd_notify(3) ,就会重启FRR服务,而–enable-systemd就是用于定时调用sd_notify(3),避免FRR服务一直被重启。

配置完成

编译安装

make;make install
#创建日志目录
mkdir /usr/local/frr/var/log/ -p

安装Service和daemon配置文件

install -p -m 644 tools/frr.service /usr/lib/systemd/system/frr.service
#frr.service使用/usr/lib/frr/frrinit.sh脚本,我们需要改为/usr/local/frr/sbin目录下
sed "s#/usr/lib/frr#/usr/local/frr/sbin#g" -i /usr/lib/systemd/system/frr.serviceinstall -p -m 644 tools/etc/frr/daemons /usr/local/frr/etc/daemons

使能ip转发

[root frr-frr-7.3]# cat /etc/sysctl.d/90-routing-sysctl.conf
# Sysctl for routing
#
# Routing: We need to forward packets
net.ipv4.conf.all.forwarding=1
net.ipv6.conf.all.forwarding=1
[root frr-frr-7.3]# sysctl -p /etc/sysctl.d/90-routing-sysctl.conf

至此FRR的安装已经完成,安装程序和配置在目录/usr/local/frr。

[root frr-frr-7.3]# ls /usr/local/frr
bin  etc  include  lib  sbin  share
#sbin:FRR程序目录
#etc:配置文件目录
#bin:vtysh所在

配置

下面开始配置运行BGP

运行BGP需要启动两个程序bgpd和zebra,bgpd是bgp协议的主要程序;zebra是FRR为BGP、OSPF、RIP等协议与内核交互的统一抽象层。作为一个IP路由管理工具,它支持路由表查询修改、支持网络接口查询、支持路由在不同协议之间的重发布。

拓扑结构

AS100的路由器IP是192.168.122.6,在ns1创建子网10.10.1.2/24,该路由器与AS号200的路由器建立EBGP对等体关系,AS200的IP是192.168.122.7,在ns1创建子网11.10.1.2/24。两个AS分别向对方通告ns1的子网网段。

AS100配置

子网网络设置

#添加网络,如果没有的话
ip link add br1 type bridge
ip link set br1 up
#添加子网ns1,ip 10.10.1.2
ip netns add ns1
ip link add veth_ns1 type veth peer name eth0 netns ns1
ip netns exec ns1 ip link set eth0 up
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip addr add 10.10.1.2/24 dev eth0
ip netns exec ns1 ip route add default via 10.10.1.254 dev eth0
ip link set veth_ns1 up
ip link set veth_ns1 master br1
ip addr add 10.10.1.254/24 dev br1
#打开端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward

BGP配置

BGP缺省配置项位于/usr/local/frr/etc/bgpd.conf

[root frr-frr-7.3]# cat /usr/local/frr/etc/bgpd.conf
hostname bgpd
#shell连接bgpd使用的密码
password zebra
#注册AS100
router bgp 100#绑定ipbgp router-id 192.168.122.6#通告路由network 10.10.1.0/24#对等体AS号和IPneighbor 192.168.122.7 remote-as 200#声明为EBGP多跳,由于EBGP默认TTL为1,为避免对等体之间不是直连而导致丢包neighbor 192.168.122.7 ebgp-multihopaddress-family ipv4 unicastexit-address-family
#debug相关
debug bgp neighbor-events
debug bgp updates
debug bgp keepalives
debug bgp zebra
#日志文件
log file /usr/local/frr/var/log/bgpd.log

zebra配置文件

[root frr-frr-7.3]# cat /usr/local/frr/etc/zebra.conf
hostname zebra
#shell连接zebra使用的密码
password zebra
enable password zebra
#debug相关
debug zebra kernel
debug zebra event
debug zebra rib
log file /usr/local/frr/var/log/zebra.log

AS200配置

子网网络设置

#添加网络,如果没有的话
ip link add br1 type bridge
ip link set br1 up
#添加子网ns1,ip 11.10.1.2
ip netns add ns1
ip link add veth_ns1 type veth peer name eth0 netns ns1
ip netns exec ns1 ip link set eth0 up
ip netns exec ns1 ip link set lo up
ip netns exec ns1 ip addr add 11.10.1.2/24 dev eth0
ip netns exec ns1 ip route add default via 11.10.1.254 dev eth0
ip link set veth_ns1 up
ip link set veth_ns1 master br1
ip addr add 11.10.1.254/24 dev br1
#打开端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward

BGP配置

[root frr-frr-7.3]# cat /usr/local/frr/etc/bgpd.conf
hostname bgpd
password zebra
router bgp 200bgp router-id 192.168.122.7neighbor 192.168.122.6 remote-as 100neighbor 192.168.122.6 ebgp-multihopnetwork 11.10.1.0/24address-family ipv4 unicastexit-address-family
debug bgp neighbor-events
debug bgp updates
debug bgp keepalives
debug bgp zebra
log file /usr/local/frr/var/log/bgpd.log

zebra配置文件

[root frr-frr-7.3]# cat /usr/local/frr/etc/zebra.conf
hostname zebra
password zebra
enable password zebra
debug zebra kernel
debug zebra event
debug zebra rib
log file /usr/local/frr/var/log/zebra.log

运行

frr启动方式有两种,一种是手动启动

/usr/local/frr/sbin/zebra -A 127.0.0.1 -d
/usr/local/frr/sbin/bgpd -A 127.0.0.1 -d

另一种是使用系统Service,系统Service启动方式会读取配置文件/usr/local/frr/etc/daemons,来决定启动哪些进程和进程的启动参数,因此我们要找到bgpd=no,改为bgpd=yes

[root frr-frr-7.3]# cat /usr/local/frr/etc/daemons  |grep bgpd
#启动进程bgpd
bgpd=yes
#bgpd进程启动参数
bgpd_options="   -A 127.0.0.1"

启动FRR

#AS100和AS200分别启动
[root frr-frr-7.3]# systemctl start frr

看到进程bgpd和zebra都启动成功

[root frr-frr-7.3]# ps -ef |grep -e "zebra" -e "bgpd"
root     30830     1  0 17:36 ?        00:00:00 /usr/local/frr/sbin/watchfrr -d -F traditional zebra bgpd staticd
root     30847     1  0 17:36 ?        00:00:00 /usr/local/frr/sbin/zebra -d -F traditional -A 127.0.0.1 -s 90000000
root     30851     1  0 17:36 ?        00:00:00 /usr/local/frr/sbin/bgpd -d -F traditional -A 127.0.0.1

打开vtysh(也可以打开telnet连接bgpd的127.0.0.1:2605),查看BGP邻居和BGP路由情况,命令分别是show bgp neighbors 192.168.122.6和show ip bgp

[root frr-frr-7.3]# /usr/local/frr/bin/vtysh
Hello, this is FRRouting (version 7.3).
Copyright 1996-2005 Kunihiro Ishiguro, et al.AS200# show bgp neighbors 192.168.122.6
BGP neighbor is 192.168.122.6, remote AS 100, local AS 200, external link
Hostname: bgpdBGP version 4, remote router ID 192.168.122.6, local router ID 192.168.122.7BGP state = Established, up for 00:00:05Last read 00:00:04, Last write 00:00:04
......AS200# show ip bgp
BGP table version is 3, local router ID is 192.168.122.7, vrf id 0
Default local pref 100, local AS 200
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incompleteNetwork          Next Hop            Metric LocPrf Weight Path
*> 10.10.1.0/24     192.168.122.6            0             0 100 iDisplayed  1 routes and 1 total paths

可以看到,与AS100的status状态是Established,说明已经建立了邻居关系,也收到了AS100通告的路由网络10.10.1.0/24。route -n可以看到10.10.1.0/24的路由已经被设置到系统路由。

[root frr-frr-7.3]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.122.1   0.0.0.0         UG    100    0        0 ens3
10.10.1.0       192.168.122.6   255.255.255.0   UG    20     0        0 ens3
11.10.1.0       0.0.0.0         255.255.255.0   U     0      0        0 br1
192.168.122.0   0.0.0.0         255.255.255.0   U     100    0        0 ens3

从AS200的ns1 ping AS100的子网10.10.1.2/24,可以ping通。反之AS100的ns1到AS200的子网11.10.1.2/24也要能够ping通,这样两个不同AS的子网就相互连通了。

[root frr-frr-7.3]# ip netns exec ns1 ping 10.10.1.2
PING 10.10.1.2 (10.10.1.2) 56(84) bytes of data.
64 bytes from 10.10.1.2: icmp_seq=1 ttl=63 time=0.583 ms
64 bytes from 10.10.1.2: icmp_seq=2 ttl=63 time=0.598 ms
64 bytes from 10.10.1.2: icmp_seq=3 ttl=63 time=0.499 ms

基于FRR全面解析BGP协议(七):FRR编译相关推荐

  1. 基于FRR全面解析BGP协议(五):FRR的BGP路由策略

    FRR的BGP路由策略 过滤器 FRR提供了基于IP,基于Community和基于AS-PATH的三种类型过滤器来匹配路由. IP Access List 基于IP的路由ACL规则,比较少使用,通常是 ...

  2. 基于FRR全面解析BGP协议(八):FRR配置实例

    FRR配置实例 环境:centos 7.6.1810 版本:FRR 7.3 服务器: 1台 Namespace配置实例 FRR的vrf功能支持同一个进程在不同ns内创建bgp对等体.首先需要配置zeb ...

  3. 【FRR 】【BGP协议分析】 1 - BGP 初始化

    FRR支持BGP-4,BGP-4+协议,BGP协议本身的知识点,可以参考很多资料,TCP/IP路由技术是一本不错的书,建议多看几次,还有红茶哥的博客和视频 http://blog.sina.com.c ...

  4. BGP协议解析(白话版)

    之前一直没搞明白BGP有啥用,加了跟没加没啥区别,专门查资料写了这篇<BGP协议解析>. 下面使用eNSP模拟器演示! IBGP与EBGP的区别 BGP分为两种:IBGP与EBGP. 两个 ...

  5. FRR搭建简单BGP网络环境

    实验参考文章https://segmentfault.com/a/1190000019892263,并进一步解释完善. 一.BGP查询CLI命令 对frr的配置文件/etc/frr/daemon进一步 ...

  6. 【网络通信与信息安全】之深入解析HTTP协议的实现和原理

    一.计算机网络体系结构分层 计算机网络体系结构分层示例图 计算机网络体系结构说明: 二.TCP/IP 通信传输流 ① TCP/IP 分层管理 TCP/IP 构成 应用层:决定了向用户提供应用服务时通信 ...

  7. java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...

    一.基础知识准备 在正式给大家介绍自定义协议之前,我们先对网络传输和协议解析的相关知识点做一个基本的介绍,尽管这些知识点我们在学校里学过,但难免会有所遗忘,这里先做一个简单的介绍,以便对后文的内容理解 ...

  8. 基于Linux系统的边界网关协议的设计与实现

    基于Linux系统的边界网关协议的设计与实现 3.6 BGP和RMer系统间通信 RMer系统和BGP系统之间采用的是UNIX本地的服务器客户端模式进行通信,它们创建的socket的地址格式为AF_U ...

  9. 华为 BGP协议基础配置与总结

    良药苦口利于病,忠言逆耳利于行. 文章目录 一.BGP概述 二.拓扑 三.基础配置 四.BGP与IGP比较 五.BGP的数据包 六.BGP的邻居状态机 七.BGP计时器 八.BGP的更新源 九.BGP ...

最新文章

  1. Java8 中有趣酷炫的小技巧,你用到了那些?
  2. chrome 获取硬件信息_在tinycolinux上安装chrome
  3. 专辑一:爱之初体验(初级)
  4. 这样读源码,不牛X也难
  5. iframe显示错误页面
  6. openmp并行编程_OpenMP实现生产者消费者问题
  7. 宿舍管理系统项目管理师_2020下半年信息系统项目管理师真题——案例分析(带解析)...
  8. 现在这个时代变了,区块链,数字货币才是最火的项目
  9. C#面向对象10 继承
  10. 中英文混合字符串长度的获取
  11. 如何对数据目标进行分析
  12. BP神经网络参数设置及实例
  13. 数据三等分离散python_plotnine:Python版的ggplot2包
  14. 《Effective Python 2nd》 读书笔记——培养Pythonic思维
  15. python xlsxwriter生成图片保存_Python Excel操作模块XlsxWriter之插入图片worksheet.insert_image()...
  16. 从循环条件的代码里,我能在面试中甄别程序员是否是高级
  17. 类里面的成员函数指针使用
  18. 图灵奖得主长文报告:是什么开启了计算机架构的新黄金十年?
  19. 视频教程-【CVPR2018】3D Pose Estimation and 3D Model Retriev-强化学习
  20. package.json文件解读

热门文章

  1. idea 连接远程docker
  2. Git 的 Cherry-Pick
  3. ADS仿真微带贴片天线
  4. php中表单输出成绩,js内置对象处理_打印学生成绩单的简单实现
  5. 用c语言怎么求最大公约数,c语言求最大公约数
  6. 云合影程序_“燕大云合影”小程序来啦!快来一键制作【百年校庆专属祝福合影】吧...
  7. 利用oc门或od门实现线与_OC门OD门
  8. 湖南大学夏训练三12.多项式加法
  9. mysql的实训报告论文_数据库实验报告范文
  10. Ubuntu部署web项目