2019独角兽企业重金招聘Python工程师标准>>>
本文借鉴了http://www.sdnlab.com/3166.html以及http://www.jianshu.com/p/c9f131b96adf的内容,感谢原作者,首次分享,侵删。
安装OVS
1. 准备工作:安装依赖包:不知道干啥的反正都安装了先
apt-get update
apt-get install -y build-essential
apt-get install build-essential libssl-dev linux-headers-$(uname -r)
apt-get install graphviz autoconf automake bzip2 debhelper dh-autoreconf libssl-dev libtool openssl procps python-all python-qt4 python-twisted-conch python-zopeinterface python-six dkms module-assistant ipsec-tools racoon libc6-dev module- init-tools netbase python-argparse uuid-runtime
2. 下载需要的openvswitch文件,ubuntu14+ovs2.8,解压后。放在/下。
3. 执行以下两个脚本
./boot.sh
./configure --with-linux=/lib/modules/`uname -r`/build
4. make并install
make
make install
make modules_install
5. 加载Open vSwitch模块
/sbin/modprobe openvswitch
6. 利用ovsdb-tool初始化数据库配置
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema
7. 在启动OVS之前,我们需要先启动ovsdb-server配置数据库
ovsdb-server -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --pidfile --detach
(这里应该会报错,告诉你没有/usr/local/var/run/openvswitch/ovsdb-server.pid文件,这时候只要建立一个run,再在run文件夹中建立一个openvswitvh文件夹就好了mkdir)
8. 首次用ovsdb-tool创建数据库时需用ovs-vsctl命令初始化下数据库。
ovs-vsctl --no-wait init
9. 启动OVS主进程
ovs-vswitchd --pidfile --detach
10. 查看OVS进程是否启动。
ps –ef |grep ovs
11. 查看版本号
ovs-vsctl --version
设置ovs交换机(网桥)
1.首先添加一个名为br0的网桥(交换机,到这一步才是利用ovs创建一个虚拟交换机)。
ovs-vsctl add-br br0
注意:进行OVS设置时很容易造成虚拟交换机与物理交换机构成二层环路(比如虚拟交换机包含两块网卡,而这两块网卡都连接到物理交换机上,就是一个环路),一旦有广播报文,比如ARP请求,就会引发广播风暴,使网络瘫痪。因此,应该把虚拟交换机开启STP支持,避免广播风暴:
ovs−vsctl set bridge br0 stp_enable=true
2.启动要添加到虚拟交换机br0上的物理端口(物理网卡,这里是eth0)。如果ifconfig后已经列出来的,就说明已经开启了,就不用重新启动了。
ifconfig eth0 up
3.添加物理端口到虚拟交换机br0
ovs-vsctl add-port br0 eth0
4.设置交换机IP:
OpenFlow交换机与控制器连接需要用到TCP连接,因此交换机需要设置IP。但当把物理端口添加到虚拟交换机上之后,这些物理端口上原先的IP设置将失效(IP属于三层,而交换机工作在二层),无法与外界进行三层的互联。解决方法是添加一个类型为internal的端口,然后设置IP和路由(本例是添加一个名为veth3的虚拟端口):
首先,如果原先端口有设置IP,应将其重置:
ifconfig eth0 0
然后添加虚拟端口:
ovs-vsctl add-port br0 veth0
ovs-vsctl set interface veth0 type=internal
(这里可能会提示重复或者没有这个设备,不管,将vetn0启动一下:ifconfig eth0 up)
这时如果执行ifconfig就会发现多了一个名为veth0的端口。然后设置该端口并添加路由:
ifconfig veth0 172.16.15.2 netmask 255.255.255.0
route add default gw 172.16.15.1 veth0
P.S. 后来看到网上说其实不需要额外添加veth0,因为创建br0后会自动生成一个名为br0的internal端口,直接设置它就可以。
5.用下面的命令将br0网桥连接至一个指定的控制器
ovs-vsctl set-controller br0 tcp:172.16.15.10:6633
常用OVS操作
1.添加网桥:ovs-vsctl add-br 交换机名
2.删除网桥:ovs-vsctl del-br 交换机名
3.添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名)
4.删除端口:ovs-vsctl del-port 交换机名 端口名(网卡名)
5.连接控制器:ovs-vsctl set-controller 交换机名 tcp:IP地址:端口号
6.断开控制器:ovs-vsctl del-controller 交换机名
7.列出所有网桥:ovs-vsctl list-br
8.列出网桥中的所有端口:ovs-vsctl list-ports 交换机名
9.列出所有挂接到网卡的网桥:ovs-vsctl port-to-br 端口名(网卡名)
10.查看open vswitch的网络状态:ovs-vsctl show
11.查看 Open vSwitch 中的端口信息(交换机对应的 dpid,以及每个端口的 OpenFlow 端口编号,端口名称,当前状态等等):ovs-ofctl show 交换机名
12.修改dpid:ovs-vsctl set bridge 交换机名 other_config:datapath-id=新DPID
13.修改端口号:ovs-vsctl set Interface 端口名 ofport_request=新端口号
14.查看交换机中的所有 Table:ovs-ofctl dump-tables ovs-switch
15.查看交换机中的所有流表项:ovs−ofctl dump−flows ovs-switch
16.删除编号为 100 的端口上的所有流表项:ovs-ofctl del-flows ovs-switch "in_port=100"
17.添加流表项(以“添加新的 OpenFlow 条目,修改从端口 p0 收到的数据包的源地址为 9.181.137.1”为例):
ovs-ofctl add-flow ovs-switch "priority=1 idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal"
(更多说明请查阅:《基于 Open vSwitch 的 OpenFlow 践》http://www.linuxidc.com/Linux/2017-06/144770.htm)
18.查看 OVS 的版本信息:ovs-appctl --version
19.查看 OVS 支持的 OpenFlow 协议的版本:ovs-ofctl --version