2015年06月18日
さくらインターネット株式会社 / さくらインターネット研究所
上級研究員 松本直人
次世代ネットワーク技術の課題整理
サービス管理のために動的なネットワーク構成変更が重要となる
クラウド環境における課題整理
仮想サーバーやルーターなどを統一的に管理する手法が必要となる
OpenDaylightを用いた課題解決
既存設備と新規設備をシームレスにつないでいくスキルが必要となる
OpenDaylightベースコントローラーの導入手順
ODLコントローラーを導入する
必要なソフトウェアパッケージを事前用意しておく
例) Brocade SDN Controller @Ubuntu Server 1404 LTS (4 vCPU + 4GB DRAM + 16GB SSD)
仮想ルーターにNETCONFを設定する
NETCONF over SSH (port 830)を設定する
例) Brocade vRouter (5600) 3.2.1R6 (4 vCPU + 4G DRAM + 16GB SSD)
ネットワーク構成管理情報を登録する
ODLコントローラーを経由し仮想ルーターを構成管理する
例) Brocade SDN Controller へ Brocade vRouter(5600) 3.2.1R6 の構成情報をマウントする
ネットワーク構成管理情報を確認する
REST API経由で得られるネットワーク構成管理情報(JSON)を確認する
例) Brocade SDN Controller へ Brocade vRouter(5600) 3.2.1R6 の構成情報を取得する
OpenDaylightベースコントローラーの利用実験
FWaaS (Firewall as a Service)
サンプルコード
100.64.81.81/24
100.64.64.64/24
dp0p224p1
UDP135-137を破棄(drop)
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ベースコントローラー
←仮想ルーター
←設定投入するマウント項目
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
仮想ルーターへの設定投入項目
RaaS (Routing as a Service)
サンプルコード
100.64.64.64/24
192.168.11.33/24
Loopback
1.2.3.4/32
dp0p224p1
100.64.81.81/24
ポリシールーティングのルール作成
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ベースコントローラーへの接続手順
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ベースコントローラーへの接続手順
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
仮想ルーターへの設定投入項目
VPNaaS (VPN as a Service)
サンプルコード
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
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)の場合>
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)の場合>
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)の場合>
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)の場合>
まとめ
サービス管理のために
動的なネットワーク構成変更が重要となる
OpenDaylightを用いた
次世代ネットワーク構成管理は
はじまったばかり
「今後もネットワーク仮想化技術の習熟が重要」
ご清聴誠にありがとうございました

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