python - Mininet WiFi:站点可以 ping AP,但反之则不行
问题描述
我使用 Virtual Box,并且安装了 Ubuntu 18.04.5。我已经安装了 mininet Wi-fi 并运行了一个 python 3 程序。拓扑看起来像这个拓扑。所有主机都可以相互 ping 通并且它们可以访问 Internet,但是站点不能相互 ping 通并且它们没有 Internet 连接。所有站点都以无线方式连接到 AP,并且所有站点都可以 ping 连接到 AP 的交换机。我没有看到代码有任何问题。链接
#!/usr/bin/python
import sys
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
from mininet.nodelib import NAT
from mininet.node import RemoteController
def topology():
"Create a network."
net = Mininet_wifi()
info("*** Creating nodes\n")
sta_arg = dict()
ap_arg = dict()
s0 = net.addSwitch('s0')
ap1 = net.addAccessPoint('ap1', ssid='ssid_ap1', mode='a', channel='36',
position='10,30,0', range='20')
ap3 = net.addAccessPoint('ap3', ssid="ssid_ap3", mode="g", channel="10",
position='50,30,0', range='20')
sta1 = net.addStation('sta1', mac='AA:BB:BB:BB:BB:01',
defaultRoute='via 192.168.0.224',
ip='192.168.0.11/240',
position='10,40,0')
sta2 = net.addStation('sta2', mac='AA:BB:BB:BB:BB:02',
defaultRoute='via 192.168.0.224',
ip='192.168.0.12/24',
position='15,30,0')
sta3 = net.addStation('sta3', mac='AA:BB:BB:BB:BB:03',
defaultRoute='via 192.168.0.224',
ip='192.168.0.13/24',
position='15,35,0')
sta4 = net.addStation('sta4', mac='AA:BB:BB:BB:BB:11',
defaultRoute='via 10.0.0.22',
ip='10.0.0.1/24',
position='50,20,0')
sta5 = net.addStation('sta5', mac='AA:BB:BB:BB:BB:12',
defaultRoute='via 10.0.0.22',
ip='10.0.0.22/24',
position='55,15,0')
sta6 = net.addStation('sta6', mac='AA:BB:BB:BB:BB:13',
defaultRoute='via 10.0.0.22',
ip='10.0.0.3/24',
position='45,125,0')
h1 = net.addHost('h1', ip='192.168.0.1', mac='AA:AA:AA:AA:AA:01',
defaultRoute='via 192.168.0.224')
h2 = net.addHost('h2', ip='192.168.0.2', mac='AA:AA:AA:AA:AA:02',
defaultRoute='via 192.168.0.224')
h3 = net.addHost('h3', ip='192.168.0.3', mac='AA:AA:AA:AA:AA:03',
defaultRoute='via 192.168.0.224')
h4 = net.addHost('h4', ip='192.168.0.4', mac='AA:AA:AA:AA:AA:04',
defaultRoute='via 192.168.0.224')
h5 = net.addHost('h5', ip='192.168.0.5', mac='AA:AA:AA:AA:AA:05',
defaultRoute='via 192.168.0.224')
h6 = net.addHost('h6', ip='192.168.0.6', mac='AA:AA:AA:AA:AA:06',
defaultRoute='via 192.168.0.224')
c1 = net.addController('c1', controller=RemoteController, ip='0.0.0.0',
protocol='tcp',port=6633)
##################### Link devices to Switch ######################
net.addLink(ap1, s0)
net.addLink(h1, s0)
net.addLink(h2, s0)
net.addLink(h3, s0)
net.addLink(h4, s0)
net.addLink(h5, s0)
net.addLink(h6, s0)
info("*** Configuring wifi nodes\n")
net.configureWifiNodes()
################ Wireless AP Interface ##########################
print ("*** Adding Link")
net.addLink(sta1, ap1, bw=10, loss=5)
net.addLink(sta2, ap1, bw=10, loss=5)
net.addLink(sta3, ap1, bw=10, loss=5)
##################### NAT1 Interface ##########################
net.addLink(sta4, ap3, bw=10, delay=5, loss=5)
net.addLink(sta5, ap3, bw=10, loss=5)
net.addLink(sta6, ap3, bw=10, loss=5)
###################### Create NAT for Internet ####################
nat = net.addHost( 'nat', cls=NAT, ip='192.168.0.224',
mac='AA:AA:AA:AA:AA:AA',
subnet='192.168.0.0/24', inNamespace=False)
net.addLink(nat, s0)
########################### Create RAP ########################
nat1=net.addHost('nat1', cls=NAT, ip='192.168.0.22',
mac='AA:CC:CC:CC:CC:CC',
subnet='10.0.0.0/24', inNameSpace=False,
inetIntf='nat1-eth0', localIntf='nat1-eth1',
defaultRoute='via 192.168.0.224')
net.addLink(nat1,s0)
net.addLink(ap3, nat1)
######################## Add RAP Interface ########################
nat1.setIP('10.0.0.22/8', intf='nat1-eth1')
info("*** Starting network\n")
net.build()
ap1.start([c1])
if '-v' not in sys.argv:
ap1.cmd('ovs-ofctl add-flow ap1 "priority=0,arp,in_port=1,'
'actions=output:in_port,normal"')
ap1.cmd('ovs-ofctl add-flow ap1 "priority=0,icmp,in_port=1,'
'actions=output:in_port,normal"')
ap1.cmd('ovs-ofctl add-flow ap1 "priority=0,udp,in_port=1,'
'actions=output:in_port,normal"')
ap1.cmd('ovs-ofctl add-flow ap1 "priority=0,tcp,in_port=1,'
'actions=output:in_port,normal"')
info("*** Running CLI\n")
CLI(net)
info("*** Stopping network\n")
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
解决方案
推荐阅读
- java - Eclipse REST API 连接问题
- css - CSS:有没有办法不失去悬停,如果鼠标瞬间消失?
- node.js - 如何对 MongoDB 中的两个集合进行 $sum 值?
- ios - 无法在 SwiftUI 中使用本地 url 创建 PDFDocument(url: url)
- vpn - 如何使用 RestAssured 和代理通过 VPN 发出请求
- angular - 导航后不应重新运行 Angular 指令
- typeorm - Typeorm:如何对可以具有不同属性集的实体类型进行建模?
- angular - 在 z 索引中重叠图层
- summernote - summernote 没有出现 html 文档
- c# - 打印不包括任何外部重叠窗口的面板内容的图像