基于Docker与iptables的SNAT+DNAT服务器发布项目

项目名称

基于Docker与iptables的SNAT+DNAT服务器发布项目

项目描述

模拟企业的环境发布内网的服务器或者由于业务扩大服务器不足,增加镜像服务器的方式来维护企业业务,同时也让内网服务器可以上网,采取docker容器技术构建自己的web和MySQL等应用

项目设备

centos7(两台),Ubuntu20.04,docker20.10.8,mysql5.7.35,nginx1.21.1

项目步骤

1、规划整个网络拓扑图,为每个机器规划网络,配置ip地址等基础信息
请添加图片描述

2、安装3台虚拟机,根据拓扑图配置ip和网关等基本配置和规划

3、在router服务器上添加SNAT规则让内网的两个服务器可以上网,为了方便管理,我们写成脚本
添加snat

#!/bin/bash

#打开路由功能
echo 1 >/proc/sys/net/ipv4/ip_forward

#清除防火墙规则
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT

#snat规则
ptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j SNAT --to-source 192.168.10.99
ptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ens33 -j SNAT --to-source 192.168.10.99

4、在内网服务器上下载docker容器,下载MySQL和nginx镜像,启动nginx和MySQL的docker容器,测试容器是否能正常访问

docker的安装步骤
https://docs.docker.com/engine/install/centos/

#启动nginx的容器
[root@web-server ~]# docker run  -d --name nginx-1  -p 80:80  nginx
af5d6e5f2a71adb5b10802764965ba9b572bcb6ccc5cb647ae24eb165bd84f3f
[root@web-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                               NAMES
af5d6e5f2a71   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx-1

启动MySQL容器
[root@web-server ~]# docker run -d --name mysql-1 -e MYSQL_ROOT_PASSWORD='123456' -p 3306:3306  mysql:5.7.35
0eed9c4219f7744d9203dd5e8be221f858a50a0a705f64fec38e2e7c3eafd599
[root@web-server ~]#
[root@web-server ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                  NAMES
0eed9c4219f7   mysql:5.7.35   "docker-entrypoint.s…"   34 seconds ago   Up 32 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql-1
af5d6e5f2a71   nginx          "/docker-entrypoint.…"   3 minutes ago    Up 3 minutes    0.0.0.0:80->80/tcp, :::80->80/tcp                  nginx-1

5、在网关服务器上的snat脚本去添加好DNAT策略

#dnat web
iptables -t nat -A PREROUTING -i ens33 -d 192.168.10.99 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.37:80

#dnat mysql 
iptables -t nat -A PREROUTING -i ens33 -d 192.168.10.99 -p tcp --dport 3306 -j DNAT --to-destination 192.168.2.37:3306

#dnat mysql ubuntu docker
iptables -t nat -A PREROUTING -i ens33 -d 192.168.10.99 -p tcp --dport 3307 -j DNAT --to-destination 192.168.3.23:3306

##dnat web ubuntu docker
iptables -t nat -A PREROUTING -i ens33 -d 192.168.10.99 -p tcp --dport 81 -j DNAT --to-destination 192.168.3.23:80

6、在其他的机器上测试发布的web和MySQL服务,分别使用curl和chrome对服务进行测试,SQLyog的测试工具进行数据库连接测试请添加图片描述
请添加图片描述

注意:

数据库部分docker 容器起的mysql,可以使用root用户直接去连接,ruguo要添加新用户,授权等,操作直接进入容器操作

mysql -uroot -p123456

#授权

MySQL [(none)]> grant all on *.* to 'xulun'@'%' identified by '123456'

2、在编写dnat时我们就要考虑数据库有多个(但是在不同的容器里面),要设置不同的目的端口转发过去(路由器服务器只有一个唯一端口)如nginx可以一个80,一个81

项目心得

1、做一个项目第一步的规划是非常重要,无论在排错,还是设计上都非常重要,才能保证思路清晰
2、加深了对iptables和docker容器的理解,需要有较强的网络功底,尤其配置的内容更加复杂时
3、提升了对网络的认知,增加了我们的网络排除错误能力,一步步,范围一点点扩大的排除
4增加了对一个项目流程的认识,更加认识到操作需要非常细心和有耐心

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值