第1小题:代理访问
-------------温州大学 12网工
一、 实验背景
代理(Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。
二、 实验目的
设有两台 PC 机(Host1,Host2) ,一台 Web 服务器(Server1)提供简单的静态网页访问服务,一台代理服务器(Proxy1)和 Web 服务器提供同样的服务,两台服务器所显示的网页大致相同,但要有显著差别,可以是不同的网页内容或者不同颜色,能够区分彼此即可,如图1.1所示。其中Web 服务器是Host1和Host2都可以访问的,而代理服务器是只有代理用户才可以使用。可以设置 Host1 或 Host2 为代理用户,可以直接从代理服务器访问到网页。
图1.1:网络拓扑示意图
三、 实验环境搭建
在SDN虚拟机的/home/ubuntu/mininet/custom/目录下创建proxy-access.py文件。proxy-access.py是自定义拓扑文件。我们在拓扑中定义了两台主机h1,h2,三台交换机s1,s2,s3,一台服务器server以及一台代理服务器。
四、 实验过程及结果
(一)mininet创建拓扑
创建的proxy-access.py文件内容如下:
"""Custom topology example
Two directly connected switches plus a host for each switch:
host --- switch --- switch --- host
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""
from mininet.topo import Topo
class MyTopo( Topo ):
"Simple topology example."
def __init__( self ):
"Create custom topo."
# Initialize topology
Topo.__init__( self )
# Add hosts and switches
Switch1 = self.addSwitch( 's1' )
Switch2 = self.addSwitch( 's2' )
Switch3 = self.addSwitch( 's3' )
Host1=self.addHost('h1')
Host2=self.addHost('h2')
Server=self.addHost('server')
Proxy=self.addHost('proxy')
# Add links
self.addLink( Switch1,Host1 )
self.addLink( Switch1,Host2 )
self.addLink( Switch1,Switch2 )
self.addLink( Switch3,Switch2 )
self.addLink( Switch2,Server )
self.addLink( Switch3,Proxy )
topos = { 'mytopo': ( lambda: MyTopo() ) }
在终端中输入以下命令建立网络拓扑,并使用pingall命令测试连通性:
>>sudo mn --custom /home/ubuntu/mininet/custom/proxy-access.py --topo mytopo --switch ovsk --controller=remote,ip=192.168.181.129,port=6633
>>pingall
结果如图1.2,1.3所示。
图1.2:建立网络拓扑
图1.3:floodlight网络拓扑
由于floodlight的web界面有bug,创建时多出三台主机。
(二)设置服务器并访问
在mininet中输入以下xterm命令,使h1,h2得到独立窗口:
>>xterm h1 h2
在server和proxy分别开启web服务,如图1.4所示。
图1.4:server和proxy开启web服务
在/ubuntu/home目录下创建两个文件:server.html和proxy.html作为两个服务器的访问页面。页面内容如图1.5,1.6所示。
图1.5:server的web页面
图1.6:proxy的web页面
在node:h1和node:h2分别访问server和proxy,结果如图1.7,1.8所示。
图1.7:h1访问server和proxy
图1.8:h2访问server和proxy
(三)添加流表使h1无法访问proxy
在终端中输入以下命令添加流表:
>>ovs-ofctl add-flow s3 priority=1,in_port=2,dl_src=9a:bc:c3:db:9b:30,actions=drop
其中9a:bc:c3:db:9b:30为h1的mac地址,如图1.9所示,流表添加成功。
图1.9:添加的流表
在流表生效后,再次使流表访问proxy服务器,结果如图1.10所示。
图1.10:h1无法访问proxy服务器
如图1.9所示,h1无法访问proxy服务器,实现题目要求。