MininetホストはMininet仮想マシンIPをpingできません。

MininetホストはMininet仮想マシンIPをpingできません。

1つのスイッチと2つのホストで構成される単純なトポロジがあります。

ホストh1とh2は通常、互いにpingできます。ホスト 1 と 2 に IP 192.168.1.17 と 18 をそれぞれ付与しました。

ミニネットIPは192.168.1.16です。また、これをホストのデフォルトゲートウェイとして設定しました。

それでもミニネットでホストをpingすることはできず、その逆も同様です。

mininet VM IPは、ホストOSだけでなく他のVMでもpingが可能です。私は何を見逃していますか?助けてください

Pythonコードは次のとおりです。

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def build( self ):
        "Create custom topo."

        # Add hosts and switches
        switch = self.addSwitch('s1')
        host1 = self.addHost('h1')
        host2 = self.addHost('h2')

        # Add links
        self.addLink(host1, switch)
        self.addLink(host2, switch)


topos = { 'mytopo': ( lambda: MyTopo() ) }

スイッチもホストに対してpingを実行できません。私は何をすべきか

答え1

次のネットワーク構成で実行されるmininet仮想マシンがあります。

mininet@mininet-vm:~/shoaib$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:b5:66:16 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.170/24 brd 192.168.122.255 scope global dynamic eth0
       valid_lft 2822sec preferred_lft 2822sec

次のように起動するとtopo.py

from mininet.topo import Topo

class MyTopo( Topo ):
    "Simple topology example."

    def build( self ):
        "Create custom topo."

        # Add hosts and switches
        switch = self.addSwitch('s1')
        host1 = self.addHost('h1', ip='192.168.37.17/24')
        host2 = self.addHost('h2', ip='192.168.37.18/24')

        # Add links
        self.addLink(host1, switch)
        self.addLink(host2, switch)


topos = { 'mytopo': ( lambda: MyTopo() ) }

この場所は次のとおりですroutes.mn

h1 ip route add default via 192.168.37.16
h2 ip route add default via 192.168.37.16

その後、トポロジを開始してパスを割り当てます。

mininet@mininet-vm:~/shoaib$ sudo -E mn --custom topo.py --topo mytopo
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>

パスを割り当てます。

mininet> source routes.mn
mininet>

その後、mininetが次の設定を使用してホストにOpenVswitchブリッジを作成したことを確認できます。

mininet> sh ip addr show s1
38: s1: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 1e:49:17:d6:02:4d brd ff:ff:ff:ff:ff:ff

この時点で、私たちはインターフェースについて2つの事実を知ることができますs1

  1. リンクを開けませんでしたが、
  2. 住所がありません。

デフォルトパスに割り当てられたアドレスを指定してリンクを開いてみましょう。

mininet> sh ip addr add 192.168.37.16/24 dev s1
mininet> sh ip link set s1 up

これにより、次のような結果が得られます。

mininet> sh ip addr show s1
38: s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 1e:49:17:d6:02:4d brd ff:ff:ff:ff:ff:ff
    inet 192.168.37.16/24 scope global s1
       valid_lft forever preferred_lft forever

この時点で、ホストh1とh2はゲートウェイアドレスを使用してミニネットホストをpingできます。

mininet> h1 ping -c 1 192.168.37.16
PING 192.168.37.16 (192.168.37.16) 56(84) bytes of data.
64 bytes from 192.168.37.16: icmp_seq=1 ttl=64 time=1.10 ms

--- 192.168.37.16 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.097/1.097/1.097/0.000 ms

デフォルトのホストアドレスは次のとおりです。

mininet> h1 ping -c 1 192.168.122.170
PING 192.168.122.170 (192.168.122.170) 56(84) bytes of data.
64 bytes from 192.168.122.170: icmp_seq=1 ttl=64 time=0.547 ms

--- 192.168.122.170 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.547/0.547/0.547/0.000 ms

しかし、彼らできないミニネットホスト以外のアドレスにアクセスするには:

mininet> h1 ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

これは、これらのパケットがローカルネットワークのゲートウェイによって廃棄されるためです。これがうまくいくための最も簡単な解決策は、mininetホストのnetfilter設定に仮面舞踏会ルールを追加することです。

mininet> sh iptables -t nat -A POSTROUTING -s 192.168.37.0/24 -o eth0 -j MASQUERADE

これで外部ホストにアクセスできます。

mininet> h1 ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=10.6 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 10.639/10.639/10.639/0.000 ms

上記のすべてのコマンドを次の場所に配置した場合setup.mn

h1 ip route add default via 192.168.37.16
h2 ip route add default via 192.168.37.16
sh ip addr add 192.168.37.16/24 dev s1
sh ip link set s1 up
sh iptables -t nat -A POSTROUTING -s 192.168.37.0/24 -o eth0 -j MASQUERADE

これにより、次のように単純化されます。

$ sudo mn --custom topo.py --topo mytopo
mininet> source setup.mn

ノート

  • ミニネットホストで使用されるアドレス範囲が、ミニネット仮想マシンで使用されるアドレス範囲と競合しないことが重要です。または他のローカルネットワーク。

  • 192.168.37.0/24私はミニネットホストのアドレス範囲を使用しています。なぜなら、192.168.1.0/24それは私のローカル(物理)ネットワークですでに使用されているからです。

  • ping特にリモートホストの場合、それほど良い診断ツールではありません。ping正常に接続を確立しても失敗する可能性があります。この例の動作について心配する必要はありませんが、覚えておく価値があります。

関連情報