我想尝试OVS(软件Linux交换机)http://openvswitch.org/和我的LXC容器,Ubuntu作为主机和访客.所以我安装了它:
# apt-get install openvswitch-switch
Run Code Online (Sandbox Code Playgroud)
根据此文档进行配置https://infologs.wordpress.com/2015/06/19/how-to-attach-lxc-container-to-ovs-openvswitch/
创建测试容器:
# lxc-create -t ubuntu -n veth03-ovs -- -r trusty
Run Code Online (Sandbox Code Playgroud)创建ovs桥并为其分配IP:
# ovs-vsctl add-br switch0
# ip add add 192.168.100.1/24 dev switch0
Run Code Online (Sandbox Code Playgroud)让它成为新的网络192.168.100.0/24和switch0(根据我的理解)将是第一个地址(网关).
看起来很好:
# ip a
...
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
link/ether 52:9d:e1:60:1d:56 brd ff:ff:ff:ff:ff:ff
5: switch0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
link/ether 16:63:eb:47:13:41 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 scope global switch0
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
桥接接口状态:
# ovs-vsctl show …Run Code Online (Sandbox Code Playgroud) 如果我要设置一个通过OpenFlow控制的开关设备,使用ovs-dpctl与ovs-vsctl的条件是什么?对于该名男子页OVS-dpctl说,使用OVS-vsctl如果OVS-vswitchd使用.
那么在什么情况下你会使用ovs-dpctl?你不能做什么呢?
一个后续问题是OF"数据路径"值的来源.这将是OF控制器用于识别OF开关的OF规范中的64位数字.是自动计算此值还是必须输入?
感谢您的帮助.
当我尝试从主机终端登录到我的mininet VM时,它显示Permission denied 错误,甚至来自使用命令托管Mininet的 VM终端内:
sudo mn --topo single,3 --mac --switch ovsk --controller remote`
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
ubuntu@ubuntu:~$ sudo mn
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
Cannot find required executable ovs-controller.
Please make sure that it is installed and availabe in your $PATH:
(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/:/bin)
ubuntu@ubuntu:~$
Run Code Online (Sandbox Code Playgroud)
所以我无法继续使用SDN网络!如何手动修复以及为什么会发生此错误!
我有两个节点和两个虚拟机
kvm01
-nic1 123.123.123.1
VM1
-vnet1 123.123.123.2 (public) -vnet2 10.0.0.1 (private)
kvm02
-nic1 123.123.123.2
VM2
-vnet1 123.123.123.4 (public) -vnet2 10.0.0.2 (private)
Run Code Online (Sandbox Code Playgroud)
如何设置 openvswitch 网络,以便 VM1 和 VM2 位于专用网络上,但主机位于两个不同的位置?
编辑:
运行此命令:
# ovs-vsctl add-port br-private vxlan1 -- \
set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2
Run Code Online (Sandbox Code Playgroud)
导致此 OVS 配置:
root@backup01:~# ovs-vsctl show
6276bd0a-920b-469d-a4e0-90d990dd8f94
Bridge "br-private1"
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_host="107.150.29.72"}
Port "br-private1"
Interface "br-private1"
type: internal
ovs_version: "2.3.0"
root@kvmssd01:~# ovs-vsctl show
da6399d4-1435-437d-90d7-3e75c443389b
Bridge br-private
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: …Run Code Online (Sandbox Code Playgroud) ...以下列格式描述填充规则:
范围匹配可以表示为按位匹配的集合.例如,假设目标是匹配TCP源端口1000到1999(包括端点).1000和1999的二进制表示是:
01111101000
11111001111
Run Code Online (Sandbox Code Playgroud)
以下一系列按位匹配将匹配1000和1999以及它们之间的所有值:
01111101xxx
0111111xxxx
10xxxxxxxxx
110xxxxxxxx
1110xxxxxxx
11110xxxxxx
1111100xxxx
Run Code Online (Sandbox Code Playgroud)
可以写成以下匹配:
tcp,tp_src=0x03e8/0xfff8
tcp,tp_src=0x03f0/0xfff0
tcp,tp_src=0x0400/0xfe00
tcp,tp_src=0x0600/0xff00
tcp,tp_src=0x0700/0xff80
tcp,tp_src=0x0780/0xffc0
tcp,tp_src=0x07c0/0xfff0
Run Code Online (Sandbox Code Playgroud)
我正在尝试根据perl中的最小和最大整数值来确定生成这些匹配的正确方法.我查看了模块Bit :: Vector,但我无法弄清楚如何有效地将它用于此目的.
我是 Mininet 和 openvSwitch 的新手。
我知道 mininet 使用我的电脑资源创建了一个虚拟网络。
而且我知道 openvSwitch 创建虚拟交换机。
但是我不明白 mininet 是否使用 openvSwitch 创建的虚拟交换机来创建虚拟网络。
我要做的是通过裸机PC中的Open vSwitch将数据包发送到服务器,而不是在VM上。
为此,我正在考虑以下结构。
服务器电脑
-----------------------------
| ------ |
| |服务器| |
| ------ |
| | veth2(192.168.0.152)|
| | |
| | veth1 |
| ----------- |
| | OVS(br0)| |
| ----------- |
| | eth0(192.168.0.157)|
------- | ---------------------
|
------- | --------
| 客户端电脑|
----------------
用于制作上述环境
,我在下面的命令中做了。
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
ip链接添加veth1类型veth对等名称veth2 ifconfig veth1向上 ifconfig veth2向上
之后,我尝试在客户端和服务器之间建立TCP连接。
我检查了客户端的SYN数据包是否已发送到veth2。但是,服务器无法接收该数据包。
我无法猜测出什么问题以及如何在环境之上做出贡献。
我正在尝试使用带有 RYU SDN 控制器的 tcp 源端口将 TCP 流重定向到特定服务器。这是我的拓扑(第一步很简单):
host -- ovs1 -- ovs2 -- server
Run Code Online (Sandbox Code Playgroud)
ovs1的匹配规则:
match = parse.OFPMatch(in_port=port,eth_type=0x0800, ipv4_dst=server_ip, tcp_src=tcp_pkt.src_port)
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
EventOFPErrorMsg received.
version=0x4, msg_type=0x1, msg_len=0x4c, xid=0x370bf1bf
`-- msg_type: OFPT_ERROR(1)
OFPErrorMsg(type=0x4, code=0x9, data=b'\x04\x0e\x00\x70\x37\x0b\xf1\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x28\x80\x00\x00\x04\x00\x00\x00\x01\x80\x00\x0a\x02')
|-- type: OFPET_BAD_MATCH(4)
|-- code: OFPBMC_BAD_PREREQ(9)
`-- data: version=0x4, msg_type=0xe, msg_len=0x70, xid=0x370bf1bf
`-- msg_type: OFPT_FLOW_MOD(14)
Run Code Online (Sandbox Code Playgroud)
关键是,如果我删除 tcp_src 选项,一切正常,这就是为什么我认为问题与我传递端口的方式有关。
有任何想法吗?
提前致谢!
我正在使用一个 openvswitch 和真实的 sdn 交换机在真实环境中运行交换机测试Switch Test 。
我在 openvswitch 上创建了一个网桥并添加了端口(例如 eth0、eht1)。但我想知道逻辑端口号(如 1、2)哪个命令给我正确的信息。ovs-ofctl show bridge s1节目
1(eth3): mac address etc
2(eth4):
5(eth5):
Run Code Online (Sandbox Code Playgroud)
和ovs-dpctl show
port 2: eth3
port 3: eth4
port 4: eth5
Run Code Online (Sandbox Code Playgroud)
但结果并未显示物理端口到逻辑端口的正确映射。观察者eth5在这两种情况下ofctl给出 5 和dpctl4。有没有办法获得正确的端口 ID。
我个人认为这两个命令都没有给出正确的端口 ID。为了隔离这种情况。在 Mininet 上,我创建了 2 个 openvswitch 并运行dpctl上面的命令,它给了我 1,2,3,4,5,6 作为端口号,但我无法使用这些端口号运行测试。对于这两个开关我使用了 1,2,3 测试执行成功。我的意思是,如果我为一台交换机提供 1,2,3 端口号,为另一台交换机提供 4,5,6 端口号,则测试不会执行。任何帮助深表感谢。
我很困惑下列条款之间:OpenFlow,Open vSwitch,和Mininet。我想了解他们之间的关系。请问,有人可以提供何时以及如何使用它们中的每一个吗?
谢谢你。
openvswitch ×10
mininet ×4
networking ×3
openflow ×3
sdn ×3
linux ×2
ryu ×2
ubuntu ×2
binary ×1
containers ×1
debian ×1
libvirt ×1
lxc ×1
perl ×1
tcp ×1