由于项目需要,最近在着手的搭建物理机SDN网络。在网上找了很多资料,基本都是互相抄的或者翻译官网的,实际上手遇到了很多问题,以下对整个搭建过程进行详细描述,并提供解决其中遇到的某些问题的方式。
一、实验设备
四台电脑:
A: win10系统 作为controller,安装floodlight运行
B:win7系统 作为HOST0,连接到交换机D
C:win10系统 作为HOST1,连接到交换机D
D:ubuntu16 ,安装ovs2.10 ,作为交换机
两张usb网卡,三个网线:为了让计算机充当交换机,D需要连接其他三台计算机,需要多加两张网卡
二、网络结构图
三、配置
配置主要在D主机上,建议在充当交换机的计算机上安装linux系统,方便ovs安装,还有后续的各种脚本操作。首先看上图,D的三张网卡eth0-2,其中只有eth2配置了ip:192.168.1.7,而其他两张网卡没有配置ip,这是由于eth0,eth1都被绑定到网桥br0上,充当交换机的port,工作在混杂模式,这时候并不需要ip,因为只工作在二层。下面是详细的配置命令(默认在root权限下)
首先是eth2的配置:
ifconfig eth2 192.168.1.7 netmask 255.255.255.0
然后是eth0 和eth1的配置
ifconfig eth0 0 #重置eth0的配置
ifconfig eth0 promisc #开启混杂模式
eth1的配置同eth0;
A的配置为
ip:192.168.1.19
掩码:255.255.255.0
网关:192.168.1.1
B的配置为
ip:192.168.0.11
掩码:255.255.255.0
网关:192.168.0.1
C的配置为
ip:192.168.0.17
掩码:255.255.255.0
网关:192.168.0.1
以上就配置完所有的网卡了,这时候利用ping验证连通性,发现
A<--->D 通
B<--->D 不通
C<--->D 不通
B<--->C 不通
这时候因为eth1和eth0已经没有ip所有BC都无法ping通D,自然B<--->C也无法ping通。
接下来利用ovs的指令创建网桥br0,并把eth0,eth1设为其端口
ovs-vsctl add-br br0 #创建网桥
ovs-vsctl add-port br0 eth0 #添加端口eth0
ovs-vsctl add-port br0 eth1 #添加端口eth1
ifconfig br0 192.168.0.1 netmask 255.255.255.0 #配置br0的ip
这时候br0已经创建且地址为192.168.0.1,这里br0的地址为BC的网关地址,从而保证包能到达D。按道理来说这时候BC之间应该就能ping通了,然而测试后发现
B<---> D 通
C<---> D 通
B<---> C 不通
后来发现原因是没有打开linux的转发功能,利用下面命令开启转发:
方法1:
echo 1 > /proc/sys/net/ipv4/ip_forward ##开启端口转发功能,临时生效。
方法2:
永久生效: vim /etc/sysctl.conf ##修改net.ipv4.ip_forward = 1
sysctl -p ##生效配置文件。
这时候,BC之间也能ping通,网络已经联通
在A上运行floodlight,D上使用命令连接:
ovs-vsctl set-controller br0 tcp:192.168.1.19:6653
这时候,BC互相ping通,且在A的floodlight前端页面能够看到网络拓扑,已经流表。网络搭建完成。
四、遇到的主要问题
1.没有搞清eth0,eth1应该工作在混杂模式下
2.没有开启转发功能
注:以上实验结果均没有截图,因为太麻烦了