如何在 Quagga BGP 路由器中設置 IPv6 的 BGP 對等體和過濾
服務供應商A和B希望在他們之間建立一個IPv6的BGP對等體。他們的IPv6地址和AS信息如下所示。
- 對等體IP塊: 2001:DB8:3::/64
- 供應商A: AS 100, 2001:DB8:1::/48
- 供應商B: AS 200, 2001:DB8:2::/48
CentOS/RHEL安裝Quagga
如果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指定日誌文件
來為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上驗證了所有的前綴都獲得到了。
太好了!我們在路由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前綴,和如何過濾通告前綴或獲得的通告。需要注意,本教程使用的過程可能會對網路供應商的網路運作有所影響,請謹慎參考。
希望這些對你有用。
via: http://xmodulo.com/ipv6-bgp-peering-filtering-quagga-bgp-router.html
作者:Sarmed Rahman 譯者:martin2011qi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive