背景:
上一篇文章:GNS3 mac环境安装并搭建vlan_ykdsg的博客-CSDN博客_gns3 mac 描述了这么快速使用GNS3,这个时候可以做一般的网络实验了。但是在网络的学习过程中会涉及很多linux环境,例如iptables、OpenvSwitch 等都需要在 linux中配置。在GNS3 中有几种方式可以实现:
1.通过VMware 或者VirtualBox等虚拟机来引入。这个比较简单,基本就是安装好虚拟机,在GNS3 的配置界面中新增对应的虚拟机就行了。
需要注意的是勾上 Use as linked base VM,这样在project里面新增一个的时候会以这个为模板新增一个,不然每次都要在虚拟机中手动新增比较麻烦。
但是遇到过我在对应的虚拟机里安装了 OpenvSwitch,结果在新生成的vm里没找到的奇怪现象。
2.通过Docker 容器来引入,比较轻量,而且容器的定制化很高。
准备工作
需要安装GNS3 VM,只有这样才能使用docker,实际上docker 是运行在这个VM 中的。
首先是下载对应虚拟机的vm,注意vm版本需要跟GNS3的版本一致。
因为已经使用了VirtualBox,我就下了这个版本。网上教程较多的使用VMware,而且实际运行过程中也发现VirtualBox 有时候不太灵光。
安装过程还是简单的,下载完用VirtualBox打开就行了。
接着在GNS3中进行配置:
保存之后,GNS3 就会启动这个vm,然后每次打开GNS3之后都会自动带起这个vm。
vm启动后出现一个界面:
根据上面的ip地址,用户名密码就可以ssh上去了。
刚开始的界面是这样的(是不是很神奇),选择shell,点击ok,就进入到熟悉的黑乎乎的界面了。
接下来执行 sudo passwd ,为 root 用户设置密码,就可以切换到 root 权限了。
制作Docker镜像
里面很贴心的安装好了docker。
制作镜像有很多种方法了,这里简单说下通过DockerFile的方法:
1.建一个目录 project-docker/ubuntu_18
2.新建一个文件:Dockerfile,这个时候会发现居然没有vi,勉为其难用nano 顶一下吧。
FROM ubuntu:18.04
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get -y update && apt-get -y install vim tmux iputils-ping net-tools iproute2 tcpdump netcat curl iptables ebtables python3
WORKDIR /root
CMD /bin/bash
最后一行很重要,后面能够通过GNS3的界面直接进入console。也可以安装下docker 的国内源,这个在后面安装其他docker 镜像的时候会比较有用。
然后执行:
docker build -t myubuntu .
结束之后可以看到当前的image。
GNS3中添加docker容器。
点New
到网卡这个界面,可以多设置几个
之后就一路Next。
使用Docker
这里简单演示下iptables。拓扑图比较简单
这里就不用什么2层、3层设备了,2台主机直接直连。 启动之后,双击设备可以进入控制台。
可以看到没有配置ip,先进行配置
ifconfig eth0 1.1.1.10/24
第一台设置ip为:1.1.1.10;第二胎设置ip为1.1.1.11。这个时候从第一台ping 第二台,是联通的,反过来也是一样。
case1:不响应ping
现在设置PC2 不能ping PC1 :
iptables -t filter -A INPUT -s 1.1.1.11 -d 1.1.1.10 -p icmp --icmp-type 8 -j DROP
查看配置表:
iptables -L -n
大概意思是:在INPUT链增加一条规则,源ip(-s) 1.1.1.11 到目的ip(-d)1.1.1.10,通过icmp协议,那么就DROP(不拒接,不响应)。
这个时候再看下PC2 ping的情况:
会发现没有任何反应。
可以通过抓包来看下具体协议,在连接的那条线上右键:
会打开WireShark。
会看到只有request的请求,没有replay的回复。
case2:拒绝ping
看一下拒绝的情况,先清理之前设置的规则
iptables -F
设置reject规则
iptables -t filter -A INPUT -s 1.1.1.11 -d 1.1.1.10 -p icmp --icmp-type 8 -j REJECT
这个时候再通过PC2 来ping PC1,会明确提示:Destination Port Unreachable
通过wireshark 能看到,这次是有来有回的,PC1明确返回了unreachable。
结尾:
GNS3支持docker 后可以很方便的模拟很多实验场景,而且docker 很轻量,定制性也很高。