multicast-9 MSDP
MSDP 域間組播
例項
RP : 按理說RP應該是每個AS都有,不可以所有AS共用一個RP,共享樹的規模就太大了,
如果是在AS內部都有RP的話,那麼共享樹,只在自己的AS內完成
需要解決的問題
兩側所使用的RP選舉方法不同,左側使用BSR,右側使用AUTORP
另外,兩個AS之間需要 執行MBGP嗎?
不用,因為並不需要使用MBGP去進行RPF校驗,和這個關係
而BSR的工作原理,就是向外泛洪bootstrap訊息,並且這個訊息會從R2的F0/1口發出去,發出去不要緊,但是做為右側的AS,是否就會收到這個bootstrap訊息,從而進行選舉,導致最後兩個AS所選舉出來的RP是一樣的,
這顯然是不行的,
怎麼辦呢?
AS之間的RP 訊息過濾
讓R2不從F0/1口向外傳送BSR的訊息
R2(config-router)#inter f0/1 R2(config-if)#ip pim bsr-border
不會跨越AS傳送BSR訊息
而做為R3,上面要對AUTORP的訊息進行限制,
從R3 的f0/0介面上, 無論是進還是出,都阻止224.0.1.39和224.0.1.40這兩個地址的流量
R3(config)#access-list 1 deny 224.0.1.39 R3(config)#access-list 1 deny 224.0.1.40 R3(config)#access-list 1per any R3(config)#inter f0/0 R3(config-if)#ip multicast boundary 1 //呼叫組播ACL列表
後面還可以加引數 ,in ,out ,很好理解 了吧,進來的,發出去的,
如果什麼都不加,那就代表都生效。
在做域間組播時,先做的一定是RP的訊息的阻止泛洪
現在我們讓R2成為as100的RP,還是BSR
讓R4成為AS200 的MA 和RP
這樣一來,共享樹得以構建完成
讓PC加組224.1.1.1
然後就可以在R4上可以看到*,G表項
而R3上毛都看不到,
因為此時他沒有收到igmp report 訊息,以及沒有收到*,G 的join 訊息,
它也不可能收到,因為在AS200 裡,RP是R4
同再AS100也是一樣的,
但是不會出現*,G表項,是空的,為什麼?因為使用的是BSR模式來選舉的RP,不會AUTORP那樣,可以看到239,240的
那現在要怎麼辦呢?
讓SERVER傳送組播流量即可
現在是肯定不通的,為什麼呢?
到底發生了什麼?
此時到R1上看一下,現在的*,G表項和S,G表項都是空的,怎麼辦?
在sparse 模式裡面找RP啊~要怎麼找呢?
單播註冊啊~
但是R1傳送出來的register 訊息,R2馬上就給回覆了?~
為啥這麼快呢?
什麼時候才會回覆register stop訊息呢?
要麼是R2是真正的收到了組播流量,顯然這裡有收到真正的組播流量
要麼是R2下面沒有接收者,顯然,R2下面就真的沒有接收者,所以立刻回覆了註冊停止的訊息
也就是說沒有形成共享樹,
那如何解決這一問題呢?
解決的問題就是
當R2收到註冊訊息以後,複製一份給AS200 的RP
這時候就要用到MSDP,域間組播 組播源發現協議
組播源發現協議MSDP
1 MSDP 在多個AS之間的RP之間建立 TCP 連線,TCP源埠是高位隨機埠,TCP的目的埠號是639
該TCP連線負責將組播資料包封裝在P2P 的TCP資料包中進行傳輸,從而讓其它AS內的2 RP可以收到組播資料包,並且獲知源的資訊,
3 組播資料包封裝到單播包以後稱之為SA (source active)message,就是一個AS的RP,傳送給另外一個AS的RP 源是自己的IP,目標是另一個AS的RP地址
4 其它AS內的RP在獲知源的資訊後,可以按照SPARSE MODE中的源樹的構建方法來主動向源發起(S,G)join message 從而建立 真正的組播路徑
並且這個包的源是AS100的RP 目標是AS200 的RP
並且傳送的是SA訊息,實際就是register訊息
配置也很簡單
直接指定MSDP的鄰居
建立方法
R2(config)#ip msdp peer 4.4.4.4 connect-source lo 1 remote-as 200 鄰居地址 連線的源是我本地的RP介面 對端 的AS號 R4(config)#ip msdp peer 2.2.2.2 connect-source lo 1 remote-as 100
Ip msdp peer [peer address] connect-source [int][remote-as][as number] Ip msdp originator-id [interface]
Peer 是TCP的遠端的地址,必須有路由可達,
Remote-as 用於指定對端 AS號,不設定不影響TCP的建立 和MSDP的工作
Originator id 是可選項,如果沒有設定,則用本地的RP地址作為ID ,就是RP的RID 標識
兩端輸入完成後,會由先配置的一方主動發起tcp的建立 ,
2.2.2.2---4.4.4.4 發起SYN
4.4.4.4---2.2.2.2 回覆SYN+ ACK
2.2.2.2---4.4.4.4 回覆ACK
並後發起請求時使用的是高階口號隨機的
去和對端建立639埠號
兩側建立形成之後,使用keepalive 進行維持鄰居關係
來看一下SA訊息
R2給R4傳送SA訊息,
裡面包含了真正的組播流量
從而形成了S,G表項
並且會向著S,G的in 口傳送S,G的join訊息
建立S,G表項
4-3傳送S,G join訊息
3-2傳送S,Gjoin 訊息
一直傳到了R1
整個的過程圖是這樣的
由於使用了sparse 模式,並且兩側AS都配置了RP 以及bsr,和MA
得以建立共享樹
然而兩側的AS之間內部的RP無法實現資料的互動,無法完成註冊資訊的傳遞,也就無法完成組播流量的正常傳遞,
這時候的解決辦法是使用MSDP
收到了SA訊息之後,由於SA訊息中包含了真正的組播流量,所以為R4建立S,G表項提供了幫助,
剩下的就是建立 S,G表項的事兒了,以構建最短路徑樹,不再贅述了
SA 過濾
2 指對源接收,只收誰,或者是不收誰 標準ACL
3 對SA訊息的內容,哪個源針對於哪個組發的流量, 擴充套件ACL
擴充套件ACL
Ip msdp sa-filter [in][out][peer address][list | route-map]
PS:
1 List 和route-map 均可以用來匹配擴充套件ACL,如果是route-map的話,就需要用route-map呼叫ACL
2 擴充套件ACL 用於限制哪些源到哪些組地址的資訊可以用於構建組播路由表
那什麼時候需要 修改originator Id呢?
別急,後面說,anycast 時,會用到
例項
在server處又新加了一臺裝置,當做源 R5 192.168.1.20
此時 在R2上(SA的過濾配置肯定是在RP上的)
Extended IP access list 100 10 permit ip host 192.168.1.10 host 224.1.1.1 (5 matches) R2(config)#ip msdp sa-filter out 4.4.4.4 list 100
當然也可以先寫deny 再寫permit ,這個和 正常的ACL沒啥區別
現在只允許192.168.1.10 這個源向組播224.1.1.1 地址傳送流量時,才會進行SA的轉發,而其它的源地址將不給予轉發SA ,
沒有SA也就意味著無法建立S,G,沒有S,G也就意味著沒有辦法通訊
此時R5是死活也通不了的。
但是現在我們再來修改一下ACL
允許192.168.1.20 這個源, 然後再來看一下吧
好,加完了,
這樣就過來了,
然後我們再來試一下,現在是在R2上配置Out 的,
我們現在在R4上(另外一臺RP上)做In 方向上的filter,
現在兩個源都可以,
我在R4上將192.168.1.10 deny 掉,看看有什麼變化
此時源為192.168.1.10的server ,打死也通不了了
那麼R5呢?另外一臺192.168.1.20 的 server呢?
等待一段時間,等組播路由表收斂完成,就可以了
但是通過wireshark 抓包可以明顯的看到,SA的訊息是發出去了,但是到達對端的時候有什麼問題和我這邊沒有關係了,問題是出在了對端 的RP上
現在再加上RP-LIST 和 rp-route-map
標準ACL
Ip msdp sa-filter [in] [out] [peer address] [rp-list] [rp-route-map]
Rp-list 和rp-route-map均可以用來匹配標準ACL
標準ACL用於限制 哪些peer 產生的SA可以傳送,其中的ACL 匹配的是peer 上的originator id
Originator id 如果不手動配置的話,就會以RP的地址來代替這個地址,
如果想要修改的話,可以使用命令來修改
Ip msdp originator-id [interface]
R4(config)#ip msdp sa-filter in 2.2.2.2 rp-list 1 //呼叫RP-LIST R4(config)#ip access-list standard 1 R4(config-std-nacl)#deny 2.2.2.2 R4(config-std-nacl)#per any
這樣就可以直接deny 掉R2這臺RP所發來的SA訊息,針對的是RP,而不是RP所發來的具體內容。直接就給你拍死了。
但是如果說現在將R2的RP 的originator 地址改一下會發生什麼呢?
來看一下,
由於預設會使用RP的地址來做為originatorID ,並且我們在R4上配置的filter 也是針對的2.2.2.2 這個地址,現在來改一下看看
R2(config)#ip msdp originator-id f0/0
然後用SERVER 去Ping 一下組播地址,
發現可以通,
抓包來分析一下
現在傳送的SA 訊息中,源是2.2.2.2 到4.4.4.4 外層IP沒有問題
但是裡面的MSDP中發生了變化,RP address 變成了12.0.0.2
變了,那麼在R4上面針對2.2.2.2 所做的策略,自然也就不生效了
現在是server 和 R5都沒有問題
那麼此時,我們在R4上再針對於12.0.0.2這個新的originatorID 來做一個filter呢?
R4(config)#ip msdp sa-filter in 2.2.2.2 rp-list 2
你所指向的還是RP,因為RP的地址不變,你所變的是originator ID
都不通了,
這也就是Originator ID的做用,
預設情況下是RP的地址,當然是可以改的,如果是改完之後,必須要重新的針對這個ID做filter才可以
-------------------------------------------
CCIE成長之路 ---梅利