前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 中配置SDN服务

Linux 中配置SDN服务

作者头像
冷影玺
发布2023-10-11 19:06:08
1930
发布2023-10-11 19:06:08
举报
文章被收录于专栏:冷影玺冷影玺

题目需求:

Linux 中配置SDN服务_python
Linux 中配置SDN服务_python

实验压缩包获取:

代码语言:javascript
复制
链接:https://pan.baidu.com/s/1L0uiuHme9j44mnr8xPgyMA 
提取码:lyxi
拓扑实战构建

解压opendayligh软件包,运行启动:

代码语言:javascript
复制
root@Ispsrv:~# ls
111.txt  distribution-karaf-0.6.0-Carbon.zip  mininet_2.2.2-4_amd64.deb
root@Ispsrv:~# unzip -o distribution-karaf-0.6.0-Carbon.zip -d /root
Archive:  distribution-karaf-0.6.0-Carbon.zip
   creating: /root/distribution-karaf-0.6.0-Carbon/
   creating: /root/distribution-karaf-0.6.0-Carbon/configuration/
   creating: /root/distribution-karaf-0.6.0-Carbon/data/
   creating: /root/distribution-karaf-0.6.0-Carbon/data/tmp/
   creating: /root/distribution-karaf-0.6.0-Carbon/deploy/
   creating: /root/distribution-karaf-0.6.0-Carbon/etc/
   creating: /root/distribution-karaf-0.6.0-Carbon/lib/
   creating: /root/distribution-karaf-0.6.0-Carbon/lib/bin/
   creating: /root/distribution-karaf-0.6.0-Carbon/lib/endorsed/
   creating: /root/distribution-karaf-0.6.0-Carbon/lib/ext/
   creating: /root/distribution-karaf-0.6.0-Carbon/system/
   creating: /root/distribution-karaf-0.6.0-Carbon/system/biz/
.........................
.........................
.........................
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/stop
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/client.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/instance.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/karaf.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/setenv.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/shell.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/start.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/status.bat
  inflating: /root/distribution-karaf-0.6.0-Carbon/bin/stop.bat

配置java环境变量:

代码语言:javascript
复制
root@Ispsrv:~# apt install openjdk-8-jdk -y

查看java环境变量的安装包:

代码语言:javascript
复制
root@Ispsrv:~# cd /usr/lib/jvm
root@Ispsrv:/usr/lib/jvm# ls -l
总用量 0
lrwxrwxrwx 1 root root  20 3月  19  2019 java-1.8.0-openjdk-amd64 -> java-8-openjdk-amd64
drwxr-xr-x 7 root root 144 7月  10 13:07 java-8-openjdk-amd64
root@Ispsrv:/usr/lib/jvm#

写入到开机加载文件:

代码语言:javascript
复制
root@Ispsrv:/usr/lib/jvm# echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64' >> /etc/profile

检查一下写入情况:

代码语言:javascript
复制
root@Ispsrv:/usr/lib/jvm# tail -f /etc/profile
if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
tty | egrep -q tty[1-6] && export LC_ALL=C
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64

^C  键盘CTRL+C退出

加载环境变量:

代码语言:javascript
复制
root@Ispsrv:/usr/lib/jvm# source /etc/profile
root@Ispsrv:/usr/lib/jvm#

执行启动:

代码语言:javascript
复制
root@Ispsrv:~# cd distribution-karaf-0.6.0-Carbon/bin/
root@Ispsrv:~/distribution-karaf-0.6.0-Carbon/bin# ./karaf
Linux 中配置SDN服务_html_02
Linux 中配置SDN服务_html_02

安装组件:

代码语言:javascript
复制
feature:install odl-restconf
feature:install odl-l2switch-switch-ui
feature:install odl-mdsal-apidocs
feature:install odl-dluxapps-applications

# 进行执行
opendaylight-user@root>feature:install odl-restconf
opendaylight-user@root>feature:install odl-l2switch-switch-ui
opendaylight-user@root>feature:install odl-mdsal-apidocs
opendaylight-user@root>feature:install odl-dluxapps-applications

本机IP进行浏览器访问:

代码语言:javascript
复制
http://81.6.63.100:8181/index.html
Linux 中配置SDN服务_python_03
Linux 中配置SDN服务_python_03

可以看到现在无拓扑图:

Linux 中配置SDN服务_bash_04
Linux 中配置SDN服务_bash_04
构建组拓扑图

安装mininet软件包:

代码语言:javascript
复制
root@Ispsrv:~# apt --fix-broken install -y
root@Ispsrv:~# sudo apt --fix-broken install
root@Ispsrv:~# dpkg -i mininet_2.2.2-4_amd64.deb
(正在读取数据库 ... 系统当前共安装有 92616 个文件和目录。)
准备解压 mininet_2.2.2-4_amd64.deb  ...
正在解压 mininet (2.2.2-4) 并覆盖 (2.2.2-4) ...
正在设置 mininet (2.2.2-4) ...
正在处理用于 man-db (2.8.5-2) 的触发器 ...

安装ovs软件平台:

代码语言:javascript
复制
root@Ispsrv:~# apt install openvswitch-switch -y

构建拓扑:

代码语言:javascript
复制
mn --controller=remote,ip=81.6.63.100,port=6653 --topo=single,3 --switch=ovs,protocols=OpenFlow10

--controller=CONTROLLER:指定远程控制器
remote:远程主机
ip:远程地址
port:表示端口
--topo=TOPO:指定拓扑类型
single,m:创建拓扑为星型拓扑,m表示m个主机
--switch=SWITCH:指定交换机类型
ovs:使用交换机的类型

执行结果:

代码语言:javascript
复制
root@Ispsrv:~# mn --controller=remote,ip=81.6.63.100,port=6653 --topo=single,3 --switch=ovs,protocols=OpenFlow10
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1) (h3, s1)
*** Configuring hosts
h1 h2 h3
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>

查看拓扑图:

Linux 中配置SDN服务_python_05
Linux 中配置SDN服务_python_05
网络通信规则

测试网络是否互通:

代码语言:javascript
复制
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2 h3
h2 -> h1 h3
h3 -> h1 h2
*** Results: 0% dropped (6/6 received)
mininet>

进行手动下发流表:

代码语言:javascript
复制
mininet> sh ovs-ofctl add-flow s1 in_port=2,actions=drop
mininet> pingall
*** Ping: testing ping reachability
h1 -> X h3
h2 -> X X
h3 -> h1 X
*** Results: 66% dropped (2/6 received)
mininet>

注:####出现66%才表示成功####

查看端口(若出现三个表示成功)

代码语言:javascript
复制
mininet> sh netstat -an | grep 6653
tcp        0      0 81.6.63.100:58912       81.6.63.100:6653        ESTABLISHED
tcp6       0      0 :::6653                 :::*                    LISTEN
tcp6       0      0 81.6.63.100:6653        81.6.63.100:58912       ESTABLISHED
mininet>

查看交换机的流表:

代码语言:javascript
复制
mininet> sh ovs-ofctl dump-flows s1
 cookie=0x2b00000000000000, duration=411.116s, table=0, n_packets=15, n_bytes=1022, priority=2,in_port="s1-eth3" actions=output:"s1-eth1",output:"s1-eth2",CONTROLLER:65535
 cookie=0x2b00000000000001, duration=411.114s, table=0, n_packets=12, n_bytes=728, priority=2,in_port="s1-eth1" actions=output:"s1-eth3",output:"s1-eth2",CONTROLLER:65535
 cookie=0x2b00000000000002, duration=411.111s, table=0, n_packets=11, n_bytes=826, priority=2,in_port="s1-eth2" actions=output:"s1-eth3",output:"s1-eth1",CONTROLLER:65535
 cookie=0x0, duration=191.126s, table=0, n_packets=35, n_bytes=1722, in_port="s1-eth2" actions=drop
 cookie=0x2b00000000000000, duration=412.993s, table=0, n_packets=0, n_bytes=0, priority=100,dl_type=0x88cc actions=CONTROLLER:65535
 cookie=0x2a00000000000000, duration=295.955s, table=0, n_packets=8, n_bytes=560, idle_timeout=600, hard_timeout=300, priority=10,dl_src=ae:f7:7a:66:69:42,dl_dst=a2:8e:a4:d6:60:0f actions=output:"s1-eth2"
 cookie=0x2a00000000000001, duration=295.955s, table=0, n_packets=1, n_bytes=42, idle_timeout=600, hard_timeout=300, priority=10,dl_src=a2:8e:a4:d6:60:0f,dl_dst=ae:f7:7a:66:69:42 actions=output:"s1-eth1"
 cookie=0x2a00000000000002, duration=295.940s, table=0, n_packets=9, n_bytes=602, idle_timeout=600, hard_timeout=300, priority=10,dl_src=ae:f7:7a:66:69:42,dl_dst=3e:02:6b:aa:2d:2a actions=output:"s1-eth3"
 cookie=0x2a00000000000003, duration=295.939s, table=0, n_packets=9, n_bytes=602, idle_timeout=600, hard_timeout=300, priority=10,dl_src=3e:02:6b:aa:2d:2a,dl_dst=ae:f7:7a:66:69:42 actions=output:"s1-eth1"
 cookie=0x2a00000000000004, duration=295.932s, table=0, n_packets=1, n_bytes=42, idle_timeout=600, hard_timeout=300, priority=10,dl_src=a2:8e:a4:d6:60:0f,dl_dst=3e:02:6b:aa:2d:2a actions=output:"s1-eth3"
 cookie=0x2a00000000000005, duration=295.927s, table=0, n_packets=5, n_bytes=266, idle_timeout=600, hard_timeout=300, priority=10,dl_src=3e:02:6b:aa:2d:2a,dl_dst=a2:8e:a4:d6:60:0f actions=output:"s1-eth2"
 cookie=0x2b00000000000000, duration=412.993s, table=0, n_packets=3, n_bytes=270, priority=0 actions=drop
mininet>

查看交换机的流表(有dorp)

代码语言:javascript
复制
mininet> sh ovs-ofctl dump-flows s1 | grep "in_port=2"
 cookie=0x2b00000000000002, duration=532.888s, table=0, n_packets=11, n_bytes=826, idle_age=417, priority=2,in_port=2 actions=output:3,output:1,CONTROLLER:65535
 cookie=0x0, duration=312.903s, table=0, n_packets=36, n_bytes=1792, idle_age=55, in_port=2 actions=drop
mininet>

使用iperf工具测试h1和h3的带宽:

代码语言:javascript
复制
mininet> iperf h1 h3
*** Iperf: testing TCP bandwidth between h1 and h3
*** Results: ['754 Mbits/sec', '755 Mbits/sec']
mininet>

h1启动HTTP—Server功能:

代码语言:javascript
复制
mininet> h1 python -m SimpleHTTPServer 8080 &

查看h1的地址:

代码语言:javascript
复制
mininet> h1 ip add
Serving HTTP on 0.0.0.0 port 8080 ...
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: h1-eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ae:f7:7a:66:69:42 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.0.1/8 brd 10.255.255.255 scope global h1-eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::acf7:7aff:fe66:6942/64 scope link
       valid_lft forever preferred_lft forever
mininet>

查看端口:

代码语言:javascript
复制
mininet> sh ss -lntp | grep 8080
LISTEN   0        50                          *:8080                   *:*       users:(("java",pid=4012,fd=353))                     
mininet>

安装wget:

代码语言:javascript
复制
root@Ispsrv:~# apt install wget -y

获取h1的html网页配置:

代码语言:javascript
复制
mininet> h3 wget -O h1 http://10.0.0.1:8080
--2023-07-10 13:45:09--  http://10.0.0.1:8080/
正在连接 10.0.0.1:8080... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:826 [text/html]
正在保存至: “10.0.0.1”

10.0.0.1            100%[===================>]     826  --.-KB/s  用时 0s

2023-07-10 13:45:09 (251 MB/s) - 已保存 “10.0.0.1” [826/826])

mininet>

安装curl:

代码语言:javascript
复制
root@Ispsrv:~# apt install curl -y

使用h3访问h1的网页:

代码语言:javascript
复制
mininet>  h3 curl 10.0.0.1:8080
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href=".bash_history">.bash_history</a>
<li><a href=".bashrc">.bashrc</a>
<li><a href=".cache/">.cache/</a>
<li><a href=".gnupg/">.gnupg/</a>
<li><a href=".karaf/">.karaf/</a>
<li><a href=".profile">.profile</a>
<li><a href=".viminfo">.viminfo</a>
<li><a href=".Xauthority">.Xauthority</a>
<li><a href="10.0.0.1">10.0.0.1</a>
<li><a href="111.txt">111.txt</a>
<li><a href="distribution-karaf-0.6.0-Carbon/">distribution-karaf-0.6.0-Carbon/</a>
<li><a href="distribution-karaf-0.6.0-Carbon.zip">distribution-karaf-0.6.0-Carbon.zip</a>
<li><a href="mininet_2.2.2-4_amd64.deb">mininet_2.2.2-4_amd64.deb</a>
<li><a href="nohup.out">nohup.out</a>
</ul>
<hr>
</body>
</html>
mininet>

测试访问:

代码语言:javascript
复制
mininet> h3 curl -I 10.0.0.1:8080
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/2.7.16
Date: Mon, 10 Jul 2023 05:47:24 GMT
Content-type: text/html; charset=UTF-8
Content-Length: 826

mininet>

杀死h1的网页python程序:

代码语言:javascript
复制
mininet> h1 kill %python
10.0.0.3 - - [10/Jul/2023 13:45:09] "GET / HTTP/1.1" 200 -
10.0.0.3 - - [10/Jul/2023 13:46:56] "GET / HTTP/1.1" 200 -
10.0.0.3 - - [10/Jul/2023 13:47:24] "HEAD / HTTP/1.1" 200 -
mininet>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目需求:
    • 拓扑实战构建
      • 构建组拓扑图
        • 网络通信规则
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档