主頁(yè) > 知識(shí)庫(kù) > 在CentOS中制作BGP路由器的教程

在CentOS中制作BGP路由器的教程

熱門標(biāo)簽:免費(fèi)建站 服務(wù)外包 百度競(jìng)價(jià)排名 Win7旗艦版 網(wǎng)站建設(shè) 智能手機(jī) 硅谷的囚徒呼叫中心 Linux服務(wù)器

Quagga是一個(gè)開(kāi)源路由軟件套件。在這個(gè)教程中,我將會(huì)重點(diǎn)講講如何把一個(gè)Linux系統(tǒng)變成一個(gè)BGP路由器,還是使用Quagga,演示如何建立BGP與其它BGP路由器對(duì)等。

在我們進(jìn)入細(xì)節(jié)之前,一些BGP的背景知識(shí)還是必要的。邊界網(wǎng)關(guān)協(xié)議(即BGP)是互聯(lián)網(wǎng)的域間路由協(xié)議的實(shí)際標(biāo)準(zhǔn)。在BGP術(shù)語(yǔ)中,全球互聯(lián)網(wǎng)是由成千上萬(wàn)相關(guān)聯(lián)的自治系統(tǒng)(AS)組成,其中每一個(gè)AS代表每一個(gè)特定運(yùn)營(yíng)商提供的一個(gè)網(wǎng)絡(luò)管理域(據(jù)說(shuō),美國(guó)前總統(tǒng)喬治.布什都有自己的 AS 編號(hào))。
為了使其網(wǎng)絡(luò)在全球范圍內(nèi)路由可達(dá),每一個(gè)AS需要知道如何在英特網(wǎng)中到達(dá)其它的AS。這時(shí)候就需要BGP出來(lái)扮演這個(gè)角色了。BGP是一個(gè)AS去與相鄰的AS交換路由信息的語(yǔ)言。這些路由信息通常被稱為BGP線路或者BGP前綴。包括AS號(hào)(ASN;全球唯一號(hào)碼)以及相關(guān)的IP地址塊。一旦所有的BGP線路被當(dāng)?shù)氐腂GP路由表學(xué)習(xí)和記錄,每一個(gè)AS將會(huì)知道如何到達(dá)互聯(lián)網(wǎng)的任何公網(wǎng)IP。

在不同域(AS)之間路由的能力是BGP被稱為外部網(wǎng)關(guān)協(xié)議(EGP)或者域間協(xié)議的主要原因。就如一些路由協(xié)議,例如OSPF、IS-IS、RIP和EIGRP都是內(nèi)部網(wǎng)關(guān)協(xié)議(IGPs)或者域內(nèi)路由協(xié)議,用于處理一個(gè)域內(nèi)的路由.
測(cè)試方案

在這個(gè)教程中,讓我們來(lái)使用以下拓?fù)洹?br />

我們假設(shè)運(yùn)營(yíng)商A想要建立一個(gè)BGP來(lái)與運(yùn)營(yíng)商B對(duì)等交換路由。它們的AS號(hào)和IP地址空間的細(xì)節(jié)如下所示:

    運(yùn)營(yíng)商 A: ASN (100), IP地址空間 (100.100.0.0/22), 分配給BGP路由器eth1網(wǎng)卡的IP地址(100.100.1.1)

    運(yùn)營(yíng)商 B: ASN (200), IP地址空間 (200.200.0.0/22), 分配給BGP路由器eth1網(wǎng)卡的IP地址(200.200.1.1)

路由器A和路由器B使用100.100.0.0/30子網(wǎng)來(lái)連接到對(duì)方。從理論上來(lái)說(shuō),任何子網(wǎng)從運(yùn)營(yíng)商那里都是可達(dá)的、可互連的。在真實(shí)場(chǎng)景中,建議使用掩碼為30位的公網(wǎng)IP地址空間來(lái)實(shí)現(xiàn)運(yùn)營(yíng)商A和運(yùn)營(yíng)商B之間的連通。
在 CentOS中安裝Quagga

如果Quagga還沒(méi)安裝好,我們可以使用yum來(lái)安裝Quagga。

   

復(fù)制代碼
代碼如下:
# yum install quagga

如果你正在使用的是CentOS7系統(tǒng),你需要應(yīng)用一下策略來(lái)設(shè)置SELinux。否則,SElinux將會(huì)阻止Zebra守護(hù)進(jìn)程寫(xiě)入它的配置目錄。如果你正在使用的是CentOS6,你可以跳過(guò)這一步。

   

復(fù)制代碼
代碼如下:
# setsebool -P zebra_write_config 1

Quagga軟件套件包含幾個(gè)守護(hù)進(jìn)程,這些進(jìn)程可以協(xié)同工作。關(guān)于BGP路由,我們將把重點(diǎn)放在建立以下2個(gè)守護(hù)進(jìn)程。

    Zebra:一個(gè)核心守護(hù)進(jìn)程用于內(nèi)核接口和靜態(tài)路由.
    BGPd:一個(gè)BGP守護(hù)進(jìn)程.

配置日志記錄

在Quagga被安裝后,下一步就是配置Zebra來(lái)管理BGP路由器的網(wǎng)絡(luò)接口。我們通過(guò)創(chuàng)建一個(gè)Zebra配置文件和啟用日志記錄來(lái)開(kāi)始第一步。

   

復(fù)制代碼
代碼如下:
# cp /usr/share/doc/quagga-XXXXX/zebra.conf.sample /etc/quagga/zebra.conf

在CentOS6系統(tǒng)中:

  

復(fù)制代碼
代碼如下:
# service zebra start
# chkconfig zebra on

在CentOS7系統(tǒng)中:

   

復(fù)制代碼
代碼如下:
# systemctl start zebra
# systemctl enable zebra

Quagga提供了一個(gè)叫做vtysh特有的命令行工具,你可以輸入與路由器廠商(例如Cisco和Juniper)兼容和支持的命令。我們將使用vtysh shell來(lái)配置BGP路由在教程的其余部分。

啟動(dòng)vtysh shell 命令,輸入:

   

復(fù)制代碼
代碼如下:
# vtysh

提示將被改成該主機(jī)名,這表明你是在vtysh shell中。

   

復(fù)制代碼
代碼如下:
Router-A#

現(xiàn)在我們將使用以下命令來(lái)為Zebra配置日志文件:

   

復(fù)制代碼
代碼如下:
Router-A# configure terminal
Router-A(config)# log file /var/log/quagga/quagga.log
Router-A(config)# exit

永久保存Zebra配置:

   

復(fù)制代碼
代碼如下:
Router-A# write

在路由器B操作同樣的步驟。
配置對(duì)等的IP地址

下一步,我們將在可用的接口上配置對(duì)等的IP地址。

   

復(fù)制代碼
代碼如下:
Router-A# show interface #顯示接口信息/p> p> Interface eth0 is up, line protocol detection is disabled
. . . . .
Interface eth1 is up, line protocol detection is disabled
. . . . .

配置eth0接口的參數(shù):

   

復(fù)制代碼
代碼如下:
site-A-RTR# configure terminal
site-A-RTR(config)# interface eth0
site-A-RTR(config-if)# ip address 100.100.0.1/30
site-A-RTR(config-if)# description "to Router-B"
site-A-RTR(config-if)# no shutdown
site-A-RTR(config-if)# exit

繼續(xù)配置eth1接口的參數(shù):

   

復(fù)制代碼
代碼如下:
site-A-RTR(config)# interface eth1
site-A-RTR(config-if)# ip address 100.100.1.1/24
site-A-RTR(config-if)# description "test ip from provider A network"
site-A-RTR(config-if)# no shutdown
site-A-RTR(config-if)# exit

現(xiàn)在確認(rèn)配置:

   

復(fù)制代碼
代碼如下:
Router-A# show interface /p> p> Interface eth0 is up, line protocol detection is disabled
Description: "to Router-B"
inet 100.100.0.1/30 broadcast 100.100.0.3
Interface eth1 is up, line protocol detection is disabled
Description: "test ip from provider A network"
inet 100.100.1.1/24 broadcast 100.100.1.255/p> p> Router-A# show interface description #顯示接口描述/p> p> Interface Status Protocol Description
eth0 up unknown "to Router-B"
eth1 up unknown "test ip from provider A network"

如果一切看起來(lái)正常,別忘記保存配置。

   

復(fù)制代碼
代碼如下:
Router-A# write

同樣地,在路由器B重復(fù)一次配置。

在我們繼續(xù)下一步之前,確認(rèn)下彼此的IP是可以ping通的。

   

復(fù)制代碼
代碼如下:
Router-A# ping 100.100.0.2 /p> p> PING 100.100.0.2 (100.100.0.2) 56(84) bytes of data.
64 bytes from 100.100.0.2: icmp_seq=1 ttl=64 time=0.616 ms

下一步,我們將繼續(xù)配置BGP對(duì)等和前綴設(shè)置。
配置BGP對(duì)等

Quagga守護(hù)進(jìn)程負(fù)責(zé)BGP的服務(wù)叫bgpd。首先我們來(lái)準(zhǔn)備它的配置文件。

   

復(fù)制代碼
代碼如下:
# cp /usr/share/doc/quagga-XXXXXXX/bgpd.conf.sample /etc/quagga/bgpd.conf

在CentOS6系統(tǒng)中:

   

復(fù)制代碼
代碼如下:
# service bgpd start
# chkconfig bgpd on

在CentOS7中:

   

復(fù)制代碼
代碼如下:
# systemctl start bgpd
# systemctl enable bgpd

現(xiàn)在,讓我們來(lái)進(jìn)入Quagga 的shell。

   

復(fù)制代碼
代碼如下:
# vtysh

第一步,我們要確認(rèn)當(dāng)前沒(méi)有已經(jīng)配置的BGP會(huì)話。在一些版本,我們可能會(huì)發(fā)現(xiàn)一個(gè)AS號(hào)為7675的BGP會(huì)話。由于我們不需要這個(gè)會(huì)話,所以把它移除。

   

復(fù)制代碼
代碼如下:
Router-A# show running-config /p> p> ... ... ...
router bgp 7675
bgp router-id 200.200.1.1
... ... ...

我們將移除一些預(yù)先配置好的BGP會(huì)話,并建立我們所需的會(huì)話取而代之。

   

復(fù)制代碼
代碼如下:
Router-A# configure terminal
Router-A(config)# no router bgp 7675
Router-A(config)# router bgp 100
Router-A(config)# no auto-summary
Router-A(config)# no synchronizaiton
Router-A(config-router)# neighbor 100.100.0.2 remote-as 200
Router-A(config-router)# neighbor 100.100.0.2 description "provider B"
Router-A(config-router)# exit
Router-A(config)# exit
Router-A# write

路由器B將用同樣的方式來(lái)進(jìn)行配置,以下配置提供作為參考。

   

復(fù)制代碼
代碼如下:
Router-B# configure terminal
Router-B(config)# no router bgp 7675
Router-B(config)# router bgp 200
Router-B(config)# no auto-summary
Router-B(config)# no synchronizaiton
Router-B(config-router)# neighbor 100.100.0.1 remote-as 100
Router-B(config-router)# neighbor 100.100.0.1 description "provider A"
Router-B(config-router)# exit
Router-B(config)# exit
Router-B# write

當(dāng)相關(guān)的路由器都被配置好,兩臺(tái)路由器之間的對(duì)等將被建立。現(xiàn)在讓我們通過(guò)運(yùn)行下面的命令來(lái)確認(rèn):

   

復(fù)制代碼
代碼如下:
Router-A# show ip bgp summary

    從輸出中,我們可以看到"State/PfxRcd"部分。如果對(duì)等關(guān)閉,輸出將會(huì)顯示"Idle"或者"Active'。請(qǐng)記住,單詞'Active'這個(gè)詞在路由器中總是不好的意思。它意味著路由器正在積極地尋找鄰居、前綴或者路由。當(dāng)對(duì)等是up狀態(tài),"State/PfxRcd"下的輸出狀態(tài)將會(huì)從特殊鄰居接收到前綴號(hào)。

在這個(gè)例子的輸出中,BGP對(duì)等只是在AS100和AS200之間呈up狀態(tài)。因此沒(méi)有前綴被更改,所以最右邊列的數(shù)值是0。
配置前綴通告

正如一開(kāi)始提到,AS 100將以100.100.0.0/22作為通告,在我們的例子中AS 200將同樣以200.200.0.0/22作為通告。這些前綴需要被添加到BGP配置如下。

在路由器-A中:

   

復(fù)制代碼
代碼如下:
Router-A# configure terminal
Router-A(config)# router bgp 100
Router-A(config)# network 100.100.0.0/22
Router-A(config)# exit
Router-A# write

在路由器-B中:

   

復(fù)制代碼
代碼如下:
Router-B# configure terminal
Router-B(config)# router bgp 200
Router-B(config)# network 200.200.0.0/22
Router-B(config)# exit
Router-B# write

在這一點(diǎn)上,兩個(gè)路由器會(huì)根據(jù)需要開(kāi)始通告前綴。
測(cè)試前綴通告

首先,讓我們來(lái)確認(rèn)前綴的數(shù)量是否被改變了。

   

復(fù)制代碼
代碼如下:
Router-A# show ip bgp summary

    為了查看所接收的更多前綴細(xì)節(jié),我們可以使用以下命令,這個(gè)命令用于顯示鄰居100.100.0.2所接收到的前綴總數(shù)。

    

復(fù)制代碼
代碼如下:
Router-A# show ip bgp neighbors 100.100.0.2 advertised-routes

     查看哪一個(gè)前綴是我們從鄰居接收到的:

   

復(fù)制代碼
代碼如下:
Router-A# show ip bgp neighbors 100.100.0.2 routes

    我們也可以查看所有的BGP路由器:

   

復(fù)制代碼
代碼如下:
Router-A# show ip bgp

    以上的命令都可以被用于檢查哪個(gè)路由器通過(guò)BGP在路由器表中被學(xué)習(xí)到。

   

復(fù)制代碼
代碼如下:
Router-A# show ip route

    代碼: K - 內(nèi)核路由, C - 已鏈接 , S - 靜態(tài) , R - 路由信息協(xié)議 , O - 開(kāi)放式最短路徑優(yōu)先協(xié)議,
    
           I - 中間系統(tǒng)到中間系統(tǒng)的路由選擇協(xié)議, B - 邊界網(wǎng)關(guān)協(xié)議, > - 選擇路由, * - FIB 路由
    
   

復(fù)制代碼
代碼如下:
C>* 100.100.0.0/30 is directly connected, eth0
C>* 100.100.1.0/24 is directly connected, eth1
B>* 200.200.0.0/22 [20/0] via 100.100.0.2, eth0, 00:06:45/p> p> Router-A# show ip route bgp /p> p> B>* 200.200.0.0/22 [20/0] via 100.100.0.2, eth0, 00:08:13

BGP學(xué)習(xí)到的路由也將會(huì)在Linux路由表中出現(xiàn)。

  

復(fù)制代碼
代碼如下:
[root@Router-A~]# ip route /p> p> 100.100.0.0/30 dev eth0 proto kernel scope link src 100.100.0.1
100.100.1.0/24 dev eth1 proto kernel scope link src 100.100.1.1
200.200.0.0/22 via 100.100.0.2 dev eth0 proto zebra

最后,我們將使用ping命令來(lái)測(cè)試連通。結(jié)果將成功ping通。

   

復(fù)制代碼
代碼如下:
[root@Router-A~]# ping 200.200.1.1 -c 2

總而言之,本教程將重點(diǎn)放在如何在CentOS系統(tǒng)中運(yùn)行一個(gè)基本的BGP路由器。這個(gè)教程讓你開(kāi)始學(xué)習(xí)BGP的配置,一些更高級(jí)的設(shè)置例如設(shè)置過(guò)濾器、BGP屬性調(diào)整、本地優(yōu)先級(jí)和預(yù)先路徑準(zhǔn)備等,我將會(huì)在后續(xù)的教程中覆蓋這些主題。

希望這篇教程能給大家一些幫助。

標(biāo)簽:棗莊 武威 石家莊 商丘 克拉瑪依 天水 玉樹(shù) 許昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在CentOS中制作BGP路由器的教程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266