【问题标题】:(mininet) Configure multiple interfaces on a host(mininet) 在一台主机上配置多个接口
【发布时间】:2017-05-13 16:45:32
【问题描述】:

我有一个场景,其中有一台服务器机器有两个接口。这些接口中的每一个都有自己的 IP 地址。服务器机器托管一个 HTTP 服务器,它应该可以通过两个接口访问。

重现这种情况的完整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 并非如此。 当然,我也不能来自 h2 的wget

如何配置服务器接口,以便服务器通过这两个接口同时响应pingwget 命令?

服务器上的/etc/network/interfaces包含一些配置,但它是关于一个不存在的eth0接口,所以我假设它没有被使用。

注意:我已经了解到对于 linux,一个特定的 IP != 网络接口。服务器响应来自 h1 的 10.0.0.10 和 10.0.0.11 的 ping,但我希望它在两个物理接口上都响应。

【问题讨论】:

    标签: network-programming mininet network-interface


    【解决方案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()
    

    【讨论】:

    • 我对这个答案感到困惑,为什么主机和交换机比原来的问题多得多?
    【解决方案2】:

    我看到您正确配置了两个接口的 IP 地址,但没有以太网链路连接其他主机上的第二个接口,这就是该接口上没有连接的原因。为了正确配置它,您必须:

    1. 创建两个 intf 对象并为其分配特定的 IP 地址(10.0.0.10 和 10.0.0.11)
    2. 在交换机上连接这两个接口
    3. 在服务器主机上附加两个接口
    4. 设置拓扑的其他主机和/或交换机

    希望对解决问题有帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      相关资源
      最近更新 更多