实现SDN网络的逻辑隔离

来源:互联网 发布:淘宝摄影 收费标准 编辑:程序博客网 时间:2024/05/03 15:28

1.场景:设有一台PC机,两台服务器AB与同一交换机直连,服务器AB都提供远程桌面登录服务。(这里的PC机、服务器、交换机可以选择物理设备或者虚拟机实现)。

2.目的:通过控制层对网络的控制,实现PC机可以分别登录服务器AB但是AB之间相互访问不了(无论是在实际环境还是在仿真环境实现目的均可)。

3.针对采用OpenFlow的参考示例:(具体方案可自由发挥)参考的网络拓扑如图2所示,通过对流表的修改与编辑,使得访问AB的流能够被区分出来,如果是A访问B或者B访问A的流则自动丢弃,否则正常处理。

4.报告书要求:

(1)简要描述网络拓扑,给出拓扑图,若有前面小题中没有提及的设备、软件等构件,则在此详细说明。

(2)给出操作步骤。

(3)给出实验数据(界面截图、表格等都可),证明目的已经实现。



实验步骤如下:

       在编写具体实验之前,我觉得这个网络环境要求实现的是逻辑隔离,在传统网络这个也可以很快的实现,即在两台交换机上面添加ACL访问控制列表也可以进行实现,不过这个配置需要远程登录到两台交换机上面进行配置。通过SDN网络来实现的话,分离了数据层面和控制层面,这样我们只需要在控制器上面进行相关的配置就可以了。

       传统的交换机根据标准协议来形成FIB,这部分的代码是封装在交换机的操作系统中的,交换机的管理者不能对FIB的形成进行修改,这样做的优势在于保证了交换机的速率和可靠性。但是,管理者不能根据网络的具体业务对交换机的转发行为进行专门的定制和设计,这样既浪费了运营的成本,又影响新业务。

       SDN交换机,现在用的比较多的是openflow交换机,分离了控制层面和转发层面,FIB表可以在本地进行配置,也可以在控制器远程进行修改。在实际环境中,控制器可以从全网的角度对每一个交换机的流表通过修改流表的方式进行配置,实现全网新业务的提供,也降低了运营的成本。

       下面的几幅图能够更好地阐释传统的设备、SDN设备以及openflow switch的区别:



具体实现如下:

(1)具体的SDN网络搭建在前面的读书笔记中已经有了描述,这里就不再重复,我们使左边和右边的机器都不ping通(具体实现见前面);

(2)这时通过OVS来进行添加流表,使台式机可以ping通右边的机器,但是右边的两台机器的条目不进行添加,这样就保证了实验的要求,如下:

<span style="font-size:18px;">          ovs-ofctl add-flow s3 dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02,actions=normal</span>
<span style="font-size:18px;">          ovs-ofctl add-flow s3 dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:03,actions=normal</span>

<span style="font-size:18px;">          ovs-ofctl add-flow s4 dl_src=00:00:00:00:00:02,dl_dst=00:00:00:00:00:01,actions=normal</span>
<pre name="code" class="plain"><span style="font-size:18px;">          ovs-ofctl add-flow s4 dl_src=00:00:00:00:00:03,dl_dst=00:00:00:00:00:01,actions=normal</span>

<pre name="code" class="plain"><span style="font-size:18px;">          ovs-ofctl add-flow s4 dl_src=00:00:00:00:00:03,dl_dst=00:00:00:00:00:02,actions=drop</span>
<span style="font-size:18px;">          ovs-ofctl add-flow s4 dl_src=00:00:00:00:00:02,dl_dst=00:00:00:00:00:03,actions=drop</span>

    这样就可以实现左边可以ping通右边两台主机,而右边两台主机不能相互ping通。

(3)在主机作为服务器来运行,只需要开启相对应的服务即可:(在右边的两台主机上面)

在ubuntu环境下开启SSH服务:

1、首先安装ssh服务安装包:

<span style="font-size:18px;">    sudo apt-get install openssh-server</span>

2、安装完后,查看是否运行SSH服务进程:

<span style="font-size:18px;">     ps -ef | grep ssh</span>

3、如果没有,则重新开启ssh服务:

<span style="font-size:18px;">    sudo /etc/init.d/ssh resart</span>

(4)左边的主机可以通过ssh address of ip来远程登录右边的服务器了。


        最后一个实验跟这个一样,不同的是右边为web服务器:

在ubuntu环境下搭建web服务器:

1、安装Apache2:

      Apache2的是作为一个ubuntu的软件包,因此我们可以直接用下面命令安它:

  <span style="font-size:18px;">     sudo apt-get install apache2</span>

2、访问web页面:

      浏览器到http://192.168.0.23,你应该看到Apache2的测试页:

  Apache2首页

           其中 Apache的默认文档根目录是在ubuntu上的/var/www目录 ,配置文件是/etc/apache2/apache2.conf。配置存储在的子目录在/etc/apache2目录。

3、修改另一台主机的静态页面进行区分:

      直接安装PHP5和Apache的PHP5的模块,如下:

<span style="font-size:18px;">     sudo apt-get install php5 libapache2-mod-php5</span>

     安装完需要重启

   /etc/init.d/apache2 restart

4、测试的PHP5并获取PHP5安装的详细信息:

      默认网站的文件根目录是在/var/www下中,现在我们将在该目录中创建一个小型PHP文件(info.php的)在浏览器中调用它。该文件将显示很多关于我们的PHP安装,如安装的PHP版本和有用的一些细节。

<span style="font-size:18px;">    vim /var/www/info.php</span>
<span style="font-size:18px;"></span><p><span style="font-size:18px;"><?php</span></p><p><span style="font-size:18px;">phpinfo();</span></p><p><span style="font-size:18px;">?></span></p>

       现在可以用浏览器访问例如http://192.168.0.23/info.php文件

        这样正好区别两台不同页面的web服务器。

        以上两个实验就此完成!

     


     


0 0