゜フトりェアで構成可胜なネットワヌクず家庭での実装に関する秋の孊校

2012幎9月、幞運なこずに、 コンピュヌタネットワヌクの応甚研究センタヌの゜フトりェア構成ネットワヌクに関する秋の孊校に参加したした。 SDNネットワヌク、特にOpenFlowの創蚭者およびむデオロギヌのむンスパむアの1人であるNick McKeonが䞻芁なものに招埅されたした。



機噚に関するワヌクショップの基瀎は、ロシアの未知のモデルのリフラッシュNECスむッチず、パッチが適甚されたOpenWrtを備えたいく぀かの通垞のtp-link 1043ルヌタヌ実際には再構築されたでした。 自宅で、同様のモデルのルヌタヌが発芋されたので、実䞖界で実際にOpenFlowを詊しおみるこずにしたした。 しかし、最初に秋の孊校自䜓に぀いお。



2むンスピレヌションず理論


講矩は、OpenFlowプロゞェクトのスタンフォヌドのサむトで利甚可胜な同じプレれンテヌションの写真から始たりたした。 ただし、Nickによっお远加されたセマンティックロヌドは、単玔なプレれンテヌショングラフィックスを実質的に明確にし、補足したした。 その埌、ニックは新しいプロゞェクト、特にSDNの自動怜蚌、論理トポロゞ内のリングの怜玢、ルヌルの適甚性の確認などに぀いお話したした。



講矩䞭に定期的に䌑憩が発生し、孊生ず倧孊院生がニックに質問を投げかけたした。 ニックは、関連する問題に觊れるために培底的か぀広範囲に答えるこずが奜きなので、ニックが倚くの質問をするこずは困難でした。 講矩の最埌に、講矩䞭および講矩䞭に生じた緊急の質問に察する回答を埗るこずも詊みたした。 特に興味深いのは、ラップトップを持った䞀人がゎルフカヌトでスタンフォヌド倧孊のキャンパスを走り回り、りェブカメラからビデオをブロヌドキャストするずいう、ワむダレスブロヌドキャストずアクセスポむントの䞊列蚭定を䜿ったビデオのブロヌドキャストを最小限に抑えた実隓です。 Nickは、OpenFlowず察話するための自己蚘述型アプリケヌション珟圚はパッケヌゞずしお入手可胜を備えたOpenWRTディストリビュヌションがアクセスポむントでフラッシュされたず説明したした。



ここで、この実隓を独自に実装しようずするアむデアが生たれたした。



3最初の緎習


孊校の2日目。 仮想ホスト䞊のトポロゞシミュレヌタヌであるMininet仮想環境 OpenFlowチュヌトリアル を詊したした。 倖郚OpenFlowコントロヌラヌが仮想ネットワヌクに接続されおいたす。 これが本圓の楜しみの始たりです。



POXコントロヌラヌはpythonで曞かれおおり、倚くの人にずっお既に倧きな問題になっおいたす。 たあ、私はpythonずむンタヌネットに関する本を持っおいたした以前は䜕も曞いおいたせんでした。php、perl、cpp、cなどだけです。 最も興味深いのは、猫がPOXコントロヌラヌに関するドキュメントを求めお叫んだこずです。さらに少ない䟋がありたす。 POXオブゞェクトモデルは、孊生が空き時間に䜜成したものです。 たずえば、src-MACアドレスはpacket.in.dl_srcオブゞェクトのプロパティにあり、それ自䜓はevent.parseメ゜ッドの結果であり、src-IPアドレスを取埗するには、プロトコルのパケットタむプをひどい方法でチェックする必芁がありたすタむプチェックの束ずいく぀かのプロパティ巊のオブゞェクト、次のヘッダヌ ip_hdr = packet_in.next にパケットを分割し 、そこからip_hdr.nw_srcnetwork_ layer srcオブゞェクトを取埗したす。 ご芧のずおり、POXずアプリケヌションの盞互䜜甚のオブゞェクトモデルは、ネットワヌク担圓者ではなく、玔粋なプログラマヌによっお䜜成されたした。 メ゜ッド、プロトコル、オブゞェクトのプロパティの名前に統䞀性はありたせん。オブゞェクトたたはプロパティの名前を突然間違えた堎合、Python蚀語はたったく無関心です。新しい蚀語を䜜成できたす。



さらにもっず。 このドキュメントは明らかに開発的な性質のものであり、最終甚途を意図したものではありたせん。 単䞀のマニュアルをあおもなくさたよった埌、目的のプロパティず䟋に぀いおPOX゜ヌスファむルを掘り䞋げるずきに、正しい決定が芋぀かりたした。 公平に蚀えば、チャネルむヌサネットレベルの操䜜ず基本的なOpenFlowルヌルのスむッチぞの送信に぀いお、マニュアルにかなり蚱容できる䟋があるこずに泚目する䟡倀がありたす。 ちなみに、䜜業䞭玄5時間に、POXは2回「わずか」萜ちたした。 これは、Pythonアプリケヌションの信頌性に関する質問です。 圌のNOX芪C ++で蚘述をテストするずき、これは芳察されたせんでした。



小さな䟋。 チャネルスむッチングルヌルを蚭定するためのコヌドむヌサネットスむッチでは実際にできないは、次のようになりたす。



fm = of.ofp_flow_mod() fm.match.in_port = 3 //     .     fm.actions.append(of.ofp_action_output(port = 4)) //   ,    match 
      
      







ここでは明確に蚘述されおいたす-ポヌト3に萜ちたものはすべお4番目になりたす。 オプションなし。



実際、このチュヌトリアルはSDNずその動䜜を理解する䞊で最も圹立ちたす。 残念ながらオフィスで。 チュヌトリアルサむトには段階的な䟋はありたせん。それらは孊校のスピヌカヌによっおうたく発声され、発明されたした。 それらがなければ、人々の半分は単にそれがどのように機胜するのか理解しおいないようです。



4機噚


3日目は本物の鉄に捧げられたした。 1぀のNec ProgrammableFlowスむッチは耇数のVLANに分割され、そのうち4぀はOpenFlowの制埡䞋にあり、4぀のTP-Link 1043ルヌタヌは、OpenWRTの䞋でOpenFlowパッチを適甚しおフラッシュされ、コントロヌラヌを備えた仮想ホスト、16の仮想ホストからネットワヌクが組み立おられたした。 すべおのホストには2぀のネットワヌクがありたした。1぀は私たちsshの堎合は倖郚ネットワヌクを管理し、もう1぀はopenflowテストネットワヌク甚です。 誰もが4぀のグルヌプに分けられ、トポロゞは次のずおりでした。各グルヌプでは、3぀のホストが目的のVLANのスむッチに接続され、4番目は有線ポヌトぞのルヌタヌに接続されおいたすずころで、無線ポヌトはコントロヌラヌず有線の芳点から芋おいたす。



詳现なトポロゞポヌト番号などを陀く







いく぀かのタスクがありたした。

  1. 目的のポヌト6633およびむンタヌフェむスでデフォルトアプリケヌションL2_learningを䜿甚しおPOXコントロヌラヌを䞊げたす。 問題はありたせんでした。



     root@openflowtutorial:/home/openflow/pox# ./pox.py forwarding.l2_learning POX 0.0.0 / Copyright 2011 James McCauley DEBUG:core:POX 0.0.0 going up... DEBUG:core:Running on CPython (2.7.1+/Apr 11 2011 18:05:24) DEBUG:forwarding.l3_learning:Up... INFO:core:POX 0.0.0 is up. DEBUG:openflow.of_01:Listening for connections on 0.0.0.0:6633 Ready. INFO:openflow.of_01:[Con 4/150867562545] Connected to 00-00-00-00-00-01
          
          







    碑文



    INFO:openflow.of_01:[Con 1/1] Connected to 00-00-00-00-00-01







    コントロヌラヌの接続が成功したこずを瀺したす。



  2. テストを実行したすペアワむズping。 残念ながら、iperfはむンストヌルされおいないため、パフォヌマンスのテストに倱敗したした。 pingは予想どおりに動䜜したした-トレヌニング䞭、通垞モヌド0.1〜10 msで玄100〜200ミリ秒結局、仮想マシンで発生したした。

  3. FlowVisorネットワヌク仮想化システムを䞊げお、物理ネットワヌクからOpenFlowむンスタンスを抜象化したす。 最初、誰もがそれがどのように機胜するかを理解しようずしたした。 FlowVisorは双方向疑䌌NATサヌバヌアドレススプヌフィングサヌバヌであり、スむッチの芳点からは本栌的なコントロヌラヌであり、コントロヌラヌの芳点からはスむッチです。 FlowVisorにはいく぀かのスむッチが接続されおいたす。 フィルタリングシステムがあり、スむッチからのパケットは管理者が蚭定したコントロヌラにのみ送られたす。 FlowVisorからポヌトたたはスむッチ党䜓をブロックしお、代替の論理ネットワヌク構造を構築できたす。

    各チヌムはポヌト6633でFlowVizorを䞊げ、ネットワヌク党䜓を4぀のセグメントに分割し、そのセグメントず隣接コントロヌラヌぞのリンクを蚭定したした。 コントロヌラは別のポヌト6634で起動し、すべおのスむッチをロヌカルホストnatilisずしお認識したした。



    画像





FlowVisorは別の曲です。 この耇合䜓の゜フトりェア実装は、c ++、python、javaの地獄の混合物で行われ、javaは構成に䜿甚されたす。 コマンドを入力したす-java-machine党䜓が立ち䞊がり、構成が行われ、それだけです-javaは必芁なくなりたした。 1぀のコマンドが2秒実行されたす。 しかし、倚くのコマンドがあり、各コマンドにはパスワヌドを入力するか、パスワヌドクリアテキストでファむルを指定する必芁がありたす。 たず、スラむスを䜜成する必芁がありたす。これは、特定のコントロヌラヌに割り圓おられたネットワヌクの論理的に分離された郚分です。 次に、各スラむスで、スラむスに含たれるものず含たれないものにフィルタヌルヌルを远加する必芁がありたす。 すべおの未分類のトラフィックが移動するデフォルトのスラむスを1぀䜜成できたす。



5家でやる


Tplink 741が芋぀かりたしたOpenWrtサむトを調べたずき、OpenWrtが私のリビゞョンv2.1にむンストヌルされおいないこずが刀明したした。 ただし、フォヌムは機胜するず蚀われおいたす。 Ubuntuを仮想マシンずラむブラリに配眮しopenwrt Webサむトを参照、゜ヌスコヌドを泚ぎたす



 svn co svn://svn.openwrt.org/openwrt/branches/backfire
      
      







次に、OpenFlow機胜をパッケヌゞずしお個別に入力したす。 小さな䜙談-基本バヌゞョンをWebなしでコンパむルするには6 GBかかったので、泚意しおください。



 cd backfire/package git clone git://gitosis.stanford.edu/openflow-openwrt
      
      







そしお、最も重芁なこずは、アヌキテクチャに適したブランチを遞択するこずです。 私のtplinkはAtheros 71xxです



 cd openflow-openwrt git checkout -b openflow-1.0/ar71 origin/openflow-1.0/tplink
      
      







その埌、openwrtポヌトフィヌドを曎新するこずを匷くお勧めしたす。 backfireディレクトリに移動し、



 ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig
      
      







メニュヌで、Atheros AR71xx、TP-Link WR741ND v1刀明したずおり、v1が動䜜するを遞択し、パッケヌゞでkmod-tunカヌネルモゞュヌル->ネットワヌクサポヌト、tcおよびOpenFlowネットワヌクを遞択したす。 保存しお終了したす。







埌で刀明したように、QoS HTBをカヌネルに远加する必芁がありたす。これがないず、すべおが非垞に遅くなりたす。



 make kernel_menuconfig
      
      







階局トヌクンバケットHTBを有効にしたすネットワヌクサポヌト->ネットワヌクオプション-> QoSおよび/たたは公平キュヌむング

アセンブリは通垞のmakeで行われ、玄1時間ず6 GBのスペヌスが必芁でした。



bin / ar71xxフォルダヌには、特にファむルopenwrt-ar71xx-tl-wr741nd-v1-squashfs-sysupgrade.binがありたす -factory.binもありたす。これは初期openwrtファヌムりェア甚です



デバむスぞの入力は、すでにフラッシュされたopenwrtv1などからscpssh cpを䜿甚しお行うのが最適です。 OpenWrtでsshを実行し、



 scp root@ip_:/__/openwrt-ar71xx-tl-wr741nd-v1-squashfs-sysupgrade.bin /tmp sysupgrade -v /tmp/openwrt-ar71xx-tl-wr741nd-v1-squashfs-sysupgrade.bin
      
      







奇劙なこずに、すべおが初めお機胜したした。



 ps aux | grep ofprotocol 976 root 1040 S ofprotocol tcp:127.0.0.1:6634 tcp:192.168.1.10:6633
      
      







OpenFlow自䜓のセットアップには少し時間がかかりたす



 cd /etc/config vi openflow config 'ofswitch' option 'dp' 'dp0' option 'ofports' 'eth0.0 eth0.1 eth0.2 eth0.3 ' option 'ofctl' 'tcp:192.168.1.102:6633' option 'mode' 'outband'
      
      







ネットワヌクコントロヌラヌを起動したすPOXを最も単玔なものずしお䜿甚したした-



 root@openflowtutorial:/home/openflow/pox# ./pox.py forwarding.l3_learning POX 0.0.0 / Copyright 2011 James McCauley DEBUG:core:POX 0.0.0 going up... DEBUG:core:Running on CPython (2.7.1+/Apr 11 2011 18:05:24) DEBUG:forwarding.l3_learning:Up... INFO:core:POX 0.0.0 is up. DEBUG:openflow.of_01:Listening for connections on 0.0.0.0:6633 DEBUG:openflow.of_01:[Con 1/None] Socket error: Broken pipe DEBUG:openflow.of_01:[Con 1/None] disconnecting Ready. INFO:openflow.of_01:[Con 4/150867562545] Connected to 00-23-20-68-50-31
      
      







すべおが接続されおいるので、䜿甚できたす。 気になったのは、゜ケット゚ラヌBroken pipeだけでした。 コントロヌラヌは定期的に脱萜し始めたしたそのため圌ずPOX。



投皿の䜜成時に䜿甚されたもの


  1. 応甚コンピュヌタヌネットワヌク研究センタヌ -PKSスクヌル自䜓
  2. OpenFlowサむト-Wikiずチュヌトリアルの䞡方がありたす
  3. Wiki openwrt-それなしには方法はありたせん



All Articles