Изменение IP и MAC-адресов в сети с поддержкой OpenFlow
У меня есть виртуальная сеть, как это:
Коммутатор является открытым VSwitch, и вся сеть контролируется контроллером Big Switch Floodlight.
Я пытаюсь установить два потока для switch1:
1) Перехватите любой пакет от h1 до h2 и измените их адреса dst-IP и dst-MAC на адрес h3.
2) Перехватить любой пакет от h3 до h1 и изменить его адреса src-IP и src-MAC на адрес h2.
(Проверьте нижнюю часть вопроса для точных запросов API REST Floodlight)
Поэтому, когда я пингую h2 с h1, пинг должен вместо этого перейти на h3 и обратно, но пока я не добился успеха.
Можно ли это сделать? Если так, что я пропускаю? Заранее спасибо!
Настройка Mininet:
sudo mn --topo single,3 --controller remote
Запросы API REST Floodlight:
Поиск IP и MAC-адресов и анализ с помощью jq:
curl localhost:8080/wm/device/ | jq '.[]|{mac,ipv4}'
Настройка первого потока (обратите внимание, если вы попробуете это самостоятельно, MAC-адреса могут отличаться):
curl -d '{"switch": "00:00:00:00:00:00:00:01", "name":"redirection", "src-ip":"10.0.0.1", "dst-ip":"10.0.0.2", "src-mac":"7a:b9:87:ee:d2:b7","dst-mac":"a6:77:bf:8f:c4:db", "ether-type":"0x0800","active":"true","actions":"set-dst-ip=10.0.0.3,set-dst-mac=c2:65:e3:d3:6c:11"}' localhost:8080/wm/staticflowentrypusher/json
Настройка второго потока:
curl -d '{"switch": "00:00:00:00:00:00:00:01", "name":"redirection2", "src-ip":"10.0.0.3", "dst-ip":"10.0.0.1", "src-mac":"c2:65:e3:d3:6c:11","dst-mac":"7a:b9:87:ee:d2:b7", "ether-type":"0x0800","active":"true","actions":"set-src-ip=10.0.0.2,set-src-mac=a6:77:bf:8f:c4:db"}' http://localhost:8080/wm/staticflowentrypusher/json
2 ответа
Каждое правило OpenFlow имеет соответствие и действие. Вам необходимо указать действие для пакетов, которые соответствуют вашим правилам.
В ваших потоках не указано никаких действий переадресации (например, "output:2"). Таким образом, в пакете изменяются Mac/IP, а затем коммутатор просто отбрасывает пакет. OVS - это простой коммутатор с открытым потоком, который не выполняет никакой традиционной коммутации / маршрутизации.
Чтобы ваш поток делал то, что вы пытаетесь достичь, вам нужно указать действие вывода следующим образом:
curl -d '{"switch": "00:00:00:00:00:00:00:01", "name":"redirection", "src-ip":"10.0.0.1", "dst-ip":"10.0.0.2", "src-mac":"7a:b9:87:ee:d2:b7","dst-mac":"a6:77:bf:8f:c4:db", "ether-type":"0x0800","active":"true","actions":"set-dst-ip=10.0.0.3,set-dst-mac=c2:65:e3:d3:6c:11,output=2"}' localhost:8080/wm/staticflowentrypusher/json
где 2 - идентификатор порта, к которому подключен нужный хост (10.0.0.3).