在之前的教程中,我們演示了如何使用Quagga建立一個完備的BGP路由器和配置前綴過濾。在本教程中,我們會向你演示如何創建IPv6 BGP對等體并通過BGP通告IPv6前綴。同時我們也将演示如何使用前綴列表和路由映射特性來過濾通告的或者獲取到的IPv6前綴。
教程中,我們主要參考如下拓撲。
服務供應商A和B希望在他們之間建立一個IPv6的BGP對等體。他們的IPv6地址和AS信息如下所示。
如果Quagga還沒有安裝,我們可以先使用yum安裝。
# yum install quagga
在CentOS/RHEL 7,SELinux策略會默認的阻止對于/usr/sbin/zebra配置目錄的寫操作,這會對我們将要介紹的安裝操作有所影響。因此我們需要像下面這樣關閉這個策略。如果你使用的是CentOS/RHEL 6可以跳過這一步。
# 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配置日志文件,這會有助于調試。
首先,進入全局配置模式通過輸入:
router-a# configure terminal
提示符将變更成:
router-a(config)#
指定日志文件的位置。然後退出配置模式:
router-a(config)# log file /var/log/quagga/quagga.log
router-a(config)# exit
保存配置通過:
router-a# write
現在,讓我們為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
本段,我們将在兩個路由之間配置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
正如我們在上面看到的輸出信息那樣,路由間通告了他們完整的/48 IPv6前綴。出于演示的目的,我們會考慮以下要求。
我們将根據需要過濾的前綴,來使用路由器的前綴列表和路由映射。
目前,路由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上驗證了所有的前綴都獲得到了。
太好了!我們在路由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前綴,和如何過濾通告前綴或獲得的通告。需要注意,本教程使用的過程可能會對網絡供應商的網絡運作有所影響,請謹慎參考。
希望這些對你有用。
本文由 LCTT原創翻譯,Linux中國榮譽推出
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!