在损失性能的条件下,Open vSwitch可完全的运行在用户空间,无需内核模块的协助。本文解释如何安装工作在此模式的Open vSwitch.
此版本的Open vSwitch应当手动使用configure
和 make
进行编译。Debian的Open vSwitch软件包虽然也支持此功能,但是近期未进行测试,所有在使用Open vSwitch的此功能时不建议通过Debian软件包安装。
警告:
Open vSwitch的无DPDK支持用户空间模式被认为是实现性质的,没有经过彻底的测试.
编译和安装
编译、安装和配置Open vSwitch的要求和步骤与其文档general
中描述的相同。此处你可以省略配置、编译和安装内核模块以及相关要求。
在Linux上,用户空间交换机还要求内核TUN/TAP驱动程序可用,要么内置在内核中,要么可作为模块加载。如果不确定,请检查名为/sys/class/misc/tun
的目录。如果不存在,则尝试使用modprobe tun
加载模块。
tun设备也必须存在于以下目录/dev/net/tun
。如果不存在,则使用命令mkdir /dev/net
创建/dev/net
目录(如有必要),然后使用命令mknod/dev/net/tun c 10 200
创建/dev/net/tun
设备节点。
在FreeBSD和NetBSD上,用户空间交换机还要求内核tap(4)驱动程序可用,要么内置到内核中,要么作为模块加载。
使用ovs-vswitchd的用户空间数据路径
为在用户空间模式使用ovs-vswitchd,创建网桥,配置数据库参数datapath_type=netdev
,例如:
$ ovs-vsctl add-br br0
$ ovs-vsctl set bridge br0 datapath_type=netdev
$ ovs-vsctl add-port br0 eth0
$ ovs-vsctl add-port br0 eth1
$ ovs-vsctl add-port br0 eth2
ovs-vswitchd将创建一个TAP设备作为网桥的本地接口,与网桥名称相同,并为每个配置的内部接口命名。
ovs-vswitchd will create a TAP device as the bridge’s local interface, named the same as the bridge, as well as for each configured internal interface.
目前,在FreeBSD上,没有实现支持带内控制所需的功能。为了避免相关错误,可以使用以下命令禁用带内支持:
$ ovs-vsctl set bridge br0 other_config:disable-in-band=true
防火墙规则
在Linux上,当用户空间数据路径使用物理接口时,接口上接收到的数据包仍会传递到内核TCP/IP堆栈中。这会导致意外和错误的行为。你可以使用iptables
命令来避免这种行为,方法是使用它来丢弃接收到的数据包。例如,丢弃eth0上接收到的数据包:
$ iptables -A INPUT -i eth0 -j DROP
$ iptables -A FORWARD -i eth0 -j DROP
其它设置
在NetBSD上,根据你的网络拓扑结构和应用程序,以下配置可能会有所帮助。参见sysctl(7)。:
$ sysctl -w net.inet.ip.checkinterface=1