Изменение IP и MAC-адресов в сети с поддержкой OpenFlow

У меня есть виртуальная сеть, как это:

http://imgur.com/wjPf2AG

Коммутатор является открытым 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).

Другие вопросы по тегам