项目说明:

模拟企业让内网服务器可以上网,同时发布内网的服务器

1.实验环

我们需要准备三台linux系统,一台作为路由器机route,其它为客户机client-1、client-2

主机改名

hostnamectl set-hostname 主机名

切换用户,显示修改后的主机名

su - root

2.网络拓扑图

 3.三台机器的IP地址配置

进入三台机器的网卡配置文件目录

cd /etc/sysconfig/network-scripts/

route机IP地址配置

WAN的IP地址(网段必须和你windows的IP地址网段一致)

ens33:

以下网卡都是局域网的IP地址配置 (请随意配置)

网关

ens37:

client-1IP地址配置

ens33:

client-2IP地址配置

ens33:

 centos7的网卡重载命令

ifup 网卡名
ifup ens33

配置完后客户机ping网关成功我们配置完成

ping 192.168.17.254

4.连接到xshell方便操作

用管理员身份打开cmd

 添加路由表

route add 192.168.17.0/24 192.168.0.100
前者为局域网段 后者为下一跳地址,即路由器机的IP地址

4.开启route机的路由功能

关闭三台机器的firewall和selinux服务(皆为临时修改,建议永久修改)

systemctl stop firewalld
setenforce 0

开启路由功能

echo  1 >/proc/sys/net/ipv4/ip_forward

5.实现SANT策略(局域网主机共享单个公网ip地址接入Internet)

#清除filter表和nat表里的防火墙规则
iptables -F
iptables -t nat -F #SNAT策略(二选其一)
#第一种
iptables -t nat -A POSTROUTING -s 192.168.17.0/24 -o ens33 -j SNAT --to-source 192.168.0.100

#第二种(建议)
iptables -t nat -A POSTROUTING -s 192.168.17.0/24 -o ens33 -j MASQUERADE

到这一步我们发现客户机可以ping通Internet

6.为docker的服务发布建立环境

打开docker服务(linux裸机没有安装这个docker,需自行安装)

systemctl start docker

下载镜像创建容器并运行它

#客户机1
#我运行了nginx和mysql的容器 docker run --name sc-nginx-1 -d -p 80:80 nginx #注意需关闭占用客户机3306端口的数据库服务,否则会冲突
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='123' -d -p 3306:3306 mysql:5.7.35
#客户机2
#这台机器我们只起mysql的容器

#注意这台机器把客户机3307端口映射到容器的3306端口
docker run --name sc-mysql-2 -e MYSQL_ROOT_PASSWORD='123' -d -p 3307:3306 mysql:5.7.35

7,实现DNAT策略(将内网的服务器发布到Internet)

#DNAT策略
#dnat web
iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.17.1:80 #dnat mysql 192.168.17.1
iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.100 -p tcp --dport 3306 -j DNAT --to-destination 192.168.17.1:3306 #dnat mysql 192.168.17.2
iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.100 -p tcp --dport 3307 -j DNAT --to-destination 192.168.17.2:3306

8,在其他的机器上测试发布的web和MySQL服务,使用curl和chrome,SQLyog的测试工具进行测试

计算机网络:基于iptalbes的SANT和DNAT|docker的服务器发布项目--超详细一看就会的更多相关文章

  1. 使用IDEA新建基于SpringBoot的Web项目(超详细)

    目前java的开发很多Learner都慢慢的学习使用IDEA这款工具,个人觉得其实相比Eclipse来说差不多,个人习惯的问题,但是我还是推荐IDEA这款工具.虽然它目前是收费的,但相信网上的各种破解 ...

  2. 基于Ceph分布式集群实现docker跨主机共享数据卷

    上篇文章介绍了如何使用docker部署Ceph分布式存储集群,本篇在此基础之上,介绍如何基于Ceph分布式存储集群实现docker跨主机共享数据卷. 1.环境准备 在原来的环境基础之上,新增一台cen ...

  3. 记基于docker+gunicorn部署sanic项目遇到的很多很多坑

    前言: 最近有个项目需要上线,是python中sanic网络异步框架写的,并且要求使用docker+nginx来部署项目实现负载均衡,于是乎百度了sanic项目部署,基本上都是基于docker+gun ...

  4. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  5. Docker如何部署Python项目

    Docker 部署Python项目 作者:白宁超 2019年5月24日09:09:00 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如 ...

  6. Docker跨服务器通信Overlay解决方案(下) Consul集群

    承接上文 本文基于上篇文章,详细的场景说明与分析在前篇随笔中业已记录,有兴趣可以移步 Docker跨服务器通信Overlay解决方案(上) Consul单实例 本文主旨 本文为Docker使用Cons ...

  7. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

  8. 从零开始学习docker之在docker中运行springboot项目

    一.docker环境配置 首先需要一个安装了docker的服务器(本地或者云服务器),如果没有请看上文,传送门---https://www.cnblogs.com/wdfordream/p/12737 ...

  9. docker自动化部署前端项目实战一

    docker自动化部署前端项目实战一 本文适用于个人项目,如博客.静态文档,不涉及后台数据交互,以部署文档为例. 思路 利用服务器node脚本,监听github仓库webhook push事件触发po ...

随机推荐

  1. centos 安装jre

    r第一步:将安装的jre安装文件上传到Linux系统中(这里用的是finalshell工具) 第二步:  解压tar -zxvf server-jre-8u131-linux-x64.tar.gz 显 ...

  2. leetcode TOP100 比特位计数

    338. 比特位计数 题目描述: `给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: ...

  3. NTP时间服务器配置

    1.服务器端配置: #允许这些IP向自己同步时间 restrict x.x.x.x mask x.x.x.x nomodiy notrap #当和定义的所有server服务器无法同步后,和自身同步 s ...

  4. Django基础07篇 ORM操作

    1.新增(类似数据库操作的insert) # 新增 #方式一: models.Category.objects.create(name='MySQL') #方式二: c = models.Catego ...

  5. python使用笔记002

    一.字符串常用方法 1 s = ' ha.hahaha.' 2 print(s.count('a'))#找某一个元素在字符串里出现的次数 3 print(s.index('a'))#找某一个元素的下标 ...

  6. 成功解决1406, “Data too long for column ‘txt‘ at row 1“

    这是因为数据库里该字段的数据类型所给的数据空间太小.MySQL将截断超过指定列宽度的任何插入值.为了让这个不报错,可以尝试切换MySQL模式不使用严格模式. SET @@global.sql_mode ...

  7. 家庭账本开发day05

    套用layUI模板,成功完成账单的添加,并且能同时对用户的余额进行增加和减少

  8. 【Mysql】InnoDB 引擎中的数据页结构

    InnoDB 是 mysql 的默认引擎,也是我们最常用的,所以基于 InnoDB,学习页结构.而学习页结构,是为了更好的学习索引. 一.页的简介 页是 InnoDB 管理存储空间的基本单位,一个页的 ...

  9. ES6 let const关键字

    在es6中,引入了let和const关键字: 1.letES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. (1)在块级作用域里有效(比 ...

  10. java网络编程基础——基本网络支持

    基本网络支持 java.net包主要为网络编程提供支持. 1.InetAddress InetAddress类代表IP地址,还有两个子类:Inet4Address.Inet6Address. pack ...