在本教程中,咱们会向你演示如何建立IPv6 BGP对等体并经过BGP通告IPv6前缀。同时咱们也将演示如何使用前缀列表和路由映射特性来过滤通告的或者获取到的IPv6前缀。linux
拓扑shell
服务供应商A和B但愿在他们之间创建一个IPv6的BGP对等体。他们的IPv6地址和AS信息以下所示。网络
对等体IP块: 2001:DB8:3::/64运维
供应商A: AS 100, 2001:DB8:1::/48spa
供应商B: AS 200, 2001:DB8:2::/48.net
CentOS/RHEL安装Quagga命令行
若是Quagga尚未安装,咱们能够先使用yum安装。调试
# yum install quagga 日志
在CentOS/RHEL 7,SELinux策略会默认的阻止对于/usr/sbin/zebra配置目录的写操做,这会对咱们将要介绍的安装操做有所影响。所以咱们须要像下面这样关闭这个策略。若是你使用的是CentOS/RHEL 6能够跳过这一步。router
# setsebool -P zebra_write_config 1
建立配置文件
在安装事后,咱们先建立配置文件zebra/bgpd做为配置流程的开始。
# cp /usr/share/doc/quagga-XXXXX/zebra.conf.sample /etc/quagga/zebra.conf
# cp /usr/share/doc/quagga-XXXXX/bgpd.conf.sample /etc/quagga/bgpd.conf
而后,容许这些服务开机自启。
在 CentOS/RHEL 6:
# service zebra start; service bgpd start
# chkconfig zebra on; chkconfig bgpd on
在 CentOS/RHEL 7:
# systemctl start zebra; systemctl start bgpd
# systemctl enable zebra; systmectl enable bgpd
Quagga内部提供一个叫做vtysh的shell,其界面与那些主流路由厂商Cisco或Juniper十分类似。启动vtysh shell命令行:
# vtysh
提示符将改成:
router-a#
或
router-b#
在教程的其他部分,这个提示能够代表你正身处在哪一个路由的vtysh shell中。
为Zebra指定日志文件
来为Zebra配置日志文件,这会有助于调试。
首先,进入全局配置模式经过输入:
router-a# configure terminal
提示符将变动成:
router-a(config)#
指定日志文件的位置。而后退出配置模式:
router-a(config)# log file /var/log/quagga/quagga.log
router-a(config)# exit
保存配置经过:
router-a# write
配置接口IP地址
如今,让咱们为Quagga的物理接口配置IP地址。
首先,查看一下vtysh中现有的接口。
router-a# show interfaces
Interface eth0 is up, line protocol detection is disabled
## OUTPUT TRUNCATED ###
Interface eth1 is up, line protocol detection is disabled
## OUTPUT TRUNCATED ##
如今咱们配置IPv6地址。
router-a# conf terminal
router-a(config)# interface eth0
router-a(config-if)# ipv6 address 2001:db8:3::1/64
router-a(config-if)# interface eth1
router-a(config-if)# ipv6 address 2001:db8:1::1/64
在路由B上采用一样的方式分配IPv6地址。我将配置汇总成以下。
router-b# show running-config
interface eth0
ipv6 address 2001:db8:3::2/64
interface eth1
ipv6 address 2001:db8:2::1/64
因为两台路由的eth0端口同属一个子网,即2001:DB8:3::/64,你应该能够相互ping通。在保证ping通的状况下,咱们开始下面的内容。
router-a# ping ipv6 2001:db8:3::2
PING 2001:db8:3::2(2001:db8:3::2) 56 data bytes
64 bytes from 2001:db8:3::2: icmp_seq=1 ttl=64 time=3.20 ms
64 bytes from 2001:db8:3::2: icmp_seq=2 ttl=64 time=1.05 ms
步骤 1: IPv6 BGP 对等体
本段,咱们将在两个路由之间配置IPv6 BGP。首先,咱们在路由A上指定BGP邻居。
router-a# conf t
router-a(config)# router bgp 100
router-a(config-router)# no auto-summary
router-a(config-router)# no synchronization
router-a(config-router)# neighbor 2001:DB8:3::2 remote-as 200
而后,咱们定义IPv6的地址族。在地址族中,咱们须要定义要通告的网段,并激活邻居。
router-a(config-router)# address-family ipv6
router-a(config-router-af)# network 2001:DB8:1::/48
router-a(config-router-af)# neighbor 2001:DB8:3::2 activate
咱们在路由B上也实施相同的配置。这里提供我归总后的配置。
router-b# conf t
router-b(config)# router bgp 200
router-b(config-router)# no auto-summary
router-b(config-router)# no synchronization
router-b(config-router)# neighbor 2001:DB8:3::1 remote-as 100
router-b(config-router)# address-family ipv6
router-b(config-router-af)# network 2001:DB8:2::/48
router-b(config-router-af)# neighbor 2001:DB8:3::1 activate
若是一切顺利,在路由间将会造成一个IPv6 BGP会话。若是失败了,请确保在防火墙中开启了必要的端口(TCP 179)。
咱们使用如下命令来确认IPv6 BGP会话的信息。
查看BGP汇总:
router-a# show bgp ipv6 unicast summary
查看BGP通告的路由:
router-a# show bgp ipv6 neighbors <neighbor-IPv6-address> advertised-routes
查看BGP得到的路由:
router-a# show bgp ipv6 neighbors <neighbor-IPv6-address> routes
步骤 2: 过滤IPv6前缀
正如咱们在上面看到的输出信息那样,路由间通告了他们完整的/48 IPv6前缀。出于演示的目的,咱们会考虑如下要求。
Router-B将通告一个/64前缀,一个/56前缀,和一个完整的/48前缀.
Router-A将接受任由B提供的何形式的IPv6前缀,其中包含有/56和/64之间的网络掩码长度。
咱们将根据须要过滤的前缀,来使用路由器的前缀列表和路由映射。
为路由B修改通告的前缀
目前,路由B只通告一个/48前缀。咱们修改路由B的BGP配置使它能够通告额外的/56和/64前缀。
router-b# conf t
router-b(config)# router bgp 200
router-b(config-router)# address-family ipv6
router-b(config-router-af)# network 2001:DB8:2::/56
router-b(config-router-af)# network 2001:DB8:2::/64
咱们在路由A上收到了全部的前缀,那么咱们能够更进一步建立前缀列表和路由映射来过滤这些前缀。
建立前缀列表
就像在上则教程中描述的那样,前缀列表是一种机制用来匹配带有子网长度的IP地址前缀。按照咱们指定的需求,咱们须要在路由A的前缀列表中建立一则必要的条目。
router-a# conf t
router-a(config)# ipv6 prefix-list FILTER-IPV6-PRFX permit 2001:DB8:2::/56 le 64
以上的命令会建立一个名为'FILTER-IPV6-PRFX'的前缀列表,用以匹配任何2001:DB8:2::池内掩码在56和64之间的全部前缀。
建立并应用路由映射
如今已经在前缀列表中建立了条目,咱们也应该相应的建立一条使用此条目的路由映射规则了。
router-a# conf t
router-a(config)# route-map FILTER-IPV6-RMAP permit 10
router-a(config-route-map)# match ipv6 address prefix-list FILTER-IPV6-PRFX
以上的命令会建立一条名为'FILTER-IPV6-RMAP'的路由映射规则。这则规则将会容许与以前在前缀列表中建立'FILTER-IPV6-PRFX'所匹配的IPv6
要记住路由映射规则只有在应用在邻居或者端口的指定方向时才有效。咱们将把路由映射应用到BGP的邻居配置中。咱们将路由映射应用于入方向,做为进入路由端的前缀过滤器。
router-a# conf t
router-a(config)# router bgp 100
router-a(config-router)# address-family ipv6
router-a(config-router-af)# neighbor 2001:DB8:3::2 route-map FILTER-IPV6-RMAP in
如今咱们在路由A上再查看一边得到到的路由,咱们应该只能看见两个被容许的前缀了。
注意: 你可能须要重置BGP会话来刷新路由表。
全部IPv6的BGP会话可使用如下的命令重启:
router-a# clear bgp ipv6 *
总结
总结一下,这篇教程重点在于如何建立BGP对等体和IPv6的过滤。咱们演示了如何向邻居BGP路由通告IPv6前缀,和如何过滤通告前缀或得到的通告。须要注意,本教程使用的过程可能会对网络供应商的网络运做有所影响,请谨慎参考。
但愿这些对你有用。
免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/
或者勾搭Q2430675018
欢迎加入linux交流群 478068715