Mininet не может пинговать с коммутатора (s1) на хосты (h1-h4)

Вопрос или проблема

Я создаю простой mininet с помощью простой команды, как указано ниже. Я использую контроллер SDN OpendayLight с подсетью 192.168.20.0/24. IP удаленного контроллера размещен на 192.168.8.5. Соединение с удаленным контроллером работает без проблем. Проблема в том, что я не могу пинговать с коммутатора (s1) к хостам (h1-h4) и наоборот.

sudo mn --topo single,4 --controller=remote,ip=controllerIP --switch ovsk,protocols=OpenFlow13

После этого я устанавливаю IP для хостов и шлюз по умолчанию,

h1 ifconfig h1-eth0 192.168.20.5/24
h2 ifconfig h1-eth0 192.168.20.6/24
h3 ifconfig h1-eth0 192.168.20.7/24
h4 ifconfig h1-eth0 192.168.20.8/24

Шлюз:

h1 route add default gw 192.168.20.4
h2 route add default gw 192.168.20.4
h3 route add default gw 192.168.20.4
h4 route add default gw 192.168.20.4

Я могу пинговать между хостами, как указано ниже:

mininet> pingall
*** Ping: testing ping reachability
h1 -> h2 h3 h4 
h2 -> h1 h3 h4 
h3 -> h1 h2 h4 
h4 -> h1 h2 h3 
*** Results: 0% dropped (12/12 received)

Но не могу пинговать с s1 на h1-h4:

mininet> s1 ping h1
PING 192.168.20.5 (192.168.20.5) 56(84) bytes of data.
^C
--- 192.168.20.5 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2039ms

mininet> s1 ping h2
PING 192.168.20.6 (192.168.20.6) 56(84) bytes of data.
^C
--- 192.168.20.6 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2056ms

И наоборот:

mininet> h1 ping 192.168.20.4
PING 192.168.20.4 (192.168.20.4) 56(84) bytes of data.
^C
--- 192.168.20.4 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1017ms

mininet> h2 ping 192.168.20.4
PING 192.168.20.4 (192.168.20.4) 56(84) bytes of data.
^C
--- 192.168.20.4 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1026ms

Dump flows ниже: (я пробовал chatGPT, другие сайты и добавил несколько дополнительных позже)

badcode@ovs-mininet:~$ sudo ovs-ofctl dump-flows s1 -O OpenFlow13
 cookie=0x2b00000000000025, duration=7194.065s, table=0, n_packets=139, n_bytes=8974, priority=2,in_port="s1-eth1" actions=output:"s1-eth2",output:"s1-eth3",output:"s1-eth4",output:enp0s10,CONTROLLER:65535
 cookie=0x2b00000000000026, duration=7194.065s, table=0, n_packets=111, n_bytes=7734, priority=2,in_port="s1-eth2" actions=output:"s1-eth1",output:"s1-eth3",output:"s1-eth4",output:enp0s10,CONTROLLER:65535
 cookie=0x2b00000000000027, duration=7194.065s, table=0, n_packets=91, n_bytes=6566, priority=2,in_port="s1-eth3" actions=output:"s1-eth1",output:"s1-eth2",output:"s1-eth4",output:enp0s10,CONTROLLER:65535
 cookie=0x2b00000000000028, duration=7194.065s, table=0, n_packets=88, n_bytes=6376, priority=2,in_port="s1-eth4" actions=output:"s1-eth1",output:"s1-eth2",output:"s1-eth3",output:enp0s10,CONTROLLER:65535
 cookie=0x2b00000000000029, duration=7194.065s, table=0, n_packets=858, n_bytes=506220, priority=2,in_port=enp0s10 actions=output:"s1-eth1",output:"s1-eth2",output:"s1-eth3",output:"s1-eth4",CONTROLLER:65535
 cookie=0x0, duration=2990.045s, table=0, n_packets=42, n_bytes=1902, in_port=LOCAL actions=output:enp0s10
 cookie=0x0, duration=2972.128s, table=0, n_packets=144, n_bytes=84960, in_port=enp0s10 actions=LOCAL
 cookie=0x0, duration=2336.855s, table=0, n_packets=0, n_bytes=0, priority=10,in_port=LOCAL actions=output:"s1-eth1",output:"s1-eth2",output:"s1-eth3",output:"s1-eth4"
 cookie=0x0, duration=2392.952s, table=0, n_packets=0, n_bytes=0, priority=10,ip,nw_dst=192.168.20.4 actions=LOCAL
 cookie=0x2a00000000000100, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=9a:51:97:ef:7a:22,dl_dst=4a:a9:8d:0a:77:d2 actions=output:"s1-eth4"
 cookie=0x2a00000000000101, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=4a:a9:8d:0a:77:d2,dl_dst=9a:51:97:ef:7a:22 actions=output:"s1-eth2"
 cookie=0x2a00000000000108, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=9a:51:97:ef:7a:22,dl_dst=46:d8:9c:ed:b6:cb actions=output:"s1-eth3"
 cookie=0x2a00000000000109, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=46:d8:9c:ed:b6:cb,dl_dst=9a:51:97:ef:7a:22 actions=output:"s1-eth2"
 cookie=0x2a00000000000110, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=d2:d0:60:e4:d5:5e,dl_dst=4a:a9:8d:0a:77:d2 actions=output:"s1-eth4"
 cookie=0x2a00000000000111, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=4a:a9:8d:0a:77:d2,dl_dst=d2:d0:60:e4:d5:5e actions=output:"s1-eth1"
 cookie=0x2a00000000000118, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=d2:d0:60:e4:d5:5e,dl_dst=46:d8:9c:ed:b6:cb actions=output:"s1-eth3"
 cookie=0x2a00000000000119, duration=209.469s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=46:d8:9c:ed:b6:cb,dl_dst=d2:d0:60:e4:d5:5e actions=output:"s1-eth1"
 cookie=0x2a0000000000011c, duration=209.468s, table=0, n_packets=2, n_bytes=84, idle_timeout=600, hard_timeout=300, priority=10,dl_src=9a:51:97:ef:7a:22,dl_dst=d2:d0:60:e4:d5:5e actions=output:"s1-eth1"
 cookie=0x2a0000000000011d, duration=209.468s, table=0, n_packets=3, n_bytes=126, idle_timeout=600, hard_timeout=300, priority=10,dl_src=d2:d0:60:e4:d5:5e,dl_dst=9a:51:97:ef:7a:22 actions=output:"s1-eth2"
 cookie=0x2a0000000000011e, duration=209.468s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=4a:a9:8d:0a:77:d2,dl_dst=46:d8:9c:ed:b6:cb actions=output:"s1-eth3"
 cookie=0x2a0000000000011f, duration=209.468s, table=0, n_packets=0, n_bytes=0, idle_timeout=600, hard_timeout=300, priority=10,dl_src=46:d8:9c:ed:b6:cb,dl_dst=4a:a9:8d:0a:77:d2 actions=output:"s1-eth4"

Ifconfig:

br1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.175.2.4  netmask 255.255.255.0  broadcast 200.175.2.255
        inet6 fe80::a00:27ff:fef0:4ada  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:f0:4a:da  txqueuelen 1000  (Ethernet)
        RX packets 24107  bytes 11222188 (11.2 MB)
        RX errors 0  dropped 3995  overruns 0  frame 0
        TX packets 509  bytes 37275 (37.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.3.4  netmask 255.255.255.0  broadcast 192.168.3.255
        inet6 fe80::a00:27ff:fec6:694f  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:c6:69:4f  txqueuelen 1000  (Ethernet)
        RX packets 5511  bytes 1095542 (1.0 MB)
        RX errors 0  dropped 3995  overruns 0  frame 0
        TX packets 215  bytes 18327 (18.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::a00:27ff:fec6:694f  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:c6:69:4f  txqueuelen 1000  (Ethernet)
        RX packets 1702  bytes 772901 (772.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9837  bytes 1389222 (1.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.6  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 fe80::39e4:4849:bea5:6b62  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:9d:0a:a8  txqueuelen 1000  (Ethernet)
        RX packets 369026  bytes 116598716 (116.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 361966  bytes 177779457 (177.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::59bf:89b5:ed9f:8bdd  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:f0:4a:da  txqueuelen 1000  (Ethernet)
        RX packets 21694  bytes 11275929 (11.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8509  bytes 1168325 (1.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 08:00:27:dc:21:86  txqueuelen 1000  (Ethernet)
        RX packets 1686  bytes 766328 (766.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9125  bytes 1097566 (1.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 35718  bytes 5114924 (5.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35718  bytes 5114924 (5.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.20.4  netmask 255.255.255.0  broadcast 192.168.20.255
        inet6 fe80::a00:27ff:fedc:2186  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:dc:21:86  txqueuelen 1000  (Ethernet)
        RX packets 4205  bytes 415946 (415.9 KB)
        RX errors 0  dropped 4057  overruns 0  frame 0
        TX packets 165  bytes 12118 (12.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

s1-eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::e0df:c0ff:fe6f:7ab0  prefixlen 64  scopeid 0x20<link>
        ether e2:df:c0:6f:7a:b0  txqueuelen 1000  (Ethernet)
        RX packets 192  bytes 13200 (13.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5443  bytes 891826 (891.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

s1-eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::849d:bbff:fe96:31b1  prefixlen 64  scopeid 0x20<link>
        ether 86:9d:bb:96:31:b1  txqueuelen 1000  (Ethernet)
        RX packets 163  bytes 11870 (11.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5471  bytes 893066 (893.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

s1-eth3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::1045:58ff:fed5:a307  prefixlen 64  scopeid 0x20<link>
        ether 12:45:58:d5:a3:07  txqueuelen 1000  (Ethernet)
        RX packets 154  bytes 11324 (11.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5477  bytes 893198 (893.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

s1-eth4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::3847:ebff:fe19:5487  prefixlen 64  scopeid 0x20<link>
        ether 3a:47:eb:19:54:87  txqueuelen 1000  (Ethernet)
        RX packets 152  bytes 11128 (11.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5478  bytes 893304 (893.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Маршрутная таблица и arp:

mininet> s1 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.1     0.0.0.0         UG    100    0        0 enp0s8
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 br2
192.168.8.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s8
192.168.20.0    0.0.0.0         255.255.255.0   U     0      0        0 s1
200.175.2.0     0.0.0.0         255.255.255.0   U     0      0        0 br1
mininet> h1 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.20.4    0.0.0.0         UG    0      0        0 h1-eth0
192.168.20.0    0.0.0.0         255.255.255.0   U     0      0        0 h1-eth0
mininet> s1 arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.20.4                     (incomplete)                              br1
192.168.8.1              ether   52:54:00:12:35:00   C                     enp0s8
192.168.3.5              ether   08:00:27:87:ff:98   C                     br2
192.168.3.43                     (incomplete)                              br2
192.168.8.5                      (incomplete)                              br1
200.175.2.5                      (incomplete)                              br2
192.168.8.5                      (incomplete)                              s1
192.168.20.5                     (incomplete)                              s1
192.168.8.5              ether   08:00:27:71:5f:7b   C                     enp0s8
192.168.20.6                     (incomplete)                              s1
192.168.3.5                      (incomplete)                              br1
192.168.8.5                      (incomplete)                              br2
192.168.8.3              ether   08:00:27:f6:22:eb   C                     enp0s8
200.175.2.5              ether   08:00:27:ad:25:87   C                     br1
192.168.3.4                      (incomplete)                              br1
mininet> h1 arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.20.4                     (incomplete)                              h1-eth0
192.168.20.6             ether   9a:51:97:ef:7a:22   C                     h1-eth0
192.168.20.7             ether   46:d8:9c:ed:b6:cb   C                     h1-eth0
192.168.20.8             ether   4a:a9:8d:0a:77:d2   C                     h1-eth0
mininet> 

Вы можете видеть, что разрешение arp показывает неполное для s1 (192.168.20.4).

Как я могу решить эту проблему и иметь возможность пинговать с s1 к хостам? Я также хочу добиться пинга хостов (h1-h4) с других двух мостов br1 и br2 (вы можете увидеть это в ifconfig), но s1 не пингует, так что, я полагаю, сначала нужно решить эту проблему.

Пробовал перенаправление портов внутри s1:

s1 sysctl net.ipv4.ip_forward=1
s1 sysctl -p

Пробовал добавить явные потоки для обработки ARP-трафика:

dpctl add-flow s1 -O OpenFlow13 priority=100,arp,actions=output:ALL

Также для перенаправления трафика ICMP:

dpctl add-flow s1 -O OpenFlow13 priority=100,icmp,actions=output:ALL

Добавил поток, который сопоставляет трафик, назначенный 192.168.20.4, и перенаправляет его на локальный интерфейс.

dpctl add-flow s1 -O OpenFlow13 priority=10,ip,nw_dst=192.168.20.4,actions=LOCAL

И поток, который перенаправляет трафик из локального (коммутатора) к правильным интерфейсам хостов.

dpctl add-flow s1 -O OpenFlow13 priority=10,in_port=LOCAL,actions=output:s1-eth1,s1-eth2,s1-eth3,s1-eth4

Но ничего не работает.

Ответ или решение

Проблема с пингом между коммутатором (s1) и хостами (h1-h4) в Mininet

Ваша проблема заключается в том, что не удается осуществить обмен пакетами (пинг) между коммутатором s1 и хостами h1-h4 в сетевом окружении Mininet, даже несмотря на успешное выполнение пинга между самими хостами. Основные возможные причины данной проблемы могут быть связаны с конфигурацией маршрутизации, правилами OpenFlow или управлением ARP.

1. Настройка IP-адресов и маршрутизация

Согласно предоставленным данным, вы назначили IP-адреса хостам, однако необходимо убедиться, что все настройки выполнены правильно. Проверьте их следующим образом:

h1 ifconfig h1-eth0 192.168.20.5/24
h2 ifconfig h2-eth0 192.168.20.6/24
h3 ifconfig h3-eth0 192.168.20.7/24
h4 ifconfig h4-eth0 192.168.20.8/24

Обратите внимание, что вы должны назначать статус интерфейсов правильно. Убедитесь, что вы используете h2-eth0, h3-eth0, и h4-eth0 для других хостов, а не h1-eth0 для всех.

Для задания маршрутизаторов по умолчанию, используйте:

h1 route add default gw 192.168.20.4
h2 route add default gw 192.168.20.4
h3 route add default gw 192.168.20.4
h4 route add default gw 192.168.20.4

Эти команды задают маршрут по умолчанию для каждого хоста, что является правильным.

2. Проверка ARP

Вы упомянули, что таблица ARP показывает статус "incomplete" для s1. Это указывает на то, что s1 не может разрешить MAC-адреса хостов (h1-h4), что в свою очередь препятствует отправке ICMP пакетов (пингов).

Проверьте, правильно ли настроена фильтрация ARP-трафика на уровне OpenFlow. Обратите внимание, что для успешной работы должен быть установлен соответствующий маршрут для ARP. Убедитесь, что ваши команды добавления потоков работают корректно.

Вы добавили следующий поток:

dpctl add-flow s1 -O OpenFlow13 priority=100,arp,actions=output:ALL

Это хорошо, но также нужно проверить, чтобы другие правила не конфликтовали с ARP. Попробуйте очистить все существующие потоки и заново добавить только необходимые.

3. Установка потоков

Далее проверьте, что потоки действительно установлены в коммутаторе, используя:

sudo ovs-ofctl dump-flows s1 -O OpenFlow13

Ищите строки, относящиеся к ARP и ICMP. Убедитесь, что ваши установки выполняются верно и что IPTables не блокирует трафик.

4. Проверка правил IP-передачи

Проверьте, что IP-передача включена. На уровне системы (не обязательно для Mininet, но полезно) выполните:

sysctl net.ipv4.ip_forward=1

Это позволяет пересылку пакетов между интерфейсами.

5. Тестирование потока

Проведите тесты ICMP не только от хостов до s1, но и от s1 до хостов. Если вы видите, что пинг с s1 до хостов не проходит, выполните следующие команды для диагностики проблем с ARP:

# Проверьте, получите ли вы MAC-адреса хостов
arp -n

Это должно дать вам представление о том, получил ли s1 указания о хостах в виде их MAC-адресов.

Заключение

Если все вышеуказанные шаги выполнены и проблема сохраняется, рекомендуется перезапустить Mininet и структуру сети, чтобы убедиться, что настройки не могли быть повреждены. Убедитесь также, что версии OpenDaylight и Mininet совместимы.

Если у вас есть доступ к логам контроллера OpenDaylight, просмотрите их на предмет ошибок или предупреждений, которые могут помочь в диагностике проблемы.

Оцените материал
Добавить комментарий

Капча загружается...