使用eNSP,VMware搭建网络平台,Linux中通过Docker搭建应用管理系统,在eNSP中的主机里可以访问

发布时间 2023-08-10 20:31:57作者: yezheng

课程设计要求
拓扑图
部署过程
总结

1.课程设计要求

使用eNSP,VMware搭建网络平台,Linux中通过Docker搭建应用管理系统,在eNSP中的主机里可以访问。

2.拓扑图

![](C:\Users\31223\Pictures\Screenshots\屏幕截图 2023-08-10 133154.png)

设备:云,主机(client机)


3.部署过程

实验1:docker搭建wordpress博客平台,实现用ensp的pc能访问。

实验环境:eNSP,vmware的kali linux,docker环境。

实验过程:

1)eNSP和vmware通信拓扑搭建

注意:1.因为我们要用eNSP的pc访问kali搭建的网站,这与应用层相关,故eNSP 的pc用client类型。

2.由于eNSP主机本来与vmware中的虚拟机是无通信的通道的,所以要实现他们之间通信,我们要做一个端口映射(即建立联系,让他们能够互相找到通信的端口来进行通信),所以我们需要一个叫cloud的设备来实现这个功能。

具体过程:

1.配置cloud:选择端口类型,增加一个udp端口,这是内网端口;然后再点 “增加” ,在 “绑定信息” 中选择以太网3(这里我kali子网用的是以太网3),选择端口类型,再增加一个外网端口,即public。好,我们内外网卡都加上去了,然后我们在下边的端口映射设置中,给入端口设置成1,出端口设置成2,勾选中 “双向通道

2.client主机

这里主机ip设置和kali同一网段,网关一样。

然后http地址处填写kali搭建的网站的地址如ip:port的形式

然后发送包再进行获取

2)kali linux安装docker环境
一。准备:

安装docker要求内核版本kerner>=3.10为此,先检查当前Linux系统的内核版本

 uname -a

进入sources.lis重新编辑apt源,

vim /etc/apt/sources.list

如中科大源

deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

进行系统或工具的更新

apt-get update && apt-get upgrade && apt-get dist-upgrade
 
#礼貌性清除更新缓存
apt-get clean

2.apt命令安装docker

#为什么采用apt安装?因为之后采用apt源安装Docker的其他组件时,新组件与已安装的Docker容器最为匹配。
apt-get install docker docker-compose
 
#或
apt-get install docker.io

3.检验Docker成功安装


#启动docker服务
service docker start

4.docker其他配置

配置阿里云镜像加速
Docker建议配备一个镜像加速器来解决国内用户访问DockerHub缓慢的问题。

#新建daemon.jsp文件
touch /etc/docker/daemon.json
 
#写入内容
{
	"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
 
#退出daemon.jsp,并重启docker
ESC --> :wq!
systemctl restart docker
 
#其他公开Docker镜像加速源(不需注册)
https://docker.mirrors.ustc.edu.cn	#中科大
http://hub-mirror.c.163.com/		#网易

5.docker开机自启

systemctl enable docker

二。拉取wordpress,mysql镜像,运行容器等

注意:这里wordpress要配置的数据库我们也用docker容器来提供

wordpress

#拉取前可以先查看有哪些相关镜像,选星最多的
docker search wordpress
#拉取
docker pull wordpress
#再查看镜像
docker images
#创建并运行容器
docker run -it --name mywordpress2 -p 9999:80 -d wordpress
解释参数:
-d作用:容器会在后台运行,并输出容器ID
-i作用:即使没有attached,也要保持STDIN打开状态(它的意思是把宿主机标准输入,输出和错误流附加到容器)
通常这么用:通过-i或者-t为-d提供一个伪”tty n“
docker run -i -d images:tags

--name: 容器名
-p:  把80端口映射到宿主机的9999端口

#检查容器运行状态
docker ps 正在运行的容器
docker ps -a 所用容器

mysql5.7

#拉取
docker pull mysql:5.7

#运行container
docker run -it --name=mysql5.7 -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci  --lower_case_table_names=1

解释参数:-e TZ 设置时区
--character-set-server等是数据库的相关配置参数

#检查容器运行状态
docker ps 正在运行的容器
docker ps -a 所用容器

注意细节

配置mysql容器 此时的mysql已经运行起来了,但是需要配置允许外部访问才可使用

 #进入容器
docker exec -it mysql5.7 bash
#进入mysql数据库(password是123456)
mysql -u root -p
#设置mysql允许访问(下面是mysql语句,一共3句分开)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
create database wordpress;#创建wordpress数据库

效果如下:

易错(我卡了好久)

再次进入配置页面(http://ip:9999) ,这里数据库主机应当填虚拟主机ip地址:3305,3305为之前设置的数据库服务的端口。不能填localhost相关的,会出错!!!


实验2:docker搭建Hfish系统,。

Hfish(蜜罐系统)作用:用来监测攻击的,支持很多类型的协议。

#拉镜像
docker pull imdevops/hfish
#运行容器
docker run -d --name hfish -p 21:21 -p 22:22 -p 23:23 -p 69:69 -p 3306:3306 -p 5900:5900 -p 6379:6379 -p 8080:8080 -p 8081:8081 -p 8989:8989 -p 9000:9000 -p 9001:9001 -p 9200:9200 -p 11211:11211 --restart=always imdevops/hfish:latest

###参数说明
21 为 FTP 端口
22 为 SSH 端口
23 为 Telnet 端口
3306 为 Mysql 端口
6379 为 Redis 端口
8080 为 暗网 端口
8989 为 插件 端口
9000 为 Web 端口
9001 为 系统管理后台 端口
11211 为 Memcache 端口
69 为 TFTP 端口
5900 为 VNC 端口
8081 为 HTTP代理池 端口
9200 为Elasticsearch端口

注:

可能会遇到 端口占用的问题

运行容器报错
Error response from daemon: driver failed programming external connectivity on endpoint mysql (11c5baee97c46d1f911f0ab48f5ee59b918dd27954102d40177997cba255962f): Error starting userland proxy: listen tcp4 0.0.0.0:22: bind: address already in use

解决方案

1.首先查看机器所使用的端口情况

netstat -tanlp

2.然后杀掉相应的进程

kill PID
1

3.只到不报错,再重新映射就好

按照我的理解一次最好只跑一个web服务比较好 不然端口容易发生冲突。

效果:


总结

下面总结一些易错细节。

一。运行报错删改操作

1, 使用docker 出现Error response from daemon: Conflict. The container name “***” is already in use

解决方法:
way1 给容器换一个名字, 比如说 docker run -it --name=mycentos2 centos:7 /bin/bash, 可以解决问题.

way2 将原来的容器删除
查询当前容器:docker container ls -all

删除当前容器(删除前先停止运行docker stop ewrfdgfdfs(container id)):
再docker container rm mycentos(container ID也可)
如果想要再次使用,使用则docker restart 镜像名

2,run时,端口被占用

先netstat -tnalp 查看运行程序及端口
然后kill 进程号
如kill 2354

二。容器运行参数解析:

使用docker最简单的方式就是docker run了。想要运行什么服务,就run相应的镜像。

以下的内容基于Linux环境

docker run也支持简单的自定义参数,比如这个镜像以什么方式运行,要不要分配网络端口、存储空间之类的。如果要用好docker至少要熟练最简单的参数设置方法。

语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用OPTIONS说明:

-d: 后台运行容器,并返回容器ID;
不加这一个默认直接进入容器,之后如果退出则会连着容器一起挂起(暂停运行)。

-i: 以交互模式运行容器,通常与 -t 同时使用;

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
同时使用it之后,你就可以进入到这个容器里面,就像在一台新的Linux主机中了。

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
非常常用,从容器外访问容器内服务的主要方式。

--name="nginx-lb": 为容器指定一个名称;

-m :设置容器使用内存最大值;
-e username="ritchie": 设置环境变量;

--volume , -v: 绑定一个卷
格式为主机目录:容器目录,这条命令也是非常有用的,如果不绑定目录,那么在删除容器的时候,里面的所有数据也一起删除了。但如果使用了挂载卷的话,直接存在宿主机对应文件夹中,下次开启容器还能直接使用。通常用于存一些配置文件、数据什么的。

实例1.
docker run --name mynginx -p 8080:80 -v /data:/data -d nginx:latest

#解析
docker run:启动一个容器。
--name mynginx:将容器命名为mynginx。
-p 8080:80:将容器的 80 端口映射到主机的 8080 端口
-v /data:/data:将主机的目录 /data 映射到容器的 /data
-d:以后台模式启动。
nginx:latest:镜像来源:nginx:latest
实例2.
docker run -it nginx:latest /bin/bash
root@b8573233d675:/# 

#解释:
docker run:启动一个容器。
-it:以交互模式启动(进入容器中)
nginx:latest:镜像来源:nginx:latest
/bin/bash:进入容器后要执行的命令,这里是打开终端。
root@b8573233d675:/# :已经进入了容器里面的终端,用户名变化。
实例3.
docker run --name wordpress \
#解析
-e WORDPRESS_DB_HOST=47.97.69.160:3306 \
-e WORDPRESS_DB_USER=root \
-e WORDPRESS_DB_PASSWORD=a1b2c3 \
-e WORDPRESS_DB_NAME=wordpress \
-p 8080:80 \
-v /root/wordpress/config:/var/www/html \
-d wordpress\

三。Netstat命令详解

Netstat(network statistics)是在内核中访问网络连接状态及其相关信息的命令行程序,可以显示路由表、实际的网络连接和网络接口设备的状态信息,以及与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络服务运行状况

最常用:

netstat -tanlp 列出tcp以及进程名进程号
禁用反向域名解析,加快查询速度
##其他
默认情况下 netstat 会通过反向域名解析查找每个 IP 地址对应的主机名,会降低查找速度。

1.  netstat -nat  n选项可以禁用此行为,并且用户 ID 和端口号也优先使用数字显示

2. netstat -ntl    只列出监听中的连接 -l选项可以只列出正在监听的连接(不能和 a 选项同时使用)

3. netstat -ntlp   获取进程名、进程号以及用户 ID
-p 选项可以查看进程信息(此时 netstat 应尽量运行在 root 权限之下,否则不能得到运行在 root 权限下的进程名)

4. netstat -r 显示路由信息 使用  -r 选项打印内核路由信息,与 route 命令输出一样。

5 . netstat -i 网络接口信息 -i 选项可以输出网络接口设备的统计信息,结合上 -e 选项,等于 ifconfig 命令的输出

6. netstat -s 获取网络协议的统计信息 -s选项可以输出针对不同网络协议的统计信息,包括 Ip、Icmp、Tcp 和 Udp 等。

四。kali网络配置问题

问题:网址无法解析

解法:

way1:ifconfig后发现无ip等信息,可能为获取到ip,下面办法

dhclient eth0

dhclient命令功能:用于动态主机配置协议
dhclient eth0获取IP地址(在指定网络接口上发出DHCP请求)

way2:dns配置有问题

#编辑dns配置文件
vim /etc/resolv.conf
#解析不出地址说明原来的这个文件有问题修改为下面内容
#修改是即时生效的,下一次解析就会使用配置的dns服务器解析域名
nameserver 8.8.8.8
nameserver 114.114.114.114


##这里要注意!!!
#直接修改该文件的话,会在下一次重启时失效。简单的解决办法,锁定文件
chattr +i /etc/resolv.conf
#如果要修改的话,解锁即可
chattr -i /etc/resolv.conf
#再ping外网应该都可以了

五。不确定的操作有风险建议拍快照