はじめに
「openvswitchのインストールとかそういうのいいから参考になりそうなアプリ書けオルァ」的な圧力を感じます。
そこで、今回はVEPAとかそういう感じのアレを実装して、部分最適を考えたSDNアプリケーションの実装をしてみる。
「お前がSDNだと思うものがSDNだ」を胸に抱いて。
そんな私たちは2軍のファンタジスタであーる
あ、今BGMがGJ部なんで許してください。
前回使ったトポロジを大体そのまま流用することにする。
え、前回って これ でしょ?
…どんだけ時間経ってるんだ死ぬる。でもryuのバージョン以外は基本的に変化してないからまだまだ現役だもん!
- Router-01 : BSDRP 1.4 on VirtualBox
- node-01 : BSDRP 1.4 on VirtualBox
- node-02 : BSDRP 1.4 on VirtualBox
- ovs01 : Ubuntu-12.04.3 + openvswitch-2.0.0 on VirtualBox
- ryu : Ubuntu-12.04.3 + ryu-3.7 on VirtualBox
Ubuntu-12.04.3のインストールは PackerでVirtualBoxのUbuntuイメージを作る話 を参照。
GNS3でSerial画面を出すことを前提に作るから当然だね!やっほい!
これから作ろうとしているもの
通常は、ルータまで行ってVLANタグを外してルーティングしてVLANタグつけて同じポートから出てくる動作をする。(オレンジ色の線)
でも、これくらいの動作なら間のopenvswitchでも出来るよね?(青色の線)ってことです。
これは今は個別のノードに実装をばらしているけど、KVMのbr0にopenvswitchを使っている場合は、ホストの内部で折り返す機構を準備できて、さらに有利だ。と、思う。
設定するよー
はいはーい、周辺部分の設定しちゃいますよー。前回と大体一緒ですよー。
node-01
|
|
node-02
|
|
Router-01
|
|
ryu
前はryu-3.3だったのに、もうryu-3.7になっててビビる。
そしてlibxml2-devとlibxslt1-devが必要になったので、今後は要るよって話。
|
|
ovs01
|
|
ここまででまずは動作確認
node-01
まずはぶら下がってるnode同士。
|
|
RTTは大体40ms位ですね。はい。
ovs-01
|
|
はい、オッケーデース。 遅延の方もまぁ丁度いい感じですかね。
レッツ開発
ではー、ここにー、開発済みのソフトウェアがありまーす。
https://www.ainoniwa.net/gitlab/snippets/12
すーぱー適当な動作概要
- ARPフレームをPacket-In
- VLANの異なる通信をOpenflow Switchで折り返せる場合、VLANと宛先MACを書き換えるフローを注入する
今回の場合、VLAN間ルーティングのためにRouter-01まで到達しないといけない通信を、ovs-01で折り返すことを目的にしている。
動かしてみよう
ryu
|
|
ovs-01
|
|
残念ながらARPが飛ばないとL3ヘアピン用のフローが注入されないので、最初に消しておこう。
node-01
|
|
node-02
|
|
Router-01
|
|
ovs-01
初期状態のフロー
|
|
node-01
|
|
わーい、遅延が減ったよー。特に何もしてないからTTLすら64のままだよー。やったね!
ovs-01
L3ヘアピン用フロー注入後
|
|
現実のネットワークではもう少し多くのホストが存在する上に、通信途中でもARPが飛んだりするので、考慮すべき問題はいくつかあるものの、L3ヘアピン用のフローが注入されなかったとしても通信を阻害しないという点で、導入の敷居は低いと思う。
idle_timeoutは限界まで長くしておいても、実害は無いかもしれない。
おしまい
参考になるかは分からないけど、大体こんな程度の機能をこんな程度のコード量で書けそうです、と言う感じ。
今度はVXLANとかそういうものと組み合わせて、より大きめの試験環境を準備していく必要がありそうだよね。