सितंबर 2012 में, मैं
कंप्यूटर नेटवर्क के अनुप्रयुक्त अनुसंधान के लिए केंद्र के सॉफ़्टवेयर-कॉन्फ़िगर नेटवर्क पर एक
शरद ऋतु स्कूल में भाग लेने के लिए भाग्यशाली था। विशेष रूप से एसडीएन नेटवर्क और ओपनफ्लो के संस्थापकों और वैचारिक प्रेरकों में से एक निक मैककेन को मुख्य बात के लिए आमंत्रित किया गया था।
उपकरण पर कार्यशाला का आधार रूस में एक अज्ञात मॉडल का रिफ्लेश एनईसी स्विच था और कई सामान्य टीपी-लिंक 1043 राउटर के साथ पैच ओपनवार्ट (वास्तव में सिर्फ पुनर्निर्माण)। घर पर, एक समान मॉडल का एक राउटर खोजा गया था, जिस पर मैंने वास्तविक दुनिया में ओपनफ्लो को कार्रवाई करने का प्रयास करने का फैसला किया। लेकिन सबसे पहले खुद पतन स्कूल के बारे में।
2 प्रेरणा और सिद्धांत
व्याख्यान उसी प्रस्तुति चित्रों के साथ शुरू हुआ जो ओपनफ्लो परियोजना के स्टैनफोर्ड साइट पर उपलब्ध है। हालाँकि, निक द्वारा जोड़ा गया सिमेंटिक लोड सरल प्रस्तुति ग्राफिक्स को काफी हद तक स्पष्ट और पूरक करता है। फिर निक ने नई परियोजनाओं के बारे में बात की, विशेष रूप से एसडीएन के स्वत: सत्यापन के बारे में, तार्किक टोपोलॉजी में छल्ले की खोज, नियमों की प्रयोज्यता की जांच आदि।
व्याख्यान के दौरान समय-समय पर विराम हुआ, जिस पर छात्रों और स्नातक छात्रों ने निक पर प्रश्नों के साथ बमबारी की। निक के लिए बहुत सारे सवाल पूछना मुश्किल था, क्योंकि निक को संबंधित मुद्दों पर पूरी तरह से और बड़े पैमाने पर जवाब देना पसंद है। व्याख्यान के अंत में, मैंने उन प्रश्नों को दबाने के लिए कुछ उत्तर प्राप्त करने की कोशिश की, जो व्याख्यान के दौरान और दौरान दोनों में उठे थे। विशेष रूप से रुचि निक के सहयोगियों के वायरलेस प्रसारण और न्यूनतम देरी के साथ वीडियो प्रसारित करने के लिए एक्सेस पॉइंट्स के समानांतर सेटिंग के साथ
प्रयोग की व्याख्या थी, जहां एक लैपटॉप वाला व्यक्ति एक गोल्फ कार्ट पर स्टैनफोर्ड परिसर के चारों ओर चला जाता है और एक वेब कैमरा से वीडियो प्रसारित करता है। निक ने बताया कि OpenWlow (अब
पैकेज के रूप में उपलब्ध) के साथ बातचीत के लिए एक स्व-लिखित आवेदन के साथ OpenWRT वितरण एक्सेस पॉइंट्स पर फ्लैश किया गया था।
यहाँ इस विचार को इस प्रयोग को अपने दम पर लागू करने का प्रयास किया गया।
3 पहला अभ्यास
स्कूल का दूसरा दिन। हमने मिनिनेट वर्चुअल वातावरण (ओपनफ़्लो
ट्यूटोरियल ) की कोशिश की, जो वर्चुअल मेजबानों पर एक टोपोलॉजी सिम्युलेटर है। एक बाहरी OpenFlow नियंत्रक वर्चुअल नेटवर्क से जुड़ा है। यहीं से असली मजा शुरू हुआ।
POX नियंत्रक को अजगर में लिखा गया है, जो कई लोगों के लिए पहले से ही एक बड़ी समस्या बन चुका है। खैर, मेरे पास अजगर और इंटरनेट पर एक किताब थी (इससे पहले मैंने इस पर कुछ भी नहीं लिखा था, केवल php, perl, cpp, c #, आदि)। सबसे दिलचस्प बात यह है कि बिल्ली POX नियंत्रक पर प्रलेखन के लिए रोया, यहां तक कि कम उदाहरण भी हैं। पीओएक्स ऑब्जेक्ट मॉडल स्पष्ट रूप से छात्रों द्वारा अपने खाली समय में लिखा गया था। उदाहरण के लिए, src-MAC एड्रेस
packet_in.dl_src ऑब्जेक्ट की संपत्ति में निहित है, जो स्वयं
event.parse विधि का परिणाम है, और src-IP पता प्राप्त करने के लिए आपको प्रोटोकॉल के लिए एक भयानक तरीके से पैकेट प्रकार की जांच करने की आवश्यकता है (प्रकार की एक गुच्छा) और कुछ गुणों से विभिन्न गुणों को खींच रहा है। बायाँ ऑब्जेक्ट), पैकेट को अगले हैडर (
ip_hdr = packet_in.next ) पर रखें, और वहाँ से
ip_hdr.nw_src (network_ layer src) ऑब्जेक्ट प्राप्त करें। जैसा कि आप देख सकते हैं, POX और अनुप्रयोगों के इंटरैक्शन के लिए ऑब्जेक्ट मॉडल नेटवर्कर्स द्वारा नहीं लिखा गया था, लेकिन शुद्ध प्रोग्रामर द्वारा। विधियों, प्रोटोकॉल, वस्तुओं के गुणों के नाम में एकरूपता नहीं है, अजगर भाषा बहुत ही उदासीन है यदि आप अचानक एक वस्तु या संपत्ति के नाम पर गलती करते हैं - तो यह एक नया बना सकता है।
आगे और भी। प्रलेखन प्रकृति में स्पष्ट रूप से विकासात्मक है और अंतिम उपयोग के लिए अभिप्रेत नहीं है। वांछित गुणों और उदाहरणों के लिए POX स्रोत फ़ाइलों को खोदने के बाद सही निर्णय पाए गए थे, जो एक एकल मैनुअल के चारों ओर भटकने के बाद वांछित गुण और उदाहरण हैं। निष्पक्षता में, चैनल ईथरनेट स्तर के साथ काम करने और स्विच के लिए बुनियादी ओपनफ़्लो नियम भेजने के बारे में मैनुअल में काफी सहनीय उदाहरणों की उपस्थिति को ध्यान देने योग्य है। वैसे, काम के दौरान (लगभग 5 घंटे), पीओएक्स "केवल" 2 बार गिर गया। यह अजगर अनुप्रयोगों की विश्वसनीयता के बारे में एक सवाल है। जब उसके NOX माता-पिता (C ++ में लिखा गया) का परीक्षण किया गया तो यह नहीं देखा गया।
एक छोटा सा उदाहरण। चैनल स्विचिंग नियम (जो ईथरनेट स्विच व्यावहारिक रूप से नहीं कर सकता है) सेट करने के लिए कोड इस तरह दिखेगा:
fm = of.ofp_flow_mod() fm.match.in_port = 3 // . fm.actions.append(of.ofp_action_output(port = 4)) // , match
यहां स्पष्ट रूप से लिखा गया है - पोर्ट 3 पर गिरने वाली हर चीज 4 वें स्थान पर जाएगी। कोई विकल्प नहीं।
वास्तव में, यह ट्यूटोरियल एसडीएन और यह कैसे काम करता है, इसे समझने में सबसे अधिक मददगार है। दुर्भाग्य से कार्यालय में। ट्यूटोरियल साइट पर कोई चरण-दर-चरण उदाहरण नहीं हैं, उन्हें स्कूल के वक्ताओं द्वारा सफलतापूर्वक आवाज दी गई और आविष्कार किया गया, जिसके लिए उन्हें बहुत धन्यवाद। उनके बिना, ऐसा लगता है, आधे लोग बस समझ नहीं पाएंगे कि यह कैसे काम करता है।
4 उपकरण
तीसरा दिन असली लोहे को समर्पित था। एक नेक प्रोग्रामेबल फ़्लो स्विच को कई वीएलएएन में विभाजित किया गया, जिनमें से चार ओपनफ़्लो नियंत्रण के तहत थे, चार टीपी-लिंक 1043 राउटर, ओपनफ़्लो पैच के साथ ओफ़्ल्वर्ट के तहत चमकते थे, नियंत्रकों के साथ वर्चुअल होस्ट, 16 वर्चुअल होस्ट जिसके लिए नेटवर्क इकट्ठा किया गया था। सभी मेजबानों में दो नेटवर्क थे - एक हमें (बाहरी नेटवर्क, ssh के लिए) प्रबंधित करने के लिए, दूसरा ओपनफ्लो टेस्ट नेटवर्क के लिए। सभी को 4 समूहों में विभाजित किया गया था, टोपोलॉजी निम्नानुसार थी - प्रत्येक समूह के लिए 3 मेजबान वांछित वीएलएएन में स्विच से जुड़े हुए हैं, वायर्ड पोर्ट के लिए राउटर से चौथे (वैसे, वायरलेस पोर्ट नियंत्रक के दृष्टिकोण से दिखता है और साथ ही वायर्ड एक भी है)।
विस्तृत टोपोलॉजी (बिना पोर्ट नंबर और अन्य):

कई कार्य थे:
- वांछित पोर्ट (6633) और इंटरफ़ेस पर डिफ़ॉल्ट एप्लिकेशन (L2_learning) के साथ POX कंट्रोलर बढ़ाएं। कोई समस्या नहीं थी।
root@openflowtutorial:/home/openflow/pox
शिलालेख
INFO:openflow.of_01:[Con 1/1] Connected to 00-00-00-00-00-01
नियंत्रक के सफल कनेक्शन को इंगित करता है।
- परीक्षण (जोड़ीदार पिंग) करें। दुर्भाग्य से, iperf स्थापित नहीं था, इसलिए यह प्रदर्शन का परीक्षण करने में विफल रहा। पिंग्स ने अपेक्षित व्यवहार किया - लगभग 100-200 एमएस के प्रशिक्षण के दौरान, सामान्य मोड में 0.1-10 एमएस (आखिरकार, इसे आभासी मशीनों पर उठाया गया)।
- फ़्लोविज़र नेटवर्क वर्चुअलाइज़ेशन सिस्टम को भौतिक नेटवर्क से OpenFlow इंस्टेंस को बढ़ाएँ। सबसे पहले, सभी ने यह समझने की कोशिश की कि यह कैसे काम करता है। फ़्लोविज़र एक द्वि-दिशात्मक छद्म-NAT सर्वर (एड्रेस स्पूफिंग सर्वर) है, जो स्विच के दृष्टिकोण से एक पूर्ण-नियंत्रक है, और नियंत्रक के दृष्टिकोण से, यह एक स्विच है। कई स्विच फ़्लोविज़र से जुड़े हैं। इसमें एक फ़िल्टरिंग सिस्टम है, और स्विच से पैकेट केवल उस नियंत्रक पर जाते हैं जहां व्यवस्थापक कॉन्फ़िगर किया गया है। आप फ्लोविज़र से पोर्ट या संपूर्ण स्विच को ब्लॉक कर सकते हैं और वैकल्पिक तार्किक नेटवर्क संरचना का निर्माण कर सकते हैं।
प्रत्येक टीम ने पोर्ट 6633 पर अपने फ़्लोविज़ोर को उठाया, पूरे नेटवर्क को 4 खंडों में विभाजित किया, अपने खंड और पड़ोसी नियंत्रकों के लिंक स्थापित किए। नियंत्रकों ने अब एक अलग बंदरगाह (6634) पर शुरू किया और सभी स्विच को लोकलहोस्ट (नेटिलिस) के रूप में देखा।

फ़्लोविज़र एक अलग गीत है। इस परिसर का सॉफ्टवेयर कार्यान्वयन c ++, अजगर और जावा के एक राक्षसी मिश्रण पर बनाया गया है, और जावा का उपयोग कॉन्फ़िगरेशन के लिए किया जाता है। आप कमांड दर्ज करते हैं - पूरे जावा-मशीन उगता है, कॉन्फ़िगरेशन होता है और यह - जावा की अब आवश्यकता नहीं है। एक कमांड को दो सेकंड निष्पादित किया जाता है। लेकिन कई कमांड हैं, प्रत्येक कमांड को पासवर्ड दर्ज करने या पासवर्ड (स्पष्ट पाठ) के साथ फ़ाइल निर्दिष्ट करने की आवश्यकता होती है। सबसे पहले आपको स्लाइस बनाने की आवश्यकता है - एक विशिष्ट नियंत्रक को सौंपे गए नेटवर्क के तार्किक रूप से अलग किए गए हिस्से। फिर, प्रत्येक स्लाइस में, आपको स्लाइस में क्या होता है और क्या नहीं, इसके लिए फ़िल्टर नियम जोड़ने की आवश्यकता है। आप एक डिफ़ॉल्ट स्लाइस बना सकते हैं जहाँ सभी अवर्गीकृत ट्रैफ़िक जाएंगे।
5 हम घर पर करते हैं
Tplink 741 पाया गया। OpenWrt साइट का अध्ययन करते समय, यह पता चला कि OpenWrt मेरे लोहे के संशोधन (v2.1) पर स्थापित नहीं था। हालांकि, फॉर्म को काम करने के लिए कहा जाता है। हमने उबंटू को एक आभासी मशीन और पुस्तकालयों पर रखा है (हम ओपनरट वेबसाइट पर देखते हैं), हम स्रोत कोड डालते हैं
svn co svn://svn.openwrt.org/openwrt/branches/backfire
फिर अलग से OpenFlow कार्यक्षमता को एक पैकेज के रूप में भरें। एक छोटा विषयांतर - वेब के बिना आधार संस्करण को संकलित करने में 6 जीबी का समय लगा, इसलिए सावधान रहें।
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
फिर ओपनर पोर्ट फीड्स को अपडेट करना अत्यधिक उचित है। बैकफ़ायर निर्देशिका पर जाएं और
./scripts/feeds update -a ./scripts/feeds install -a make menuconfig
मेनू में, Atheros AR71xx, TP-Link WR741ND v1 (जैसा कि यह निकला, v1 काम करता है) का चयन करें, पैकेजों में kmod-tun (कर्नेल मॉड्यूल-> नेटवर्क समर्थन), tc और OpenFlow (नेटवर्क) का चयन करें। बचाओ, बाहर निकलो।

जैसा कि बाद में पता चला, आपको कर्नेल में क्यूओएस एचटीबी जोड़ने की जरूरत है, इसके बिना सब कुछ बहुत धीमा है।
make kernel_menuconfig
Hierarchical Token Bucket (HTB) (नेटवर्किंग सहायता-> नेटवर्किंग विकल्प-> QoS और / या गोलाबारी करना) सक्षम करें
विधानसभा सामान्य मेक के साथ होती है, इसमें लगभग एक घंटे और 6 जीबी स्थान होता है।
बिन / ar71xx फ़ोल्डर में, अन्य बातों के अलावा, फ़ाइल
ओपनर- ar71xx-tl-wr741nd-v1-squashfs-sysupgrad.bin होगा (इसमें -factory.bin भी है, यह शुरुआती ओपनरेटर फर्मवेयर के लिए है)
डिवाइस पर भरना सबसे अच्छा है जो पहले से ही कुछ फ्लैश किए गए ओपनर (उदाहरण के लिए v1) से स्केप (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'
हम नेटवर्क नियंत्रक शुरू करते हैं (मैंने पीओएक्स को सबसे सरल के रूप में लिया) -
root@openflowtutorial:/home/openflow/pox
सब कुछ जुड़ा हुआ है, आप इसका उपयोग कर सकते हैं। केवल एक चीज जो परेशान थी वह सॉकेट त्रुटि थी: टूटी हुई पाइप। नियंत्रक नियमित रूप से बंद होने लगा (इसके लिए वह और POX)।
पोस्ट लिखते समय क्या इस्तेमाल किया गया था
- कंप्यूटर नेटवर्क पर एप्लाइड रिसर्च के लिए केंद्र - पीकेएस स्कूल ही
- OpenFlow साइट - सब कुछ है, विकी और ट्यूटोरियल दोनों
- विकी ओपनर - इसके बिना कोई रास्ता नहीं