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?
Спасибо