20210503 Containernet / Mininet-Wifi ( Miniedit )
Previous20210426 Group TableNext20210510 Programming Protocol-independent Packet Processors ( P4 ) - 1
Last updated
Was this helpful?
Last updated
Was this helpful?
cd containernet
python3 ./setup.py install
docker pull ubuntu:16.04
docker images
apt update
apt upgrade
apt install openssh-server -y
建立兩組使用者密碼及sshd
docker run -it ubuntu:16.04 bash
建立 sshd1
adduser user
建立 sshd2
passwd user
apt update
apt install net-tools
ifconfig
apt install iputils-ping
ping 8.8.8.8
docker ps
建立 sshd1
docker commit 9f6 ubuntu:sshd1
docker images
docker rmi 4be
docker ps
docker commit 9f6 ubuntu:sshd1
建立 sshd2
docker commit 9f6 ubuntu:sshd2
docker images
docker ps
啟動 sshd
docker exec -it mn.d1 bash
d1
ifconfig d1-eth0 10.0.0.251/24
ifconfig
apt install openssh-server -y
/etc/init.d/ssh start
netstat -tulnp | grep 22
啟動 sshd
docker exec -it mn.d2 bash
d2
ifconfig d2-eth0 10.0.0.252/24
ifconfig
apt install openssh-server -y
/etc/init.d/ssh start
netstat -tulnp | grep 22
cd containernet-test
gedit 1.py
python3 1.py
xterm h1
1.py
#!/usr/bin/python
"""
This is the most simple example to showcase Containernet.
"""
from mininet.net import Containernet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import info, setLogLevel
setLogLevel('info')
net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')
info('*** Adding docker containers\n')
h1 = net.addHost('h1', ip='10.0.0.250/24')
d1 = net.addDocker('d1', ip='10.0.0.251/24', dimage="ubuntu:sshd1")
d2 = net.addDocker('d2', ip='10.0.0.252/24', dimage="ubuntu:sshd2")
info('*** Adding switches\n')
s1 = net.addSwitch('s1')
info('*** Creating links\n')
net.addLink(h1, s1)
net.addLink(d1, s1)
net.addLink(d2, s1)
info('*** Starting network\n')
net.start()
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
cd ..
cd .ssh/
ls
rm known_hosts
ssh user@10.0.0.251
cd server-test/test-sshtunnel
gedit 1.py 2.py 3.py 4.py 5.py
python3 1.py
xterm h1
1.py
#!/usr/bin/python
from mininet.net import Containernet
from mininet.node import Docker
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
def topology():
"Create a network with some docker containers acting as hosts."
net = Containernet()
info('*** Adding hosts\n')
h1 = net.addHost('h1', ip='192.168.0.1/24')
d1 = net.addDocker('d1', ip='192.168.0.2/24', dimage="smallko/php-apache-dev:v10")
info('*** Creating links\n')
net.addLink(h1, d1)
info('*** Starting network\n')
net.start()
d1.cmd("/etc/init.d/ssh start")
#d1.cmd("/etc/init.d/apache2 start")
#h1.cmd("ssh -Nf -L 192.168.0.1:5555:192.168.0.2:80 user@192.168.0.2")
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
2.py
#!/usr/bin/python
from mininet.net import Containernet
from mininet.node import Docker
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
def topology():
"Create a network with some docker containers acting as hosts."
net = Containernet()
info('*** Adding hosts\n')
h1 = net.addHost('h1', ip='192.168.0.1/24')
d1 = net.addDocker('d1', ip='192.168.0.2/24', dimage="smallko/php-apache-dev:v10")
h2 = net.addHost('h2', ip='192.168.0.3/24')
br1 = net.addHost('br1')
info('*** Creating links\n')
net.addLink(h1, br1)
net.addLink(d1, br1)
net.addLink(h2, br1)
info('*** Starting network\n')
net.start()
d1.cmd("/etc/init.d/ssh start")
br1.cmd("ifconfig br1-eth0 0")
br1.cmd("ifconfig br1-eth1 0")
br1.cmd("ifconfig br1-eth2 0")
br1.cmd("brctl addbr br1")
br1.cmd("brctl addif br1 br1-eth0")
br1.cmd("brctl addif br1 br1-eth1")
br1.cmd("brctl addif br1 br1-eth2")
br1.cmd("ifconfig br1 up")
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
3.py
#!/usr/bin/python
from mininet.net import Containernet
from mininet.node import Docker
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
def topology():
"Create a network with some docker containers acting as hosts."
net = Containernet()
info('*** Adding hosts\n')
h1 = net.addHost('h1', ip='192.168.0.1/24')
r1 = net.addHost('r1', ip='192.168.0.254/24')
d1 = net.addDocker('d1', ip='10.0.0.1/24', dimage="smallko/php-apache-dev:v10")
info('*** Creating links\n')
net.addLink(h1, r1)
net.addLink(r1, d1)
info('*** Starting network\n')
net.start()
d1.cmd("/etc/init.d/ssh start")
r1.cmd("ifconfig r1-eth1 0")
r1.cmd("ip addr add 10.0.0.2/24 brd + dev r1-eth1")
r1.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
r1.cmd("iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o r1-eth1 -j MASQUERADE")
h1.cmd("ip route add default via 192.168.0.254")
#h1.cmd("python -m SimpleHTTPServer 80 &")
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
4.py
#!/usr/bin/python
from mininet.net import Containernet
from mininet.node import Docker
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
def topology():
"Create a network with some docker containers acting as hosts."
net = Containernet()
info('*** Adding hosts\n')
h1 = net.addHost('h1', ip='192.168.0.1/24')
h2 = net.addHost('h2', ip='192.168.0.2/24')
br1 = net.addHost('br1')
r1 = net.addHost('r1', ip='192.168.0.254/24')
d1 = net.addDocker('d1', ip='10.0.0.1/24', dimage="smallko/php-apache-dev:v10")
info('*** Creating links\n')
net.addLink(h1, br1)
net.addLink(h2, br1)
net.addLink(r1, br1)
net.addLink(r1, d1)
info('*** Starting network\n')
net.start()
d1.cmd("/etc/init.d/ssh start")
r1.cmd("ifconfig r1-eth1 0")
r1.cmd("ip addr add 10.0.0.2/24 brd + dev r1-eth1")
r1.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
r1.cmd("iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o r1-eth1 -j MASQUERADE")
h1.cmd("ip route add default via 192.168.0.254")
br1.cmd("ifconfig br1-eth0 0")
br1.cmd("ifconfig br1-eth1 0")
br1.cmd("ifconfig br1-eth2 0")
br1.cmd("brctl addbr br1")
br1.cmd("brctl addif br1 br1-eth0")
br1.cmd("brctl addif br1 br1-eth1")
br1.cmd("brctl addif br1 br1-eth2")
br1.cmd("ifconfig br1 up")
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
5.py
#!/usr/bin/python
from mininet.net import Containernet
from mininet.node import Docker
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
def topology():
"Create a network with some docker containers acting as hosts."
net = Containernet()
info('*** Adding hosts\n')
h1 = net.addHost('h1', ip='192.168.0.1/24')
r1 = net.addHost('r1', ip='192.168.0.254/24')
d1 = net.addDocker('d1', ip='10.0.0.1/24', dimage="smallko/php-apache-dev:v10")
br1 = net.addHost('br1')
h2 = net.addHost('h2', ip='10.0.0.3/24')
h3 = net.addHost('h3', ip='10.0.0.4/24')
info('*** Creating links\n')
net.addLink(h1, r1)
net.addLink(r1, br1)
net.addLink(d1, br1)
net.addLink(h2, br1)
net.addLink(h3, br1)
info('*** Starting network\n')
net.start()
d1.cmd("/etc/init.d/ssh start")
r1.cmd("ifconfig r1-eth1 0")
r1.cmd("ip addr add 10.0.0.2/24 brd + dev r1-eth1")
r1.cmd("echo 1 > /proc/sys/net/ipv4/ip_forward")
r1.cmd("iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o r1-eth1 -j MASQUERADE")
r1.cmd("iptables -A FORWARD -s 192.168.0.1 -p tcp --dport 80 -j REJECT")
h1.cmd("ip route add default via 192.168.0.254")
br1.cmd("ifconfig br1-eth0 0")
br1.cmd("ifconfig br1-eth1 0")
br1.cmd("ifconfig br1-eth2 0")
br1.cmd("ifconfig br1-eth3 0")
br1.cmd("brctl addbr br1")
br1.cmd("brctl addif br1 br1-eth0")
br1.cmd("brctl addif br1 br1-eth1")
br1.cmd("brctl addif br1 br1-eth2")
br1.cmd("brctl addif br1 br1-eth3")
br1.cmd("ifconfig br1 up")
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
if __name__ == '__main__':
setLogLevel('info')
topology()
docker pull smallko/php-apache-dev:v10
ifconfig
docker exec -it mn.d1 bash
python -m SimpleHTTPServer 80
curl 192.168.0.2
建立 ssh 加密登入
ssh -Nf -L 5555:192.168.0.2:80 user@192.168.0.2
curl 127.0.0.1:5555
exit
python3 2.py
xterm h2
xterm h1
ls
cat hi.htm
python -m SimpleHTTPServer 80
ssh -Nf -L 5555:192.168.0.3:80 user@192.168.0.2
curl 127.0.0.1:5555
curl 127.0.0.1:5555/hi.htm
exit
python3 3.py
xterm h1
xterm h1
docker exec -it mn.d1 bash
ifconfig
ping 192.168.0.1
netstat -tulnp | grep ssh
curl 127.0.0.1:5555/hi.htm
ifconfig
ping 10.0.0.1 -c 5
python -m SimpleHTTPServer 80
ssh -Nf -R 10.0.0.1:5555:192.168.0.1:80user@10.0.0.1
-R
:反向
exit
python3 4.py
xterm h1 h2
docker exec -it mn.d1 bash
curl 127.0.0.1:5555/hi.htm
ping 192.168.0.1 -c 5
python -m SimpleHTTPServer 80
ping 10.0.0.1 -c 5
ssh -Nf -R 10.0.0.1:5555:192.168.0.2:80user@10.0.0.1
exit
python3 5.py
xterm h2 h3
xterm h1
ocker exec -it mn.d1 bash
python -m SimpleHTTPServer 80
python -m SimpleHTTPServer 80
ping 10.0.0.3 -c 5
ping 10.0.0.4 -c 5
curl 10.0.0.3/hi.htm
curl 10.0.0.4/hi.htm
ssh -Nf -D 127.0.0.1:8080 user@10.0.0.1
-D
:Dynamic
su - user
firefox
設定 firefox
exit
cd containernet
python3 ./setup.py install
cd ..
cd server-test/test-quagga/
python3 static_routing.py
xterm h1 r1
ping 192.168.2.1 -c 5
traceroute 192.168.2.1
route -n
docker images
docker pull kathara/quagga
cd dynamic_routing
cd r1
cd quagga
ls
pwd
cd ..
cd ..
cd ..
python3 dynamic_routing.py
exit
ping 192.168.2.1
traceroute 192.168.2.1
docker ps
docker exec -it mn.r1 bash
telnet localhost 2601
sh ip ro
docker exec -it mn.r2 bash
telnet localhost 2601
sh ip ro
exit
cd server-test/test-quagga-ospf/
ls
docker images
python3 dynamic_routing.py
h1 ping h2 -c 5
xterm h2 h1
docker exec -it mn.r1 bash
telnet localhost 2604
en
sh ip
sh ip ospf
sh ip ospf nei
sh ip ospf ro
關閉eth1後
sh ip ospf ro
traceroute 192.168.2.1
ping 192.168.2.1 -c 5
traceroute 192.168.2.1
docker exec -it mn.r1 bash
ifconfig r1-eth1 down
cd mininet-wifi
cd examples
python miniedit.py
cd ..
cd ..
cd test-miniedit
gedit lab3.py
更改 Controller Type 後
lab3.py
#!/usr/bin/python
from mininet.net import Mininet
from mininet.node import RemoteController, OVSKernelSwitch, Host
from mininet.cli import CLI
from mininet.link import TCLink, Intf
from mininet.log import setLogLevel, info
from subprocess import call
def myNetwork():
net = Mininet(topo=None,
build=False,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c0 = net.addController(name='c0',
controller=RemoteController,
ip='127.0.0.1',
protocol='tcp',
port=6633)
info( '*** Add switches/APs\n')
s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
info( '*** Add hosts/stations\n')
h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
info( '*** Add links\n')
net.addLink(s1, s2)
net.addLink(s2, h2)
net.addLink(h1, s1)
info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()
info( '*** Starting switches/APs\n')
net.get('s2').start([c0])
net.get('s1').start([c0])
info( '*** Post configure nodes\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()
python lab3.py
h1 ping h2 -c 5
更改 Controller Type 後
python lab3.py
h1 ping h2 -c 5
ryu 實驗後
h1 ping h2 -c 5
sh ovs-ofctl dump-flows s1
sh ovs-ofctl dump-flows s2
h1 ping h2 之前
ovs-ofctl dump-flows s1
ovs-ofctl dump-flows s2
h1 ping h2 之後
ovs-ofctl dump-flows s1
ovs-ofctl dump-flows s2
更改 Controller Type 後
cd ..
cd ryu
cd ryu
cd app
ryu-manager simple_switch.py
cd mininet-wifi
util/install.sh -n
cd examples
python miniedit.py
py sta1.params
py sta1.wintfs
py sta1.wintfs[0].txpower
sta1 iwconfig
py sta1.setRange(10, intf='sta1-wlan0')
cd test-miniedit
gedit 7.py
python 7.py
sta1 ifconfig
與無線網路相關
sta1 iwconfig
sta2 iwconfig
sta1 ping sta2 -c 5
xterm sta1
7.py
#!/usr/bin/python
from mininet.log import setLogLevel, info
from mn_wifi.net import Mininet_wifi
from mn_wifi.node import Station, OVSKernelAP
from mn_wifi.cli import CLI
from mn_wifi.link import wmediumd
from mn_wifi.wmediumdConnector import interference
from subprocess import call
def myNetwork():
net = Mininet_wifi(topo=None,
build=False,
link=wmediumd,
wmediumd_mode=interference,
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
info( '*** Add switches/APs\n')
ap3 = net.addAccessPoint('ap3', cls=OVSKernelAP, ssid='ap3-ssid',
channel='1', mode='g', position='526.0,325.0,0')
ap1 = net.addAccessPoint('ap1', cls=OVSKernelAP, ssid='ap1-ssid',
channel='1', mode='g', position='442.0,199.0,0')
ap2 = net.addAccessPoint('ap2', cls=OVSKernelAP, ssid='ap2-ssid',
channel='1', mode='g', position='372.0,328.0,0')
info( '*** Add hosts/stations\n')
sta1 = net.addStation('sta1', ip='10.0.0.1',
position='297.0,199.0,0')
sta2 = net.addStation('sta2', ip='10.0.0.2',
position='590.0,200.0,0')
info("*** Configuring Propagation Model\n")
net.setPropagationModel(model="logDistance", exp=3)
info("*** Configuring wifi nodes\n")
net.configureWifiNodes()
info( '*** Add links\n')
net.addLink(sta1, ap1)
net.addLink(ap1, sta2)
net.plotGraph(max_x=1000, max_y=1000)
info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()
info( '*** Starting switches/APs\n')
net.get('ap3').start([])
net.get('ap1').start([])
net.get('ap2').start([])
info( '*** Post configure nodes\n')
CLI(net)
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
myNetwork()
mx sta1 iwconfig
主動式掃描附近基地台
mx sta1 iwlist sta1-wlan0 scan
mx sta2 iwlist sta2-wlan0 scan
mx sta1 iw dev sta1-wlan0 disconnect
mx sta1 iwconfig
mx sta1 iwlist sta1-wlan0 scan
mx sta1 iw dev sta1-wlan0 connect ap1-ssid
mx sta1 ping 10.0.0.2
mx ap1 iwconfig
mx ap1 iw dev ap1-wlan1 station dump
mx ap1 iw dev ap1-wlan1 station dump | grep Station