Mininet互通(mininet內(nèi)主機(jī)跨宿主機(jī)通信、mininet與真機(jī)通信、mininet內(nèi)主機(jī)訪問(wèn)外網(wǎng))怎么實(shí)現(xiàn)?

圖中的ens33、ens37均是網(wǎng)卡,此處的互通指的是ubuntu_1、ubuntu_2、mininet_1內(nèi)的主機(jī)、mininet_2內(nèi)的主機(jī)全部都可以互相通信。

借助的原理就是mininet內(nèi)的出口OVS(Open vSwitch)占用宿主機(jī)ubuntu主機(jī)網(wǎng)卡,從而達(dá)到mininet內(nèi)虛擬主機(jī)ubuntu宿主機(jī)在網(wǎng)絡(luò)中同等地位的目的,占用網(wǎng)卡后的網(wǎng)絡(luò)拓?fù)淇梢赃@么理解。

1 實(shí)驗(yàn)環(huán)境

  • Ubuntu 18.04

  • mininet 2.3.0

  • python 2.7.17

2 實(shí)驗(yàn)步驟

實(shí)驗(yàn)采用真機(jī)方式實(shí)現(xiàn),每臺(tái)宿主機(jī)Ubuntu都有兩個(gè)網(wǎng)口。兩個(gè)網(wǎng)卡具體是有線無(wú)線的都行,我這里是一個(gè)RJ45真實(shí)網(wǎng)口,一個(gè)USB免驅(qū)無(wú)線網(wǎng)卡。兩臺(tái)主機(jī)的真實(shí)網(wǎng)卡插路由器LAN口,無(wú)線網(wǎng)卡連接路由器的WiFi。這樣四個(gè)網(wǎng)卡相當(dāng)于是在同一局域網(wǎng)環(huán)境下。

如果想用虛擬機(jī)做實(shí)驗(yàn)的話,就將虛擬機(jī)橋接主機(jī),再將USB無(wú)線網(wǎng)卡給虛擬機(jī)。主機(jī)和無(wú)線網(wǎng)卡都連接手機(jī)熱點(diǎn)。

ifconfig一下,一般能看到倆網(wǎng)卡。比如一個(gè)是ens33,一個(gè)是ens38

方案是將每臺(tái)主機(jī)的ens33網(wǎng)卡分配給Mininet OVS。兩臺(tái)主機(jī)操作一致。都是

2.1 釋放那個(gè)網(wǎng)卡

sudo ifconfig ens33 0.0.0.0

2.2 將下面的python程序保存為topo.py

注意,os.popen('ovs-vsctl add-port s1 ens33')這個(gè)里面的ens33需要改成你需要讓mininet占用的網(wǎng)卡名稱(chēng)。

#!/usr/bin/env python
import os
from mininet.net import Mininet
from mininet.node import Controller, RemoteController
from mininet.cli import CLI
from mininet.link import Intf
from mininet.log import setLogLevel, info

def ToRealnet():

 net = Mininet( topo=None, build=False)

 info( '*** Adding controller\n' )
 net.addController(name='m1')

 info( '*** Add switches\n')
 s1 = net.addSwitch('s1')

 info( '*** Add hosts\n')
 h1 = net.addHost('h1', ip='0.0.0.0')   # ubuntu_2這里是h3
 h2 = net.addHost('h2', ip='0.0.0.0')   # ubuntu_2這里是h4

 info( '*** Add links\n')
 net.addLink(h1, s1)
 net.addLink(h2, s1)

 info( '*** Starting network\n')
 net.start()
 os.popen('ovs-vsctl add-port s1 ens33')
 h1.cmdPrint('dhclient '+h1.defaultIntf().name)
 h2.cmdPrint('dhclient '+h2.defaultIntf().name)
 CLI(net)
 net.stop()

if __name__ == '__main__':
 setLogLevel( 'info' )
 ToRealnet()

2.3 執(zhí)行程序

sudo python topo.py

然后就可以看到h1和h2都通過(guò)dhcp方式擁有了自己的IP

2.4 檢驗(yàn)

最后在另一臺(tái)主機(jī)上也執(zhí)行相同的操作。兩臺(tái)主機(jī)上的h1、h2、h3、h4,宿主機(jī)ubuntu_1、ubuntu_2,就都可以互通ping了

3 結(jié)束語(yǔ)

結(jié)束mininet后,記得清理虛擬主機(jī)

sudo mn -c

清理之后,發(fā)現(xiàn)占用的網(wǎng)卡還是不能正常工作,可以斷開(kāi)在重新連接,不行重啟絕對(duì)行。

3.1 如果宿主機(jī)無(wú)互聯(lián)需求

這種情況只需要一個(gè)網(wǎng)卡給mininet用,也可以做到兩臺(tái)機(jī)器里面的mininet主機(jī)互通。但是當(dāng)mininet占用了唯一的網(wǎng)卡之后,宿主機(jī)將沒(méi)法連接外界了。

3.2 如果只想要mininet里面的主機(jī)可以上外網(wǎng)

這種情況可以直接采用NAT解決

sudo mn --nat

不占用主機(jī)網(wǎng)卡,建立好后可以直接ping外網(wǎng),但是外界主機(jī)訪問(wèn)不了mininet內(nèi)的h1、h2(??不能說(shuō)絕對(duì)訪問(wèn)不了,至少麻煩點(diǎn))。沒(méi)法直接 ping www.baidu.com是因?yàn)橹鳈C(jī)沒(méi)配置DNS。

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容