跳至主要內容

ONOS SDN-IP

取自ONOS SDN-IP Use Case

Data Plane

dataplane

  • 負責在外部BGP與內部BGP Speaker交換路由
  • 不同的AS間傳遞資訊

Controller Plane

controlplane

  • SDN-IP 透過 iBGP來接收BGP Speaker送過來的路由訊息加入至ONOS flowEntry中
  • SDN-IP只負責接收BGP訊息,不會發送也不會與其他的SDN-IP相互交換
  • SDN-IP default BGP port number is 2000

HA機制

bgpconf

  • 內部iBGP可以有許多拓墣選擇
  • 可以有多個SDN-IP運行但只會有一個SDN-IP Leader負責統一接收iBGP
  • 當Leader發生問題,其餘的SDN-IP之一會接手位置

當前限制

  • Peering新增/刪除等修改只能在ONOS未運行狀態
  • SDN-IP default BGP port number is 2000 非預設的 179,因為port小於1023需要root權限
  • SDN-IP 非採用load balance方式而是如上提到的Leader形式,一次只有一個instance負責
  • 目前無明確的設定,SDN-IP預設將會接收所有BGP訊息
  • 因框架限制,1.0.0版本中最多可以處理15000個routers

Toturial

sdnip-labels

以quagga模擬五個端點的router

BGP 為內部的BGP Speaker 負責peering R1~R4  以及轉送路由給ONOS

R1~R4 為外部網路的邊界路由器

在R1~R4之外分別各有一個mininet的host  h1~h4

這些host接在各Router之下,ONOS最多只能看見OVS的下一層host 故在拓墣上看不見

h1~h4

  • IP分別為192.168.1-4.1/24
  • 分別接在R1~4另一端

bgp

  • IP分別為10.0.1-4.101/24
  • 其另一端還有接一個host – root 用來接收iBGP

下面檔案是用來設定sdnip peering資訊

放置於onos/tools/package/config/ 下

Before ONOS 1.2 (address.json and sdnip.json)

address.json  (對proxyarp的設定 若設定錯誤quagga會收不到peer的eBGP)


{
 "addresses" : [
 {
 "dpid" : "00:00:00:00:00:00:00:a1",
 "port" : "1",
 "ips" : ["10.0.1.101/24"],
 "mac" : "00:00:00:00:00:01"
 },
 {
 "dpid" : "00:00:00:00:00:00:00:a2",
 "port" : "1",
 "ips" : ["10.0.2.101/24"],
 "mac" : "00:00:00:00:00:01"
 },
 {
 "dpid" : "00:00:00:00:00:00:00:a5",
 "port" : "1",
 "ips" : ["10.0.3.101/24"],
 "mac" : "00:00:00:00:00:01"
 },
 {
 "dpid" : "00:00:00:00:00:00:00:a6",
 "port" : "1",
 "ips" : ["10.0.4.101/24"],
 "mac" : "00:00:00:00:00:01"
 }
 ]
}
  • IP MAC 為proxy目標
  • dpid port 為需要proxy的來源

sdnip.json


{
    "bgpPeers" : [
        {
            "attachmentDpid" : "00:00:00:00:00:00:00:a1",
            "attachmentPort" : "1",
            "ipAddress" : "10.0.1.1"
        },
        {
            "attachmentDpid" : "00:00:00:00:00:00:00:a2",
            "attachmentPort" : "1",
            "ipAddress" : "10.0.2.1"
        },
        {
            "attachmentDpid" : "00:00:00:00:00:00:00:a5",
            "attachmentPort" : "1",
            "ipAddress" : "10.0.3.1"
        },
        {
            "attachmentDpid" : "00:00:00:00:00:00:00:a6",
            "attachmentPort" : "1",
            "ipAddress" : "10.0.4.1"
        }
    ],
    "bgpSpeakers" : [
        {
            "name" : "bgp",
            "attachmentDpid" : "00:00:00:00:00:00:00:a3",
            "attachmentPort" : "1",
            "macAddress" : "00:00:00:00:00:01",
            "interfaceAddresses" : [
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a1",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.1.101"
                },
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a2",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.2.101"
                },
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a5",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.3.101"
                },
                {
                    "interfaceDpid" : "00:00:00:00:00:00:00:a6",
                    "interfacePort" : "1",
                    "ipAddress" : "10.0.4.101"
                }
            ]
        }
    ]
}

bgppeers

  • attachmentDpid與port 是SDN內部對接的OF switch (同上address.json部分)
  • ipaddress則為 peer方的IP

bgpSpeakers

  • 上半部定義內部BGP Speaker的資訊 如 對接的OF Switch dpid and IP (Single-point to single-point intents)
  • 下半部定義 peering 所使用的IP 以及 對外的OF SWITCH (Multi-point to single-point intents)

After ONOS 1.3 (network-cfg.json)

network-cfg.json


{
    "ports" : {
        "of:00000000000000a1/1" : {
            "interfaces" : [
                {
                    "ips"  : [ "10.0.1.101/24" ],
                    "mac"  : "00:0C:29:C3:B1:0C"
                }
            ]
        },
        "of:00000000000000a2/1" : {
            "interfaces" : [
                {
                    "ips"  : [ "10.0.2.102/24" ],
                    "mac"  : "00:0C:29:48:0F:0C"
                }
            ]
        }
    },
    "apps" : {
        "org.onosproject.router" : {
            "bgp" : {
                "bgpSpeakers" : [
                    {
                        "name" : "quagga1",
                        "connectPoint" : "of:00000000000000a4/3",
                        "peers" : [
                            "10.0.1.1"
                        ]
                    },
                    {
                        "name" : "quagga2",
                        "connectPoint" : "of:00000000000000a3/3",
                        "peers" : [
                            "10.0.2.1"
                        ]
                    }
                ]
            }
        }
    }
}

上半部Ports部分

  • DPID填入外部對接的OF Switch 斜線後為ports
  • IP與MAC填內部BGP Speaker

下半部apps部分

  • connectPoint則為內部BGP Speaker對接的OF Switch
  • peers為對方peering IP

onos apps active(fwd not need)

onos> app active org.onosproject.proxyarp
onos> app active org.onosproject.sdnip

實驗部分

因計畫要求故修改範例成如下拓墣

sdnip

  • Quagga1、2互相備援 內部與ONOS三方交換iBGP
    • Quagga1、2各有兩個interface 分別為10.10.10.x與10.0.1-2.x    此處UI看不出來
    • 因三者之間有放一個SW,預設ONOS無法L2 Forward故需要active ONOS fwd功能
  • Peering兩個不同的AS

在此範例VM中新增/刪減AS需要修改下列檔案

  • onos/tools/package/config/address.json與sdnip.json
  • /home/sdnip/config/quagga1-2.conf 與quagga-sdn.conf 來指定neighbor交換BGP訊息
    • 此處若增加備援quagga記得quagga1-2也要新增反向的peer資訊
    • BGP狀況可以透過以下來確認有無成功連結
      1. mininet> bgp lxterminal
      2. #telnet localhost 2605
      3. bgp> sh ip bgp summary
  • /home/sdnip/sdnip/tutorial.py 來修改mininet拓樸

測試結果

  • 當quagga1或2其中之一link down的時候仍然保持路由
  • 若橫向連線down 而縱向up路由會失效,無法透過quagga1-2之間向上路由(Out of Band)
  • quagga1-2間可以互相peer或只各自對SDN-IP 兩者皆可
  • 當路由建立完成,h1 ping h2會直接透過OF Switch傳達並不會再經過 BGP Speaker轉送
  • 使用ONOS Cluster 當leader掛了 h1 to h2仍然維持連線
    • onos> leader可以觀察當前的leader
分類:ONOS

搶先發佈留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

由 Compete Themes 設計的 Author 佈景主題