Networking 在启用OpenFlow的网络中修改IP和MAC地址

Networking 在启用OpenFlow的网络中修改IP和MAC地址,networking,ping,openflow,sdn,virtual-network,Networking,Ping,Openflow,Sdn,Virtual Network,我有一个这样的虚拟网络: 该开关为开放式V开关,整个网络由大开关泛光灯控制器控制 我尝试将两个流设置为switch1: 1) 捕获从h1到h2的任何数据包,并将其dst IP和dst MAC地址更改为h3的地址 2) 捕获从h3到h1的任何数据包,并将其src IP和src MAC地址更改为h2的地址 (检查问题底部,以了解泛光灯REST API请求的确切信息) 因此,当我从h1 ping h2时,ping应该转到h3并返回,但到目前为止,我还没有成功 这能做到吗?如果是,我错过了什么?提前谢

我有一个这样的虚拟网络:

该开关为开放式V开关,整个网络由大开关泛光灯控制器控制

我尝试将两个流设置为switch1:

1) 捕获从h1到h2的任何数据包,并将其dst IP和dst MAC地址更改为h3的地址

2) 捕获从h3到h1的任何数据包,并将其src IP和src MAC地址更改为h2的地址

(检查问题底部,以了解泛光灯REST API请求的确切信息)

因此,当我从h1 ping h2时,ping应该转到h3并返回,但到目前为止,我还没有成功

这能做到吗?如果是,我错过了什么?提前谢谢

迷你网设置:

sudo mn --topo single,3 --controller remote
泛光灯REST API请求:

查找IP和MAC地址并使用jq进行解析:

curl localhost:8080/wm/device/ | jq '.[]|{mac,ipv4}'
设置第一个流(注意,如果您自己尝试,MAC地址可能不同):

设置第二个流:

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”)。因此,Mac/IP在数据包中被修改,然后数据包被交换机丢弃。OVS是一个简单的openflow交换机,不做任何传统的交换/路由

为了让流实现您试图实现的目标,您需要指定一个输出操作,如下所示:

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)的端口id。

每个OpenFlow规则都有一个匹配项和一个操作。您需要为符合规则的数据包指定操作

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