Skip to content

mao172/OpenVNet_on_AWS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 

Repository files navigation

OpenVNet

OpenVNetを取り巻く周辺

OpenFlow

OpenFlowとは、ソフトウエアによってネットワークの構成を行うための技術。 Software Definitions Network(SDN)の技術要素の1つである。 Open Network Foundationによって標準仕様の策定が行われている。

従来のネットワーク機器ではそれぞれの機器が個々に経路制御していたが、 OpenFlowでは経路制御機能を「OpenFlowコントローラ」として分離し、 OpenFlowの規格に準拠(OpenFlowプロトコルでコントローラと対話できる必要がある)した「OpenFlowスイッチ」群を一括管理することができる。

OpenFlowコントローラはソフトウエアで実装され、OpenFlowスイッチはハードウエア(ネットワーク機器)で実現されるが、 ソフトウエアで実装されたスイッチとして、Open vSwitchなどがある。

<参考>

Open vSwitch

OSSの仮想スイッチ。XenServer,KVM, VirtualBoxなどの仮想化プラットフォームでも使用されている。 VM(ゲストOS)のネットワークを構成するために使用されるため、ハイパーバイザーの横に位置することが多いが、 Linux OS上で単体で稼動させることも可能。 また、最近ではOpenFlowに対応したハードウエア(ネットワーク機器)に搭載されていることもある。

Redis

Key-Valueストア(KVS)を構築することができるソフトウェアの一つ

GRE (Generic Routing Encapsulation)

AWS環境を使う

ソース/宛先チェックの無効化

EC2のインスタンスを選択し、[アクション]-[ネットワーキング]-[送信元/送信先の変更チェック]を選択する。

AWS のVPC(EC2インスタンス)にENIを追加する

  1. EC2の「ネットワークインタフェース」から「ネットワークインタフェースの作成」をする
  • 既に割りあたっているeth0 と同じサブネットを選択する
  • セキュリティグループは作成済みの中から適切なものを選択
  1. 作成したeniの設定
  • [アクション]-[ネットワーキング]-[送信元/送信先の変更チェック]を選択し、送信元/送信先チェックを無効にする
  1. 作成されたeniを選択し、「アタッチ」する
  2. アタッチ先のEC2インスタンスにSSHログイン
  • eth1が追加されていることを確認
$ ifconfig -a
  • eth1の設定を追加し、upする
$ cat > /etc/sysconfig/network-scripts/ifcfg-eth1 <<EOF
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
DEFROUTE=no
EOF

ifup eth1

<<参考>>

セキュリティグループの設定

  • PINGで疎通確認を行うため、ICMPを許可しておく。
  • GRE プロトコルの47を許可しておく。

インバウンド

  • カスタムプロトコル: 47 : すべて
  • SSH : TCP : 22
  • すべてのICMP : すべて : 該当なし

参考

OpenVNetの構成要素

  • vna
  • vnmgr
  • webapi

OpenVNet のセットアップ

参考

セットアップ手順

インストールガイドに従い、以下の順にコマンドを実行していく

$ curl -o /etc/yum.repos.d/openvnet.repo -R https://raw.githubusercontent.com/axsh/openvnet/master/deployment/yum_repositories/stable/openvnet.repo
$ curl -o /etc/yum.repos.d/openvnet-third-party.repo -R https://raw.githubusercontent.com/axsh/openvnet/master/deployment/yum_repositories/stable/openvnet-third-party.repo
$ yum install -y epel-release
$ yum install -y openvnet

Open vSwitchを使って仮想ブリッジを作成する

inetary=($(ifconfig eth1 | grep 'inet addr'))

ipaddress=$(echo ${inetary[1]} | awk -F '[: ]' '{print $2}')
netmask=$(echo ${inetary[3]} | awk -F '[: ]' '{print $2}')

infoary=($(ifconfig eth1 | grep 'HWaddr'))
macaddress=${infoary[4]}

cat > /etc/sysconfig/network-scripts/ifcfg-eth1 <<EOF
DEVICE=eth1
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br0
BOOTPROTO=none
ONBOOT=yes
HOTPLUG=no
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
DEVICE=br0
DEVICETYPE=ovs
TYPE=OVSBridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=${ipaddress}
NETMASK=${netmask}
HOTPLUG=no
OVS_EXTRA="
 set bridge     \${DEVICE} protocols=OpenFlow10,OpenFlow12,OpenFlow13 --
 set bridge     \${DEVICE} other_config:disable-in-band=true --
 set bridge     \${DEVICE} other-config:datapath-id=0000$(echo ${macaddress} | tr -d ':') --
 set bridge     \${DEVICE} other-config:hwaddr=${macaddress} --
 set-fail-mode  \${DEVICE} standalone --
 set-controller \${DEVICE} tcp:127.0.0.1:6633
"
EOF

service openvswitch start
ifup br0 eth1

service network restart

OVSを使ったネットワーク構成

下図のように構成する。 OVSを使ったネットワーク構成

sv1,sv2側のGRETapを作成するシェルスクリプト

#! /bin/sh
# Usage:
#  create_gretap NAME REMOTE_ADDR LOCAL_ADDR VIRTUAL_ADDR

name=${1}
remote_addr=${2}
local_addr=${3}
virtual_addr=${4}

ip link add ${name} type gretap remote ${remote_addr} local ${local_addr}
ip addr add ${virtual_addr} dev ${name}
ip link set ${name} up
ip link set ${name} mtu 1450

ifconfig ${name}

sv1,sv2にログインして実行する。

sv0にログインし、OVS側のGREポートをovs-vsctlコマンドを使用して作成する

$ ovs-vsctl add-port br0 ${name} -- \
    set interface ${name} \
    type=gre \
    options:local=${local_addr} \
    options:remote_ip=${remote_addr} \
    options:pmtud=true

Redisの設定と起動

$ sed -i -E 's/bind [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/bind 0.0.0.0/g' /etc/redis.conf
$ service redis start

Databaseのセットアップ

# Launch mysql server.
service mysqld start

# To automatically launch the mysql server at boot, execute the following command.
chkconfig mysqld on

# Set PATH environment variable as following since the OpenVNet uses its own ruby binary.
PATH=/opt/axsh/openvnet/ruby/bin:${PATH}

# Create database
cd /opt/axsh/openvnet/vnet
bundle exec rake db:create
bundle exec rake db:init

OpenVNetの設定

# Start vnmgr and webapi.
initctl start vnet-vnmgr
initctl start vnet-webapi

# Datapath

datapath_id=$(echo $(cat /etc/sysconfig/network-scripts/ifcfg-br0 | grep datapath-id= | awk -F '[:=-]' '{print $5}'))

name=${1}
node_id=${2}
network_addr=${3}

if [ "${name}" == "" ]; then
  name="test1"
fi

if [ "${node_id}" == "" ]; then
  node_id="vna"
fi

if [ "${network_addr}" == "" ]; then
  network_addr="10.0.0.0"
fi

vnctl datapaths add --uuid dp-${name} --display-name ${name} --dpid ${datapath_id} --node-id ${node_id}


# Network

vnctl networks add --uuid nw-${name} --display-name ${name}-net --ipv4-network ${network_addr} --ipv4-prefix 24 --network-mode virtual


# Interface
#

vnctl interfaces add --uuid if-inst1 \
    --mode vif --owner-datapath-uuid dp-${name} \
    --mac-address EE:99:D5:67:FD:52 \
    --network-uuid nw-${name} \
    --ipv4-address 10.0.0.1 \
    --port-name tap1
vnctl interfaces add --uuid if-inst2 \
    --mode vif --owner-datapath-uuid dp-${name} \
    --mac-address 2A:27:6E:63:5E:E5 \
    --network-uuid nw-${name} \
    --ipv4-address 10.0.0.2 \
    --port-name tap2

サービスの起動

initctl start vnet-vnmgr
initctl start vnet-webapi
initctl start vnet-vna
  • これだとeth1にきたGREのパケットがdropされてしまい、疎通が取れなくなる。

    • => br0 にIPを振らない、eth1をつながない
    • => eth1をGRE専用にする(いったん)
  • P2Vどうしよう・・・

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages