Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

OpenDaylightを用いた次世代ネットワーク構成管理の考察

4,382 views

Published on

OpenDaylightを用いた次世代ネットワーク構成管理の考察

2015年06月18日
さくらインターネット株式会社 / さくらインターネット研究所
上級研究員 松本直人

Published in: Technology
  • Be the first to comment

OpenDaylightを用いた次世代ネットワーク構成管理の考察

  1. 1. 2015年06月18日 さくらインターネット株式会社 / さくらインターネット研究所 上級研究員 松本直人
  2. 2. 次世代ネットワーク技術の課題整理 サービス管理のために動的なネットワーク構成変更が重要となる
  3. 3. クラウド環境における課題整理 仮想サーバーやルーターなどを統一的に管理する手法が必要となる
  4. 4. OpenDaylightを用いた課題解決 既存設備と新規設備をシームレスにつないでいくスキルが必要となる
  5. 5. OpenDaylightベースコントローラーの導入手順
  6. 6. ODLコントローラーを導入する 必要なソフトウェアパッケージを事前用意しておく 例) Brocade SDN Controller @Ubuntu Server 1404 LTS (4 vCPU + 4GB DRAM + 16GB SSD)
  7. 7. 仮想ルーターにNETCONFを設定する NETCONF over SSH (port 830)を設定する 例) Brocade vRouter (5600) 3.2.1R6 (4 vCPU + 4G DRAM + 16GB SSD)
  8. 8. ネットワーク構成管理情報を登録する ODLコントローラーを経由し仮想ルーターを構成管理する 例) Brocade SDN Controller へ Brocade vRouter(5600) 3.2.1R6 の構成情報をマウントする
  9. 9. ネットワーク構成管理情報を確認する REST API経由で得られるネットワーク構成管理情報(JSON)を確認する 例) Brocade SDN Controller へ Brocade vRouter(5600) 3.2.1R6 の構成情報を取得する
  10. 10. OpenDaylightベースコントローラーの利用実験
  11. 11. FWaaS (Firewall as a Service) サンプルコード
  12. 12. 100.64.81.81/24 100.64.64.64/24 dp0p224p1 UDP135-137を破棄(drop)
  13. 13. Firewallルールの作成 $ cat fw-rule-test.py import json, requests data={ "vyatta-security:security": { "vyatta-security-firewall:firewall": { "name": [ { "default-action": "accept", "rule": [ { "action": "drop", "destination": { "port": "135-137" }, "protocol": "udp", "tagnode": 10 } ], "tagnode": "TEST" } ] } } } Mount="/yang-ext:mount/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="admin" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.post(url, data=payload, auth=(username, password), headers=headers) $ python fw-rule-test.py 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順 ↑OpenDaylightベースコントローラー ←仮想ルーター ←設定投入するマウント項目
  14. 14. Firewallルールの適用 $ cat fw-if-test.py import json, requests data={ "vyatta-security-firewall:firewall": { "in": [ "TEST" ] } } Mount="/yang-ext:mount/vyatta-interfaces:interfaces/vyatta-interfaces-dataplane:dataplane/dp0p224p1/vyatta-security-firewall:firewall" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python fw-if-test.py 仮想ルーターへの設定投入項目
  15. 15. RaaS (Routing as a Service) サンプルコード
  16. 16. 100.64.64.64/24 192.168.11.33/24 Loopback 1.2.3.4/32 dp0p224p1 100.64.81.81/24
  17. 17. ポリシールーティングのルール作成 import json, requests data={ "policy": { "vyatta-policy-route:route": { "vyatta-policy-pbr:pbr": [ { "rule": [ { "action": "accept", "address-family": "ipv4", "destination": { "address": "1.2.3.4/32" }, "table": 11, "tagnode": 11 } ], "tagnode": "SRC-ROUTE-SLB" } ] } } } Mount="/yang-ext:mount/vyatta-policy:policy/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python pbr-rule-test.py 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順
  18. 18. PBRルーティングテーブルの作成 import json, requests data={ "protocols": { "vyatta-protocols-static:static": { "table": [ { "route": [ { "next-hop": [ { "tagnode": "192.168.11.33" } ], "tagnode": "0.0.0.0/0" } ], "tagnode": 11 } ] } } } Mount="/yang-ext:mount/vyatta-protocols:protocols/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python pbr-table-test.py 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順
  19. 19. PBRルールの適用 import json, requests data={ "vyatta-policy-pbr:policy": { "route": [ "SRC-ROUTE-SLB" ] } } Mount="/yang-ext:mount/vyatta-interfaces:interfaces/vyatta-interfaces-dataplane:dataplane/dp0p224p1/vyatta-policy-pbr:policy/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) $ python pbr-if-test.py 仮想ルーターへの設定投入項目
  20. 20. VPNaaS (VPN as a Service) サンプルコード
  21. 21. 100.64.64.64/24 (B)(A) 100.64.99.99/24 192.168.11.11/24192.168.22.22/24 10.2.2.0/2410.1.1.0/24 100.64.81.81/24
  22. 22. IKE/ESPプロファイルの作成(A) import json, requests data={ "security": { "vyatta-security-vpn-ipsec:vpn": { "ipsec": { "esp-group": [ { "lifetime": 1800, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "ESP" } ], "ike-group": [ { "lifetime": 3600, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "IKE" } ] } } } } Mount="/yang-ext:mount/vyatta-security:security/" vRouter="100.64.99.99" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount …(略)… 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順 <仮想ルーター(B)の場合>
  23. 23. IKE/ESPプロファイルの作成(B) import json, requests data={ "security": { "vyatta-security-vpn-ipsec:vpn": { "ipsec": { "esp-group": [ { "lifetime": 1800, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "ESP" } ], "ike-group": [ { "lifetime": 3600, "proposal": [ { "encryption": "aes256", "tagnode": 1 } ], "tagnode": "IKE" } ] } } } } Mount="/yang-ext:mount/vyatta-security:security/" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount …(略)… 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順 <仮想ルーター(A)の場合>
  24. 24. IPsecサイト間VPNルール作成(A) import json, requests data={ "vyatta-security-vpn-ipsec:site-to-site": { "peer": [ { "authentication": { "pre-shared-secret": "SeCrEt" }, "default-esp-group": "ESP", "ike-group": "IKE", "local-address": "192.168.11.11", "tagnode": "192.168.22.22", "tunnel": [ { "local": { "prefix": "10.1.1.0/24" }, "remote": { "prefix": "10.2.2.0/24" }, "tagnode": 0 } ] } ] } } Mount="/yang-ext:mount/vyatta-security:security/vyatta-security-vpn-ipsec:vpn/ipsec/site-to-site" vRouter="100.64.99.99" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順 <仮想ルーター(A)の場合>
  25. 25. IPsecサイト間VPNルール作成(B) import json, requests data={ "vyatta-security-vpn-ipsec:site-to-site": { "peer": [ { "authentication": { "pre-shared-secret": "SeCrEt" }, "default-esp-group": "ESP", "ike-group": "IKE", "local-address": "192.168.22.22", "tagnode": "192.168.11.11", "tunnel": [ { "local": { "prefix": "10.2.2.0/24" }, "remote": { "prefix": "10.1.1.0/24" }, "tagnode": 0 } ] } ] } } Mount="/yang-ext:mount/vyatta-security:security/vyatta-security-vpn-ipsec:vpn/ipsec/site-to-site" vRouter="100.64.64.64" Controller="http://100.64.81.81:8181/restconf/config/opendaylight-inventory:nodes/node/" url= Controller+ vRouter+ Mount username="admin" password="SeCrEt" headers = {'Content-type': 'application/json'} payload = json.dumps(data, ensure_ascii=False, separators=(',',':')) rp = requests.put(url, data=payload, auth=(username, password), headers=headers) 仮想ルーターへの設定投入項目 OpenDaylightベースコントローラーへの接続手順 <仮想ルーター(B)の場合>
  26. 26. まとめ サービス管理のために 動的なネットワーク構成変更が重要となる OpenDaylightを用いた 次世代ネットワーク構成管理は はじまったばかり 「今後もネットワーク仮想化技術の習熟が重要」
  27. 27. ご清聴誠にありがとうございました

×