Linux中國

如何在 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

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國