SDN - OpenFlow n OpenFlowで経路切替 n n n OpenFlowでスイッチングハブを作ってみる 接続されていないホスト同士を接続させる Client1 と Client2 の疎通を確認してみる これ Client1 Client2 Client3 n もし時間が余ったら他の環境にいるVMともつないでみる n 時間が余った方は教えてください。 Okinawa Open Laboratory 1 今回利用するフローの解説 スイッチングハブはポート1から入ったパケットをポート2に ポート2から入ったパケットはポート1に流すように設定されます。 ポート1から入ったパケットはポート2へ # ovs-ofctl add-flow ‘br0’ priority= 101 in_port=1, actions=output:2 1 Internal1-host 2 3 Internal2-host ポート2から入ったパケットはポート1へ # ovs-ofctl add-flow ‘br0’ priority= 101 in_port=2, actions=output:1 Okinawa Open Laboratory 2 ip netns とは Linux Network Namespace を使うと 1 つの Linux ホストの中に仮想的なネットワー ク環境を複数作ることができます。 OpenStackでは内部で作成されるコンポーネントとしてNamespace(ns)が利用されま す。ここではルータとDHCPエージェント OpenvSwitch LinuxBridge br-ex Network NameSpace qrouter-xxx qdhcp-xxx br-int インスタンス Okinawa Open Laboratory 3 promiscとは プロミスキャスモードとは,ネットワークカード(NIC)の動作モードの一つで,同一 ネットワーク内を流れるすべてのパケットを受信して読み込むモードのこと 仮想マシン × プロミスキャスモードON 物理マシン プロミスキャスモードOFF プロミスキャスモードONにすることによって 仮想マシンは物理インターフェースを通って外に出ることができる Okinawa Open Laboratory 4 仮想ネットワーク作成 ファイアーウォールを無効に変更 “firewall_driver =“ の部分を記載通りに書き換える vi /etc/neutron/plugins/ml2/ml2_conf.ini [securitygroup] #firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver # コメントアウト firewall_driver = neutron.agent.firewall.NoopFirewallDriver # 追記 サービスの再起動 # service openvswitch-switch restart # service neutron-server restart # service neutron-plugin-openvswitch-agent restart # service neutron-dhcp-agent restart # service neutron-metadata-agent restart # service nova-compute restart ネットワークを追加で2つ作成(OpenStack構築編で作成したインスタンス、ネットワークも利用します。) # source ~/openstack-deploy/tools/credentials tenant --tenant handson # handsonテナントに切り替える # neutron net-create internal2 # neutron subnet-create internal2 --name internal2-subnet 192.168.10.0/24 --no-gateway \ --allocation_pool start=192.168.10.50,end=192.168.10.100 #inetnal1と同一セグメントにする # neutron net-create internal3 # neutron subnet-create internal3 --name internal3-subnet 192.168.100.0/24 Okinawa Open Laboratory 5 ブラウザからHorizonにログインをして確認 アドレスhttp://外部アクセス用IP/horizon 作成したネットワークの確認 左側メニューから プロジェクト -> ネットワークトポロジー internal2, internal3が 作成されたことが確認できます。 Okinawa Open Laboratory 6 今からやること スイッチングハブを作成し、 別々に作成されたinternal1, internal2にいるホスト同士を接続させます。 ※Internal3はスイッチングハブ での作業のために使用います。 internal3 スイッチングハブ用の インスタンスを作成 internal1 internal2 Internal2のネットワークおよび そこに接続されるホストinternal2-hostを作成 internal1-host Okinawa Open Laboratory internal2-host 7 仮想マシンの起動 作成したネットワークを確認 # neutron net-list インスタンス起動時に ネットワークIDを利用します #サンプル internal2-hostおよびスイッチングハブ用のインスタンスを起動 # nova boot --flavor m1.tiny --image cirros-0.3.4-x86_64 --nic net-id=internal2のネットワークID \ --security-group default internal-host2 # glance image-create --name "handson-ovs" --disk-format qcow2 --container-format bare \ --is-public True --progress < ~/handson-ovs.qcow2 #スイッチングハブ用インスタンスのために利用するVMイメージを登録 # nova boot --flavor 2 --image handson-ovs --nic net-id=internal1のネットワークID --nic \ net-id=internal2のネットワークID --nic net-id=internal3のネットワークID --security-group default handson-ovs # nova list (サーバの起動を確認します。) ここで起動するインスタンスが スイッチングハブの役割 Okinawa Open Laboratory 8 仮想マシンの起動確認(1) CLIからサーバの起動確認 # nova list #コマンドからサーバの起動を確認します。 #サンプル StatusがACTIVE、Power StateがRunning となっていることを確認 各サーバのIPアドレス 1. internal1-host: 192.168.10.___ 2. internal2-host: 192.168.10.___ 3. handson-ovs: 192.168.10.___, 192.168.10.___, 192.168.100.____ Okinawa Open Laboratory 9 仮想マシンの起動確認(2) Horizonから確認 左側メニューから ・ネットワークの状態確認 プロジェクト -> ネットワーク #作成したネットワークの確認 すべてアクティブになっている Okinawa Open Laboratory 10 仮想マシンの起動確認(3) Horizonから確認 左側メニューから ・インスタンスの状態確認をします。 プロジェクト -> インスタンス #作成したホストの確認 Okinawa Open Laboratory すべて稼働中/実行中になっている 11 仮想マシンの起動確認(4) Horizonから確認 インスタンス名をクリックし、ホスト起動後の状況を確認 Okinawa Open Laboratory 12 仮想マシンの起動確認(5) Horizonから確認 インスタンスの詳細 ・インスタンスの状態確認をします。 「ログ」タブを選択 ##ホストが起動するとログインプロンプトが表示されます。 ログインプロンプトが表示されていればOK Okinawa Open Laboratory 13 Network NameSpaceの確認 今回OpenStack上で起動させたサーバは外部アクセスすることができません。 そのため、各サーバにログインするためにはNameSpaceを利用する必要があります。 ホスト内に作成されたNameSpaceは以下のコマンドで確認し、各NameSpaceからサーバへのアクセスを行います。 # ip netns list ##サンプル DHCPエージェント用のNameSpaceの名前は以下の決まりがあります。 NameSpace名: dhcp-xxxxxx-xxxxxx-xxxx-xxxx-xxxxxxxxxxx OpenStack上で作成された仮想ネットワークID # neutron net-list ##サンプル internal1-netへのアクセスには “qdhcp-28a0c429-48b1-43e1-9ab1-4c6564b42a7a” を使うことになります。 Okinawa Open Laboratory 14 仮想マシン間の接続 Internal-host1にログイン # ip netns list ##qdhcp NameSpaceを確認 # ip netns exec internal1側のNameSpace ifconfig # ip netns exec internal1側のNameSpace ping internal-host1のIP # ip netns exec internal1側のNameSpace ssh internal-host1のIP -l cirros PASSWORD: Hostname:cirros/password:cubswin:) Internal-host1からinternal-host2に疎通確認 $ ping internal2-hostのIP internal1-hostとinternal2-hostは 疎通がとれません。 internal1 internal1-host Okinawa Open Laboratory × internal2 internal2-host 15 仮想スイッチングハブの作成 handson-ovsにログイン後、ブリッジの追加およびインターフェースをブリッジに追加 handson-ovsにログインします。 password:handson # ip netns list # ip netns exec internal3側のNameSpace ssh handson-ovsのinternal3側のipアドレス -l handson ##ここからはhandson-ovsの操作になります。 $ sudo -i # ifconfig # ovs-vsctl add-br br0 ##ブリッジの作成 # ovs-vsctl add-port br0 internal1側のインターフェース ##ブリッジにinternl1用のインターフェースを追加 # ovs-vsctl add-port br0 internal2側のインターフェース ##ブリッジにinternl2用のインターフェースを追加 # ovs-ofctl show br0 ##ブリッジに接続されているインターフェースの確認 ##サンプル ここではeth1,eth2が 追加された # ip link set up promisc on internal1側のインターフェース # ip link set up promisc on internal2側のインターフェース # ovs-ofctl del-flows br0 Okinawa Open Laboratory Check!! # ovs-ofctl dump-flows br0 ↑初期フローを確認してみる ##フローの削除 仮想スイッチングハブの作成 Intenal1-hostとinternal2-hostが接続するためのフロー投入 # ovs-ofctl dump-flows br0 ##フローが登録されていないことを確認 In_portとoutputには # ovs-ofctl add-flow 'br0' priority=101,in_port=1,actions=output:2 “ovsofctl show br0”で確認した ##ポート1に入ってきたパケットはすべてポート2に流す eth0,eth1のポート番号が入ります。 # ovs-ofctl add-flow 'br0' priority=101,in_port=2,actions=output:1 例:1(eth0)と記載された場合は「1」の箇所 ##ポート2に入ってきたパケットはすべてポート1に流す # ovs-ofctl dump-flows br0 ##上記2コマンドで投入したフローが登録されていることを確認 ##サンプル # exit $ exit Okinawa Open Laboratory sshでログインしたhandson-ovsから から抜けます 仮想マシン間の接続を再確認 Internal-host1にログイン # ip netns list ##qdhcp NameSpaceを確認 # ip netns exec internal1側のNameSpace ifconfig # ip netns exec internal1側のNameSpace ping internal1-hostのIP # ip netns exec internal1側のNameSpace ssh internal1-hostのIP -l cirros PASSWORD: cubswin:) Hostname:cirros/password:cubswin:) Internal-host1からinternal-host2に疎通確認 (フローを登録したことにより疎通が確認できます。) $ ping internal2-hostのIP スイッチングハブにフローを指定することにより internal1-hostとinternal2-hostが 疎通とれるようになりました! internal1 internal1-host Okinawa Open Laboratory internal2 internal2-host 18 お疲れさまでした ;p Openflow編完了です。 Okinawa Open Laboratory 19
© Copyright 2025 ExpyDoc