GNS3使用Docker

本文介绍了如何在GNS3环境中利用Docker进行网络实验,包括通过VMware或VirtualBox引入虚拟机以及使用Docker容器。重点讲述了如何在Docker容器中配置iptables进行网络访问控制,并通过案例展示了如何拒绝和不响应ping请求。GNS3结合Docker为网络学习提供了便捷且高度定制化的实验平台。
摘要由CSDN通过智能技术生成

背景:

上一篇文章: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 很轻量,定制性也很高。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值