Mininet 호스트가 Mininet 가상 시스템 IP를 ping할 수 없습니다.

Mininet 호스트가 Mininet 가상 시스템 IP를 ping할 수 없습니다.

하나의 스위치와 두 개의 호스트로 구성된 간단한 토폴로지가 있습니다.

호스트 h1과 h2는 정상적으로 서로 ping할 수 있습니다. 호스트 1과 2에 각각 IP 192.168.1.17과 18을 부여했습니다.

미니넷 IP는 192.168.1.16입니다. 또한 이를 호스트의 기본 게이트웨이로 설정했습니다.

여전히 미니넷에서 호스트를 핑할 수 없으며 그 반대의 경우도 마찬가지입니다.

mininet VM IP는 호스트 OS는 물론 다른 VM에서도 ping이 가능합니다. 내가 무엇을 놓치고 있나요? 도와주세요

파이썬 코드는 다음과 같습니다:

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

이 시점에서 우리는 인터페이스에 대해 두 가지 사실을 알 수 있습니다 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는 게이트웨이 주소를 사용하여 mininet 호스트를 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성공적으로 연결을 설정하더라도 실패할 수 있습니다. 이 예의 동작에 대해 걱정할 필요는 없지만 기억해 둘 가치가 있습니다.

관련 정보