2016-12-29 128 views
1

我有一種情況,其中有一臺服務器機兩個接口上配置多個接口。每個接口都有自己的IP地址。服務器機器託管一個HTTP服務器,它應該可以通過這兩個接口訪問。(mininet的主機)

完全python腳本重現這種情況:

from mininet.cli import CLI 
from mininet.log import setLogLevel 
from mininet.net import Mininet 
from mininet.topo import Topo 

class TestTopology(Topo): 
    def __init__(self): 
     Topo.__init__(self) 
     host1_id = self.addHost('h1') 
     host2_id = self.addHost('h2') 
     server_id = self.addHost('server') 
     self.addLink(server_id, host1_id) 
     self.addLink(server_id, host2_id) 

def configure_network(network): 
    server = network.get('server') 
    server.setIP('10.0.0.10', intf='server-eth0') 
    server.setMAC('00:00:00:00:00:10', intf='server-eth0') 
    server.setIP('10.0.0.11', intf='server-eth1') 
    server.setMAC('00:00:00:00:00:11', intf='server-eth1') 
    server.cmd("python -m SimpleHTTPServer 8080 &") 

# Run 'sudo python *path_to_this_script*' in mininet VM. 
if __name__ == '__main__': 
    setLogLevel('info') 
    net = Mininet(topo=TestTopology()) 
    configure_network(net) 
    net.pingAll() 
    CLI(net) 

的SimpleHTTPServer正在偵聽0.0.0.0爲默認值。

的「pingAll」測試表明,該服務器是H1(反之亦然)訪問,但它不是爲H2的情況。 當然,我不能wget從H2兩種。

如何配置服務器接口,以便服務器通過這兩個接口同時響應pingwget命令?

/etc/network/interfaces在服務器上包含一些配置,但它是關於一個不存在的eth0接口,所以我認爲它沒有被使用。

注:我已經瞭解到,對於Linux,特別是IP =網絡接口!服務器從h1響應ping到10.0.0.10和10.0.0.11,但我希望它在兩個物理接口上都響應。

回答

0

我看到你配置正確這兩個接口的IP地址,但有連接其它主機上的第二界面上沒有以太網鏈路,這就是爲什麼有這麼接口上沒有連接。爲了正確配置它,你必須:

  1. 創建兩個INTF對象,並指定其特定的IP地址(10.0.0.10和10.0.0.11)
  2. 這兩個接口連接一個開關
  3. 連接上都服務器主機
  4. 在接口設置其他主機和/或拓撲的開關

我希望這有助於解決這個問題...

1

你可以嘗試導入自定義mininet.util

在我的情況,重新排序的代碼工作。

這裏是我的代碼:

#!/usr/bin/python 

from mininet.net import Mininet 
from mininet.node import Controller, RemoteController, OVSController 
from mininet.node import CPULimitedHost, Host, Node 
from mininet.node import OVSKernelSwitch, UserSwitch 
from mininet.node import IVSSwitch 
from mininet.cli import CLI 
from mininet.log import setLogLevel, info 
from mininet.link import TCLink, Intf, Link 
from mininet.util import makeNumeric, custom 
from subprocess import call 

def myNetwork(): 
    link = custom(TCLink, bw=10) 
    net = Mininet(topo=None, 
        build=False, 
        ipBase='10.0.0.0/8') 

    info('*** Adding controller\n') 
    info('*** Add switches\n') 



    s5 = net.addSwitch('s5', cls=OVSKernelSwitch, failMode='standalone') 
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch, failMode='standalone') 
    s7 = net.addSwitch('s7', cls=OVSKernelSwitch, failMode='standalone') 
    s4 = net.addSwitch('s4', cls=OVSKernelSwitch, failMode='standalone') 

    r8 = net.addHost('r8', cls=Node, ip='0.0.0.0') 
    r8.cmd('sysctl -w net.ipv4.ip_forward=1') 
    r9 = net.addHost('r9', cls=Node, ip='0.0.0.0') 
    r9.cmd('sysctl -w net.ipv4.ip_forward=1') 
    r10 = net.addHost('r10', cls=Node, ip='0.0.0.0') 
    r10.cmd('sysctl -w net.ipv4.ip_forward=1') 

    info('*** Add hosts\n') 
    h1 = net.addHost('h1', cls=Host, ip='192.168.2.1', defaultRoute=None) 
    h2 = net.addHost('h2', cls=Host, ip='192.168.3.1', defaultRoute=None) 

    info('*** Add links\n') 
    net.addLink(s2, r9) 
    net.addLink(s4, r10) 
    net.addLink(r9, s5) 
    net.addLink(s7, r8) 
    net.addLink(r8, h2) 
    net.addLink(s5, h2) 
    net.addLink(s2, h1) 
    net.addLink(s4, h1) 
    net.addLink(r10, s7) 

    info('*** Starting network\n') 
    net.build() 
    info('*** Starting controllers\n') 
    for controller in net.controllers: 
     controller.start() 

    info('*** Starting switches\n') 
    net.get('s5').start([]) 
    net.get('s2').start([]) 
    net.get('s7').start([]) 
    net.get('s4').start([]) 

    info('*** Post configure switches and hosts\n') 

    CLI(net) 
    net.stop() 

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