Floodlight實踐-通過域名標簽實現(xiàn)家庭網(wǎng)絡控制(1)

-寫在前面的廢話-

自從今年接觸到了SDN(軟件定義網(wǎng)絡)栋豫,就覺得進入了一個全新的領域缀程。畢設做的Floodlight(一種Openflow控制器)更是一度讓我覺得無從下手容诬,概念理解的不透徹相速,安裝中遇到奇奇怪怪的問題,第一次用ubuntu肛冶,幾乎等于沒有的中文資料街氢,完全在官網(wǎng)上看英語自學,著實讓我頭疼了好久睦袖。雖然出國有一些時日了珊肃,但是依然是習慣看中文的資料學習,這個習慣看來是有必要改改了,大多數(shù)時候官網(wǎng)上給出的例子都十分有代表性伦乔,是學習的好地方厉亏。由于英語理解能力一般以及部分術語難以理解等原因,在學習floodlight和sdn前期花了不少功夫评矩。最近剛剛看到一篇博文說總結項目也是取得進步的重要一環(huán)叶堆,于是回頭看看自己的代碼阱飘,真是不忍直視斥杜。雖說是第一次寫python代碼,代碼量也不大沥匈,但現(xiàn)在看起來真的是亂糟糟一片蔗喂,想修改都無從下手,正好借此寫博客總結的機會高帖,把代碼總結修改一下缰儿,順便學習一下github,把代碼push上去散址。第一次寫博客乖阵,第一次用markdown,第一次用github预麸,最難的大概就是從0到1的過程吧瞪浸,這應該也算是向著成為一個技術大牛的夢想上邁出了一步吧~如果文中有什么問題或疏漏,都歡迎指出討論吏祸。

先給出邏輯框架圖对蒲,然后每個模塊逐步介紹。

architecture

整個系統(tǒng)可以簡單的分為2個部分贡翘。左下角是虛擬網(wǎng)絡和floodlight控制器蹈矮,在虛線以內(nèi)的是域名管理服務器模塊。

普通的家庭路由器屏蔽網(wǎng)站一般是通過IP地址(說實話我也不知道現(xiàn)在的家用路由有什么高級功能)鸣驱,這樣一來管理員如果想屏蔽某一類網(wǎng)址就不得不輸入大量的IP地址泛鸟,即浪費時間也不方便修改。所以這個項目中提出了通過域名和域名的標簽(tags)來管理家庭網(wǎng)絡踊东。比如google和baidu的標簽都是“search engine”北滥,那么我們把相應的主機屏蔽掉“search engine”,就能屏蔽掉大部分的搜索引擎递胧,方便且容易修改碑韵。

我們用Mininet創(chuàng)建一個虛擬網(wǎng)絡來進行模擬實驗。當虛擬網(wǎng)絡中的某個主機想訪問某個域名時缎脾,它會首先發(fā)送一條DNS請求來獲取該域名的IP地址祝闻,當Openflow交換機收到了DNS請求時,便會發(fā)送一條Packet_in消息給floodlight控制器,在控制器里這個DNS請求將會被解析联喘,取出請求中的域名地址华蜒,然后發(fā)送給域名管理服務器。域名管理服務器會通過該域名的標簽來判斷該主機是否有權限訪問相應的域名豁遭,然后返回一個Permit/Deny響應給floodlight控制器叭喜,如果是Permit,則該DNS請求則正常轉發(fā)蓖谢;如果是Deny捂蕴,floodlight控制器會丟棄掉這條請求,該主機便無法訪問此域名闪幽。

首先介紹虛擬網(wǎng)絡和floodlight控制器部分啥辨。

環(huán)境:Ubuntu14.04.1;Mininet 2.2盯腌;Floodlight v1.2

Mininet 是輕量級的軟件定義網(wǎng)絡系統(tǒng)平臺溉知,同時提供了對 OpenFlow 協(xié)議的支持。通俗一點說就是腕够,Mininet可以創(chuàng)建虛擬主機虛擬交換機實現(xiàn)虛擬網(wǎng)絡级乍。

安裝教程鏈接在此

http://mininet.org/download/

Mininet網(wǎng)上的中文教程其實很多了,就不再贅述帚湘,聊一聊折騰了好久的問題玫荣。其實安裝Mininet時非常簡單的,git clone之后install.sh -a就行客们。但是不知道為什么在我的ubuntu上一直安裝失敗崇决。然后當我輸入Mininet創(chuàng)建網(wǎng)絡的指令的時候,他會提示

sudo mn

這時如果你按照提示通過apt-get安裝Mininet底挫,會默認安裝Mininet2.1版本(當時最新的版本是2.2恒傻,apt-get默認2.1),而我需要使用2.2的一些新功能(后面會提到)建邓,只用將安裝的指令改為install.sh -nfv就行盈厘,當初固執(zhí)的想-all,結果浪費了好多時間官边。

Mininet安裝好之后用sudo mn測試沸手,會自動創(chuàng)建一個包含兩個主機和一個交換機的虛擬網(wǎng)絡。接下來是安裝Floodlight控制器注簿,官網(wǎng)鏈接在此

https://floodlight.atlassian.net/wiki/display/floodlightcontroller/Installation+Guide#InstallationGuide-FloodlightMasterandAbove

Floodlight是一種Java的Openflow控制器契吉。SDN的核心理念之一便是控制模塊和數(shù)據(jù)模塊分開,Openflow控制器連在Openflow交換機上诡渴,交換機收到數(shù)據(jù)包后會發(fā)送Packet_in消息將數(shù)據(jù)包發(fā)送給Openflow控制器捐晶,經(jīng)過處理后發(fā)送Packet_out消息返回給交換機,然后交換機進行轉發(fā)。

Floodlight控制器安裝好后下一步便是將控制器連接到Openflow交換機上惑灵,即由Mniniet創(chuàng)建的虛擬交換機山上。首先,我們需要用一段簡單的python代碼實現(xiàn)想要的拓撲結構英支。

#!/usr/bin/python  
from mininet.topo import Topo  
from mininet.net import Mininet  
from mininet.node import RemoteController, Controller  
from mininet.cli import CLI  
from mininet.link import TCLink  
from mininet.log import setLogLevel  
  
class MyTopo(Topo):  
    def __init__(self):  
        Topo.__init__(self)  
        Host1 = self.addHost('Child_1', ip='10.0.0.1')  
        Host2 = self.addHost('Child_2', ip='10.0.0.2')  
        Host3 = self.addHost('Father', ip='10.0.0.3')  
        Host4 = self.addHost('Mother', ip='10.0.0.4')  
  
        switch1 = self.addSwitch('s1')    
   
        self.addLink(switch1, Host1)  
        self.addLink(switch1, Host2)  
        self.addLink(switch1, Host3)  
        self.addLink(switch1, Host4)  
  
topos = {'mytopo': (lambda: MyTopo())}  

在我們的拓撲圖中佩憾,創(chuàng)建了四個主機和一個交換機,并且四個主機都直接連在交換機上干花。接下來在eclipse中運行floodlight妄帘,這時的floodlight還是沒有任何功能的,可以看做一個正常的交換機把敢。運行后用下面的命令創(chuàng)建網(wǎng)絡拓撲并且連接floodlight到我們創(chuàng)建的虛擬交換機上寄摆。


sudo mn --custom MyTopo.py --topo mytopo --mac --nat --controller=remote,ip=127.0.0.1,port=6653

mn即創(chuàng)建拓撲谅辣;

--custom 使用自己定義的拓撲修赞;

--mac 使mac地址簡化;

--nat 使我們創(chuàng)建的網(wǎng)絡可以連接到Internet桑阶,如果沒有這條指令柏副,我們創(chuàng)建的網(wǎng)絡是沒有連接的外網(wǎng)的,也就是無法ping通Internet的蚣录,--nat只有在2.2及以上版本才有割择;

--controller 選擇虛擬網(wǎng)絡的控制,因為我的Mininet和floodlight都在一臺虛擬機上萎河,所以IP地址是本機地址荔泳,端口6653,可能有些老版的教程還是6633虐杯,這里要注意下玛歌,已經(jīng)統(tǒng)一改為6653端口了。

創(chuàng)建拓撲

如圖所示擎椰,我們的虛擬網(wǎng)絡搭建好了支子,在eclipse的控制臺中也能看到,已經(jīng)連接上交換機达舒。

但是依然高興的太早值朋,這時候使用Ping指令你會發(fā)現(xiàn),依然是Ping不通外網(wǎng)的巩搏。

Ping失敗

首先昨登,我們用xterm進入任意一個host,然后進入/etc/resolv.conf這個配置文件贯底,如圖所示丰辣。

resolv.conf
修改配置文件

按下i修改這個配置文件,如果發(fā)現(xiàn)在修改過程中鍵盤失靈,請先安裝vim糯俗。

將nameserver的ip地址改為8.8.8.8尿褪,這是Google提供的免費DNS服務器的IP地址,然后刪掉后面的localdomain得湘。接著按下esc杖玲,輸入:wq保存退出,然后exit退出xterm淘正,回到Mininet的命令行摆马,重新執(zhí)行Ping指令,我們會發(fā)現(xiàn)鸿吆,現(xiàn)在已經(jīng)可以Ping通了囤采。

Ping成功

關于剛才修改文件的內(nèi)容,第一行是默認的DNS服務器地址惩淳;第二行這個local domain我一直沒有找到相關的資料蕉毯,但是根據(jù)最后運行的結論我覺得,這個應該是本地緩存域名之類的思犁,因為在后面的實驗中代虾,當我用floodlight控制器丟棄主機發(fā)送的DNS請求后,比如請求域名為www.baidu.com激蹲,主機收不到DNS響應后棉磨,會發(fā)送一條新的DNS請求,這時的請求域名變成了www.baidu.com.localdomain学辱,如果刪除了localdomain那一行乘瓤,便不會有這條新的DNS請求。所以我猜測策泣,這個localdomain應該是存在交換機上的域名-IP緩存衙傀,主機在第一次請求失敗后,試圖從交換機的緩存中取得請求域名的IP地址着降。

OK了~Mininet和floodlight的配置結束差油,下一步便是在floodlight中實現(xiàn)功能了。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末任洞,一起剝皮案震驚了整個濱河市蓄喇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌交掏,老刑警劉巖妆偏,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異盅弛,居然都是意外死亡钱骂,警方通過查閱死者的電腦和手機叔锐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來见秽,“玉大人愉烙,你說我怎么就攤上這事〗馊。” “怎么了步责?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禀苦。 經(jīng)常有香客問我蔓肯,道長,這世上最難降的妖魔是什么振乏? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任蔗包,我火速辦了婚禮,結果婚禮上慧邮,老公的妹妹穿的比我還像新娘调限。我一直安慰自己,他們只是感情好赋咽,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布旧噪。 她就那樣靜靜地躺著,像睡著了一般脓匿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宦赠,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天陪毡,我揣著相機與錄音,去河邊找鬼勾扭。 笑死毡琉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的妙色。 我是一名探鬼主播桅滋,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼身辨!你這毒婦竟也來了丐谋?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤煌珊,失蹤者是張志新(化名)和其女友劉穎号俐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體定庵,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吏饿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年踪危,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猪落。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡贞远,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出笨忌,到底是詐尸還是另有隱情兴革,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布蜜唾,位于F島的核電站杂曲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏袁余。R本人自食惡果不足惜擎勘,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颖榜。 院中可真熱鬧棚饵,春花似錦、人聲如沸掩完。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽且蓬。三九已至欣硼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恶阴,已是汗流浹背诈胜。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冯事,地道東北人焦匈。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像昵仅,于是被迫代替她去往敵國和親缓熟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1摔笤、第八章 Samba服務器2够滑、第八章 NFS服務器3、第十章 Linux下DNS服務器配站點籍茧,域名解析概念命令:...
    哈熝少主閱讀 3,718評論 0 10
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理版述,服務發(fā)現(xiàn)踢代,斷路器悴务,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • DNS(Domain Name System遵堵,域名系統(tǒng))位隶,因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫,能...
    一直在努力hard閱讀 4,615評論 3 19
  • 人們總是一邊說著要開心快樂的祝福語,而同時又盡一切的可能陷入多愁善感母债。經(jīng)典的悲劇甚至從古代流傳到今天午磁,從某種意義上...
    2020號閱讀 986評論 21 40
  • 中國式眾籌的基本邏輯有哪些? 中國式眾籌的基本邏輯大致有以下幾個: 眾籌相對論毡们、長板理論迅皇、動車理論、三位一體衙熔、變外...
    robot_liu閱讀 304評論 0 0