Mininet

  1. Töltsük le és csomagoljuk ki a tömörített lemezképet a VirtualBox-hoz!
  2. A VirtualBox-ban készítsünk egy új VM-t, úgy hogy a kicsomagolt lemezt használja!
    • típusnál Linux-ot állítsunk be
    • verziónál Ubuntu (64 bit)-et
  3. Mielőtt elindítanánk:
    • NE engedélyezzük az EFI-t (Rendszer/Alap)
    • Network Interfacetcseréljük le: Host-only kártyát
  4. Indítsuk el a VM-t!
  5. A felhasználónév és a jelszó is: mininet.

mininet@mininet-vm:~$ sudo dhclient

mininet@mininet-vm:~$ sudo service sshd restart
Ha megvan vagy Hyper-V-vel vagy VirtualBox-al, akkor már tudjuk használni és a feladatokat is meg tudjuk oldani. Azonban a terminál nem kényelmes, sok hibája van. Ezért a futó virtuális gépre SSH segítségével be fogunk lépni VS code-ban, így a VS code terminálját fogjuk tudni használni. FONTOS: ne állítsd le a virtuális gépet, annak futnia kell, hogy be tudjunk rá lépni.

mininet@mininet-vm:~$ cd mininet/examples/
mininet@mininet-vm:~/mininet/examples$ python3 miniedit.py

#!/usr/bin/env 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
from subprocess import call

def myNetwork():
    net = Mininet(topo=None, build=False, ipBase='10.0.0.0/8')

    info('*** Adding controller\n')
    info('*** Add switches\n')
    r1 = net.addHost('r1', cls=Node, ip='0.0.0.0')
    r1.cmd('sysctl -w net.ipv4.ip_forward=1')

    info('*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.1.1/24', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='10.0.2.1/24', defaultRoute=None)
    h3 = net.addHost('h3', cls=Host, ip='10.0.3.1/24', defaultRoute=None)

    info('*** Add links\n')
    net.addLink(h1, r1)
    net.addLink(h2, r1)
    net.addLink(h3, r1)

    info('*** Starting network\n')
    net.build()
    info('*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()

    info('*** Starting switches\n')
    info('*** Post configure switches and hosts\n')
    CLI(net)
    net.stop()

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

mininet@mininet-vm:~$ sudo python3 test.py
*** Adding controller
*** Add switches
*** Add hosts
*** Add links
*** Starting network
*** Configuring hosts
r1 h1 h2 h3
*** Starting controllers
*** Starting switches
*** Post configure switches and hosts
*** Starting CLI:
mininet>

mininet> help
mininet> nodes
mininet> links
mininet> net
mininet> h1 ifconfig
mininet> xterm h1

mininet> h1 ip route add default via 10.0.1.254 dev h1-eth0
mininet> h1 route

mininet> h2 ip route add default via 10.0.2.254 dev h2-eth0
mininet> h3 ip route add default via 10.0.3.254 dev h3-eth0
mininet> links
h1-eth0<->r1-eth0 (OK OK)
h2-eth0<->r1-eth1 (OK OK)
h3-eth0<->r1-eth2 (OK OK)
mininet> r1 ip addr add 10.0.1.254/24 dev r1-eth0
mininet> r1 ip addr add 10.0.2.254/24 dev r1-eth1
mininet> r1 ip addr add 10.0.3.254/24 dev r1-eth2
mininet> h1 ping h2
64 bytes from 10.0.2.1: icmp_seq=1 ttl=63 time=0.046 ms
64 bytes from 10.0.2.1: icmp_seq=2 ttl=63 time=0.033 ms
^C
--- 10.0.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1007ms
rtt min/avg/max/mdev = 0.033/0.039/0.046/0.006 ms
  • filter: A legáltalánosabb tábla, amelyet a csomagszűréshez használnak. Ez szabályozza, hogy mely csomagok engedélyezettek vagy eldobandók.
  • nat: A NAT (Network Address Translation) kezelésére használják, például a forrás- vagy célcímek átírására.
  • mangle: A csomagok tartalmának módosítására használható.
  • raw: Előzetes feldolgozásokra szolgál, például a csomagkövetés kikapcsolására.
  • INPUT: A beérkező csomagok kezelése, amelyek a helyi géphez érkeznek.
  • OUTPUT: A helyi gép által küldött csomagok szabályozása.
  • FORWARD: A gépen átmenő, de nem a gép számára szánt csomagok kezelése (jellemzően routerként működő gépeknél).
  • PREROUTING: Mielőtt a célcím alapján a csomagokat továbbítanák (főleg NAT-hoz használják).
  • POSTROUTING: A csomagok továbbítása előtt, amikor a forráscímet kell átírni (NAT után).
  • ACCEPT: A csomag engedélyezve van.
  • DROP: A csomagot eldobják, mintha soha nem is érkezett volna.
  • REJECT: A csomag eldobása mellett visszajelzés is küldődik a küldőnek.
  • SNAT: Forrás NAT alkalmazása.
  • DNAT: Célcím NAT alkalmazása.

mininet> h1 iptables-save
mininet> h1 iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
mininet> h1 ping h2
mininet> h2 ping h1

mininet> h1 iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
mininet> h1 ping h2

mininet> h1 iptables -D OUTPUT -p icmp --icmp-type echo-request -j DROP
mininet> h1 ping h2
mininet> h1 iptables -D INPUT -p icmp --icmp-type echo-request -j DROP
mininet> h2 ping h1

mininet> h3 /usr/sbin/sshd
mininet> r1 iptables -t nat -A PREROUTING -i r1-eth0 -p tcp -d 10.0.2.1 --dport 2222 -j DNAT --to-destination 10.0.3.1:22
mininet> r1 iptables -t nat -L -v -n
mininet> h1 ssh -p 2222 mininet@10.0.2.1

mininet@mininet-vm:~$ ifconfig
h3-eth0: flags=4163  mtu 1500
        inet 10.0.3.1  netmask 255.255.255.0  broadcast 10.0.3.255
        ether 36:fc:d9:d7:8d:b8  txqueuelen 1000  (Ethernet)
        RX packets 100  bytes 14191 (14.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 95  bytes 14653 (14.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

mininet@mininet-vm:~$ cd gyakorlat/
mininet@mininet-vm:~/gyakorlat$ sudo python3 sw-topo.py

mininet> sh brctl show
mininet> h1 ping h2
mininet> sh tcpdump -n -i any

mininet@mininet-vm:~/gyakorlat$ sudo python3 sw-topo.py --stp
mininet> sh brctl show
mininet> sh brctl showstp s2

Feladatok