项目说明:

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

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. AcWing 341. 最优贸易

    C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市. 任意两个城市之间最多只有一条道路直接相连. 这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的 ...

  2. Nginx:Nginx配置文件详解

    Nginx是一款面向性能设计的HTTP服务器,相较于Apache.lighttpd具有占有内存少,稳定性高等优势. 如下是Nginx的配置详解: ######Nginx配置文件nginx.conf中文 ...

  3. Zookeeper:Windows下Zookeeper启动zkServer.cmd闪退问题

    Zookeeper在Windows下启动只需要运行zkServer.cmd双击即可(需保证运行环境中正确安装了Java运行环境) 但是在有的时候会出现双击闪退的情况.针对闪退,可按照如下方法进行解决: ...

  4. MySQL数据库性能优化该如何入手

    今天小杨给大家分享一篇关于数据库查询优化,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. ...

  5. Django基础07篇 ORM操作

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

  6. 二、从GitHub浏览Prism示例代码的方式入门WPF下的Prism之Modules的几种加载方式

    这一篇梳理Prism中07示例Module的几种加载方式. 07示例分为了5个,有5种不同的Module加载方式. 我们开始学习加载Modules 观察07-Modules-Appconfig示例 分 ...

  7. H3C交换机常用命令

    选择多个端口: interface range ethernet 1/0/1 to ethernet 1/0/12 vlan-interface1 常用命令 密码修改:  查看是否有相应的用户名:di ...

  8. C语言:预处理 自定义头文件

    DEV-C++包含文件搜索路径C:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\includeC:\Program Files\Dev-Cpp\M ...

  9. Quick BI的复杂系统为例:那些年,我们一起做过的性能优化

    背景 一直以来,性能都是技术层面不可避开的话题,尤其在中大型复杂项目中.犹如汽车整车性能,追求极速的同时,还要保障舒适性和实用性,而在汽车制造的每个环节.零件整合情况.发动机调校等等,都会最终影响用户 ...

  10. 一:Vue项目构建

    第一步:需要安装nodeJS的环境,直接去官网下载https://nodejs.org/en/,下载下来按照提示一步步的安装.(vue.js是一个Js 框架.在node里面通过Npm 安装,是为了方便 ...