Mininet - нет интерфейса eth0 на виртуальной машине после моделирования сети

Я использую Mininet для симуляции сети, и все работает найти, пока я не покину свою сеть. Перед созданием моей сети у меня есть интерфейс eth0, когда я использую ifconfig. Когда моя сеть создана, мои хосты r0, h1, h2 и h3 имеют доступ к Интернету, но не я. Когда я выхожу из сети, у меня все еще нет доступа к Интернету, и eth0 больше не появляется, когда я использую ifconfig.

Я создаю сеть таким образом:

sudo python topo.py

А вот мое топо (содержание topo.py):

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel, info
from mininet.cli import CLI
from mininet.link import Intf

class Router( Node ):
    "A Node with IP forwarding enabled."

    def config( self, **params ):
        super( Router, self).config( **params )
        # Enable forwarding on the router
        self.cmd( 'sysctl net.ipv4.ip_forward=1' )
        self.cmd( 'iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE' )

        # Internet connectivity
        Intf( 'eth0', node=self )
        self.cmd( 'dhclient eth0' )

    def terminate( self ):
        self.cmd( 'sysctl net.ipv4.ip_forward=0' )

        super( Router, self ).terminate()


class NetworkTopo( Topo ):
    "A Router connecting three IP subnets"

    def build( self, **_opts ):

        defaultIP = '192.168.1.1/8' 
        router = self.addNode( 'r0', cls=Router, ip=defaultIP )

        s1, s2, s3 = [ self.addSwitch( s ) for s in 's1', 's2', 's3' ]

        self.addLink( s1, router, intfName2='r0-eth1',
                      params2={ 'ip' : defaultIP } )
        self.addLink( s2, router, intfName2='r0-eth2',
                      params2={ 'ip' : '172.16.0.1/12' } )
        self.addLink( s3, router, intfName2='r0-eth3',
                      params2={ 'ip' : '152.16.0.1/12' } )

        h1 = self.addHost( 'h1', ip='192.168.1.100/8',
                           defaultRoute='via 192.168.1.1' )
        h2 = self.addHost( 'h2', ip='172.16.0.100/12',
                           defaultRoute='via 172.16.0.1' )
        h3 = self.addHost( 'h3', ip='152.16.0.100/12',
                           defaultRoute='via 152.16.0.1' )

        for h, s in [ (h1, s1), (h2, s2), (h3, s3) ]:
            self.addLink( h, s )


def run():
    "Linux router"
    topo = NetworkTopo()
    net = Mininet( topo=topo )  

    net.start()
    CLI( net )
    net.stop()

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

Это очень неудобно, потому что мне нужно перезапустить виртуальную машину, чтобы снова иметь доступ к Интернету. Есть ли решение, которое я мог бы добавить в свой файл топологии? Или есть решение вернуть интерфейс eth0 после выхода из сети Mininet?

Спасибо

0 ответов

Другие вопросы по тегам