郑州大学计算机网络实验 脚本程序以及注意事项

脚本

1.1.sh

#!/bin/sh
#设置执行脚本时显式脚本中的Linux命令
set -x
#创建ns1和ns2
ip netns add ns1
ip netns add ns2
#创建veth pair
ip link add tap1 type veth peer name tap1_peer
#迁移tap1和tap1_peer接口
ip link set tap1 netns ns1
ip link set tap1_peer netns ns2
#配置IP地址
ip netns exec ns1 ip addr add local 192.168.50.1/24 dev tap1
ip netns exec ns2 ip addr add local 192.168.50.2/24 dev tap1_peer
#将网络接口状态设置为up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap1_peer up

3.1.sh

#!/bin/sh
#本脚本创建虚拟网络拓扑,并为各接口配置IP地址,但未进行路由配置。
set -x

#开启ip分组转发
sysctl -w net.ipv4.ip_forward=1
#为更好的模拟路由器工作,需关闭Linux防火墙,避免路由器进行IP分片重组
systemctl stop firewalld.service
#关闭Linux反向路径校验
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
#iptables服务,进行TCP相关实验时需要开启,进行ICMP目的不可达实验时也需要开启
systemctl start iptables.service
#启用linux内核的ICMP重定向响应,进行ICMP重定向实验时需要开启
sysctl -w net.ipv4.conf.all.accept_redirects=1

#创建br56A及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br56A
#创建namespace
ip netns add ns56A
#将lo接口上线
ip netns exec ns56A ip link set lo up
#创建veth pair
ip link add tap56A type veth peer name tap56A_p
#把tap迁移到namespace
ip link set tap56A netns ns56A
#把相应tap添加到Bridge中
brctl addif br56A tap56A_p
#配置IP地址
ip netns exec ns56A ip addr add local 192.168.56.126/25 dev tap56A
#将Bridge及相关tap状态设置为up
ip link set br56A up
ip link set tap56A_p up
ip netns exec ns56A ip link set tap56A up
#配置默认路由
ip netns exec ns56A route add default gw 192.168.56.1

#创建br57A及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br57A
#创建namespace
ip netns add ns57A
#将lo接口上线
ip netns exec ns57A ip link set lo up
#创建veth pair
ip link add tap57A type veth peer name tap57A_p
#把tap迁移到namespace
ip link set tap57A netns ns57A
#把相应tap添加到Bridge中
brctl addif br57A tap57A_p
#配置IP地址
ip netns exec ns57A ip addr add local 192.168.57.126/25 dev tap57A
#将Bridge及相关tap状态设置为up
ip link set br57A up
ip link set tap57A_p up
ip netns exec ns57A ip link set tap57A up
#配置默认路由
ip netns exec ns57A route add default gw 192.168.57.1
#为主机57A配置到192.168.57.128/26的路由(进行ICMP重定向实验时删除,以产生ICMP重定向报文)
ip netns exec ns57A route add -net 192.168.57.128/26 gw 192.168.57.125

#创建br57B及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br57B
#创建namespace
ip netns add ns57B
#将lo接口上线
ip netns exec ns57B ip link set lo up
#创建veth pair
ip link add tap57B type veth peer name tap57B_p
#把tap迁移到namespace
ip link set tap57B netns ns57B
#把相应tap添加到Bridge中
brctl addif br57B tap57B_p
#配置IP地址
ip netns exec ns57B ip addr add local 192.168.57.190/26 dev tap57B
#将Bridge及相关tap状态设置为up
ip link set br57B up
ip link set tap57B_p up
ip netns exec ns57B ip link set tap57B up
#配置默认路由
ip netns exec ns57B route add default gw 192.168.57.129

#创建br57C及其相连的主机NS,配置IP和默认路由
#创建Bridge
brctl addbr br57C
#创建namespace
ip netns add ns57C
#将lo接口上线
ip netns exec ns57C ip link set lo up
#创建veth pair
ip link add tap57C type veth peer name tap57C_p
#把tap迁移到namespace
ip link set tap57C netns ns57C
#把相应tap添加到Bridge中
brctl addif br57C tap57C_p
#配置IP地址
ip netns exec ns57C ip addr add local 192.168.57.254/26 dev tap57C
#将Bridge及相关tap状态设置为up
ip link set br57C up
ip link set tap57C_p up
ip netns exec ns57C ip link set tap57C up
#配置默认路由
ip netns exec ns57C route add default gw 192.168.57.193
#为主机57C配置到192.168.57.0/24的路由(可以不配置,会产生ICMP重定向报文)
ip netns exec ns57C route add -net 192.168.57.0/24 gw 192.168.57.253

#创建各路由器NS
ip netns add RA
ip netns add RB
ip netns add RC
ip netns add RD
ip netns add RE
#各路由器lo接口上线
ip netns exec RA ip link set lo up
ip netns exec RB ip link set lo up
ip netns exec RC ip link set lo up
ip netns exec RD ip link set lo up
ip netns exec RE ip link set lo up

#连接路由器RC和网桥br57A
#创建veth pair
ip link add tapRC_57A type veth peer name tap57A_RC
#把tap迁移到路由器和网桥
ip link set tapRC_57A netns RC
brctl addif br57A tap57A_RC
#配置相应tap的IP地址
ip netns exec RC ip addr add local 192.168.57.1/25 dev tapRC_57A
#将相关tap状态设置为up
ip netns exec RC ip link set tapRC_57A up
ip link set tap57A_RC up

#连接路由器RE和网桥br57A
#创建veth pair
ip link add tapRE_57A type veth peer name tap57A_RE
#把tap迁移到路由器和网桥
ip link set tapRE_57A netns RE
brctl addif br57A tap57A_RE
#配置相应tap的IP地址
ip netns exec RE ip addr add local 192.168.57.125/25 dev tapRE_57A
#将相关tap状态设置为up
ip netns exec RE ip link set tapRE_57A up
ip link set tap57A_RE up

#连接路由器RE和网桥br57B
#创建veth pair
ip link add tapRE_57B type veth peer name tap57B_RE
#把tap迁移到路由器和网桥
ip link set tapRE_57B netns RE
brctl addif br57B tap57B_RE
#配置相应tap的IP地址
ip netns exec RE ip addr add local 192.168.57.129/26 dev tapRE_57B
#将相关tap状态设置为up
ip netns exec RE ip link set tapRE_57B up
ip link set tap57B_RE up

#连接路由器RE和网桥br57C
#创建veth pair
ip link add tapRE_57C type veth peer name tap57C_RE
#把tap迁移到路由器和网桥
ip link set tapRE_57C netns RE
brctl addif br57C tap57C_RE
#配置相应tap的IP地址
ip netns exec RE ip addr add local 192.168.57.253/26 dev tapRE_57C
#将相关tap状态设置为up
ip netns exec RE ip link set tapRE_57C up
ip link set tap57C_RE up

#连接路由器RD和网桥br57C
#创建veth pair
ip link add tapRD_57C type veth peer name tap57C_RD
#把tap迁移到路由器和网桥
ip link set tapRD_57C netns RD
brctl addif br57C tap57C_RD
#配置相应tap的IP地址
ip netns exec RD ip addr add local 192.168.57.193/26 dev tapRD_57C
#将相关tap状态设置为up
ip netns exec RD ip link set tapRD_57C up
ip link set tap57C_RD up

#连接路由器RB和网桥br56A
#创建veth pair
ip link add tapRB_56A type veth peer name tap56A_RB
#把tap迁移到路由器和网桥
ip link set tapRB_56A netns RB
brctl addif br56A tap56A_RB
#配置相应tap的IP地址
ip netns exec RB ip addr add local 192.168.56.1/25 dev tapRB_56A
#将相关tap状态设置为up
ip netns exec RB ip link set tapRB_56A up
ip link set tap56A_RB up

#连接路由器RA和路由器RB
#创建veth pair
ip link add tapRA_RB type veth peer name tapRB_RA
#把tap迁移到路由器
ip link set tapRA_RB netns RA
ip link set tapRB_RA netns RB
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.56.246/30 dev tapRA_RB
ip netns exec RB ip addr add local 192.168.56.245/30 dev tapRB_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RB up
ip netns exec RB ip link set tapRB_RA up

#连接路由器RA和路由器RC
#创建veth pair
ip link add tapRA_RC type veth peer name tapRC_RA
#把tap迁移到路由器
ip link set tapRA_RC netns RA
ip link set tapRC_RA netns RC
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.56.249/30 dev tapRA_RC
ip netns exec RC ip addr add local 192.168.56.250/30 dev tapRC_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RC up
ip netns exec RC ip link set tapRC_RA up

#连接路由器RA和路由器RD
#创建veth pair
ip link add tapRA_RD type veth peer name tapRD_RA
#把tap迁移到路由器
ip link set tapRA_RD netns RA
ip link set tapRD_RA netns RD
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.56.253/30 dev tapRA_RD
ip netns exec RD ip addr add local 192.168.56.254/30 dev tapRD_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RD up
ip netns exec RD ip link set tapRD_RA up

#连接路由器RA和Linux Host
#创建veth pair
ip link add tapRA_H type veth peer name tapH_RA
#把tap迁移到路由器
ip link set tapRA_H netns RA
#配置相应tap的IP地址
ip netns exec RA ip addr add local 192.168.99.100/24 dev tapRA_H
ip addr add local 192.168.99.1/24 dev tapH_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_H up
ip link set tapH_RA up
#为Linux Host配置到虚拟实验网络的路由
route add -net 192.168.56.0/23 gw 192.168.99.100

#END

3.2.sh

#!/bin/sh
#本脚本为虚拟网络拓扑进行静态路由配置。
set -x

#各路由器的直连路由,已经在script3.1中设置IP地址时自动生成了,无需手动配置
#RA路由(最长前缀匹配)
ip netns exec RA route add -net 192.168.57.0/24 gw 192.168.56.250
ip netns exec RA route add -net 192.168.57.192/26 gw 192.168.56.254
ip netns exec RA route add -net 192.168.56.0/25 gw 192.168.56.245
#默认路由,(进行ICMP目的不可达实验时删除,以产生网络不可达 #ICMP3-0)
ip netns exec RA route add default gw 192.168.99.1
#RB路由
ip netns exec RB route add default gw 192.168.56.246
#RC路由
ip netns exec RC route add -net 192.168.57.128/25 gw 192.168.57.125
ip netns exec RC route add default gw 192.168.56.249
#RD路由(最长前缀匹配)
ip netns exec RD route add -net 192.168.57.0/24 gw 192.168.57.253
ip netns exec RD route add default gw 192.168.56.253
#RE路由
ip netns exec RE route add default gw 192.168.57.1

#end

3.3.sh

#!/bin/sh
#本脚本关闭网卡offload功能。
set -x

#关闭各主机网卡GSO功能,网卡不再替CPU进行TCP\UDP分片
ip netns exec ns56A ethtool -K tap56A gso off
ip netns exec ns57A ethtool -K tap57A gso off
ip netns exec ns57B ethtool -K tap57B gso off
ip netns exec ns57C ethtool -K tap57C gso off
#关闭各主机网卡的校验和计算功能,网卡不再替CPU进行TCP\UDP校验和计算
ip netns exec ns56A ethtool -K tap56A tx off rx off
ip netns exec ns57A ethtool -K tap57A tx off rx off
ip netns exec ns57B ethtool -K tap57B tx off rx off
ip netns exec ns57C ethtool -K tap57C tx off rx off

#END

11.1.sh

#!/bin/sh
#本脚本增加了一台主机ns56B。
set -x

#创建主机ns56B、连接到网桥br56A,配置IP和默认路由
ip netns add ns56B
ip netns exec ns56B ip link set lo up
ip link add tap56B type veth peer name tap56B_p
ip link set tap56B netns ns56B
brctl addif br56A tap56B_p
ip netns exec ns56B ip addr add local 192.168.56.125/25 dev tap56B
ip link set tap56B_p up
ip netns exec ns56B ip link set tap56B up
ip netns exec ns56B route add default gw 192.168.56.1
#END

注意事项

1.实验九没有成功完成,故不提供9.1.sh,9.2.sh,RIP-RA.conf,RIP-RB.conf,RIP-RC.conf,RIP-RD.conf,RIP-RE.conf。

2.当脚本或指令运行时出现问题时,很大可能是权限问题。如果是运行脚本文件,首先要确保文件的属性栏为可以被运行。实验室的电脑默认为root用户启动,不用担心权限问题。如果是自己安装的centos,建议设置默认开机即为root用户启动。

3.如果在安装wireshark时出现问题,可以参考这篇文章基于centos安装wireshark开发环境_基于wireshark开发-优快云博客

实验难度不高,基本按照老师的视频指导进行就可以很好地完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值