计算机网络 day9 DNAT实验

目录

DNAT

DNAT策略的典型应用环境

DNAT策略的原理

在网关中使用DNAT策略发布内网服务器

DNAT实验:

实验环境:

DNAT网络规划拓扑图:

步骤:

1、创建linux客户端Web网站(go语言),实现Web服务器

1.1、下载go语言Web端代码

1.2、下载代码后传输到你的linux客户机上去

1.3、解压apiserver.tar.gz文件,并执行Web程序

1.4、测试Web服务器的效果(通过网关服务器来进行)

​编辑2、配置DNAT策略

2.1、准备工作

2.2、修改firewall网关服务器的姓名:

2.3、写DNS脚本

2.4、执行脚本

3、测试效果

4、使用dokcer上的nginx服务替代go语言程序

4.1、docker安装下载,制作docker镜像:(120条消息) docker容器的介绍和安装 - 镜像安装_docket容器_Claylpf的博客-CSDN博客

4.1、访问nginx镜像

如何当我们访问firewall网关服务器的其他端口(假设是80端口)也能映射访问到我们的linux客户机的8000端口


DNAT

DNAT(Destination Network Address Translation)是一种NAT的实现方式,也被称为目的地址转换(Destination NAT)。它在传输层对IP数据包进行修改,将目的IP地址改为内部网络中的设备IP地址,从而实现外部网络可以通过公共IP地址访问内部网络中的设备。DNAT通常用于实现服务器对外提供服务的功能,例如将公共IP地址映射到内部网络中的Web服务器上,从而外部用户可以通过公共IP地址访问Web服务器。

DNAT策略的典型应用环境

在Internet中发布位于企业局域网内的服务器

DNAT策略的原理

目标地址转换,Destination Network Address Translation

修改数据包的目标IP地址

在网关中使用DNAT策略发布内网服务器

DNAT实验:

实验环境:

        准备2台集群:一台做局域网里的客户机(Web服务器)(1个网卡),一台做firewall网关服务器(路由器)

        所有的虚拟机的网卡模式选择桥接模式(客户机可以选择仅主机模式)

DNAT网络规划拓扑图:

步骤:

1、创建linux客户端Web网站(go语言),实现Web服务器

1.1、下载go语言Web端代码

go语言网站代码提取:

链接:https://pan.baidu.com/s/1QSulTw3P_lrp7RCHbHjhow?pwd=byp5 
提取码:byp5

1.2、下载代码后传输到你的linux客户机上去

方式一(假设你的linux服务器没有联网,但是你的firewall网关服务器联网了)

先传输到网关服务器上去,再在网关服务器上使用scp命令传输给linux客户机

[root@nginx-lb1 ~]# scp apiserver.tar.gz 192.168.80.1:/root
The authenticity of host '192.168.80.1 (192.168.80.1)' can't be established.
ECDSA key fingerprint is SHA256:qFVcuGn/dPQWyNfiYIe376RJ2CZIyFnKFobW/2VQljo.
ECDSA key fingerprint is MD5:59:df:c1:dd:8d:c0:0a:a8:50:e5:15:b0:9f:2a:16:ff.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.80.1' (ECDSA) to the list of known hosts.
root@192.168.80.1's password: 
apiserver.tar.gz                                                                                                                                           100% 5121KB  73.9MB/s   00:00    
[root@nginx-lb1 ~]# 

方式二(联网的情况下)

使用xftp上传apiserver.tar.gz到linux服务器里 或者 使用lrzsz传输

yum  install lrzsz  -y

rz : 接收从windows机器里上传文件到linux机器  receive
sz: 接收从linux系统里发送文件到windows  sent/send

[root@goweb ~]# rz     
然后选择需要上传的文件的路径

1.3、解压apiserver.tar.gz文件,并执行Web程序

[root@goweb ~]# mkdir /myweb
[root@goweb ~]# mv apiserver.tar.gz /myweb/
[root@goweb ~]# cd /myweb/
[root@goweb myweb]# ls
apiserver.tar.gz
[root@goweb myweb]# 
[root@goweb myweb]# tar xf  apiserver.tar.gz  解压
[root@goweb myweb]# ls
apiserver  apiserver.tar.gz
[root@goweb myweb]# cd apiserver 进入解压后的文件夹
[root@goweb apiserver]# ls
go.mod  go.sum  handler  main.go  router  scweb
[root@goweb apiserver]# #scweb 是使用go语言编写的简单的web服务器软件[root@goweb apiserver]# ./scweb   执行scweb二进制程序
vim-go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.- using env:	export GIN_MODE=release- using code:	gin.SetMode(gin.ReleaseMode)[GIN-debug] GET    /                         --> apiserver/router.home (3 handlers)
[GIN-debug] GET    /sd/health                --> apiserver/handler/sd.HealthCheck (3 handlers)
[GIN-debug] GET    /sd/disk                  --> apiserver/handler/sd.DiskCheck (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on 0.0.0.0:8000scweb服务器会监听8000端口

1.4、测试Web服务器的效果(通过网关服务器来进行)

[root@nginx-lb1 ~]# curl 192.168.80.1:8000
hello,三创人 nice 2022[root@nginx-lb1 ~]# #curl  是linux系统里的字符界面的浏览器
#也可以使用其他图形界面的浏览器去访问


2、配置DNAT策略

2.1、准备工作

1、局域网的Web服务器正确设置了IP地址/子网掩码/DNS服务器

2、局域网的Web服务器正确设置了默认网关地址

3、创建Web框架,并确保Web服务已经在Web服务器上运行了

在linux网关服务器(防火墙)上操作

2.2、修改firewall网关服务器的姓名:

[root@prom-server ~]# hostnamectl  set-hostname  router
[root@prom-server ~]# su - root
su - root
上一次登录:一 7月 17 11:53:14 CST 2023从 192.168.2.134pts/0 上
[root@router ~]# 

2.3、写DNS脚本

[root@nginx-lb1 nat]# cat snat_dnat.sh 
#!/bin/bash#开启路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward#清除防火墙规则
iptables -F
iptables -F -t nat#添加SNAT策略的防火墙规则
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 192.168.2.77#添加DNAT策略的防火墙规则
iptables -t nat  -A PREROUTING   -d 192.168.2.77 -i ens33  -p tcp  --dport 8000  -j DNAT  --to-destination 192.168.80.1
[root@nginx-lb1 nat]# 

2.4、执行脚本

[root@router nat]# bash snat_dnat.sh 
Redirecting to /bin/systemctl stop firewalld.service
[root@router nat]# 

查看iptables是否生效

[root@nginx-lb1 nat]# iptables -L -t nat -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            192.168.2.77         tcp dpt:8000 to:192.168.80.1Chain INPUT (policy ACCEPT)
target     prot opt source               destination         Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.80.0/24      0.0.0.0/0            to:192.168.2.77
[root@nginx-lb1 nat]# 

3、测试效果

使用浏览器访问linux网关服务器wan口的地址和8000端口
    http://192.168.2.77:8000

4、使用dokcer上的nginx服务替代go语言程序

4.1、docker安装下载,制作docker镜像:(120条消息) docker容器的介绍和安装 - 镜像安装_docket容器_Claylpf的博客-CSDN博客

[root@claylpf apiserver]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
faef57eae888: Pull complete 
76579e9ed380: Pull complete 
cf707e233955: Pull complete 
91bb7937700d: Pull complete 
4b962717ba55: Pull complete 
f46d7b05649a: Pull complete 
103501419a0a: Pull complete 
Digest: sha256:08bc36ad52474e528cc1ea3426b5e3f4bad8a130318e3140d6cfe29c8892c7ef
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@claylpf apiserver]# dokcer images
bash: dokcer: command not found...
Similar command is: 'docker'
[root@claylpf apiserver]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB
[root@claylpf apiserver]# docker run -d -p 8000:80 --name cly-nginx nginx
a3e47da286fd588c51297374480ee842942781e4752e488e2626e69143db4d92
[root@claylpf apiserver]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
a3e47da286fd   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 5 seconds   0.0.0.0:8000->80/tcp, :::8000->80/tcp   cly-nginx
[root@claylpf apiserver]# 

4.1、访问nginx镜像

如何当我们访问firewall网关服务器的其他端口(假设是80端口)也能映射访问到我们的linux客户机的8000端口

如下拓扑图就很生动的展示了我们的IP包通过firewall网关服务器的时候,IP包内的目的地址发生了改变,还有TCP段的端口也发生了改变。

#通过访问192.168.1.254:8000端口 访问到 192.168.2.80的8000端口
iptables -t nat  -A PREROUTING   -d 192.168.1.254 -i ens33  -p tcp  --dport 8000  -j DNAT  --to-destination 192.168.2.80#通过访问192.168.1.254的80端口 访问到 192.168.2.80的8000端口
iptables -t nat  -A PREROUTING   -d 192.168.1.254 -i ens33  -p tcp  --dport 80  -j DNAT  --to-destination 192.168.2.80:8000

可以浅显的理解为:当我们使用Windows上的浏览器想要访问我们的A客户机的Web服务的时候,我们需要访问浏览器的http://192.168.2.1:80,可知我们访问的正是firewall网关服务器WAN口的IP地址和端口80,而我们的firewall网关服务器会帮助我们修改IP包中的:

  1. 目标 IP 地址(Destination IP Address):防火墙网关服务器会将数据包的目标 IP 地址(原来是firewall网关服务器的WAN口的IP地址,也就是192.168.2.1)修改为内网服务器(linux客户机)的 IP 地址(192.168.1.1),以实现数据包的转发到内网(局域网)。

  2. 目标端口号(Destination Port):如果进行端口映射,防火墙网关服务器可以将数据包的目标端口号(原来是firewall的网关服务器的80端口)修改为内网服务器(linux客户机)上相应服务的监听端口(我们开启的监听端口为8000端口),以确保数据包能够正确地被内网服务器接收。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/3390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何快速爬取国内985大学学术学报pdf文件

背景 最近,在爬取关于国内985大学的学报时,我注意到大部分大学学报站点格式都采用相似的形式,并且PDF链接都使用自增的ID。然而,我也发现了一个问题,即大多数PDF链接的ID并不是连续的。现在我将向你分享一些方法&…

15 大模型训练 内存优化

先看GPU结构,我们常说显存的时候,说的一般就是Global memory 训练的过程中,我们为了反向传播过程,必须将中间的结果(激活值)存储下来。 在训练的过程中,那些会消耗内存呢? model we…

web-报错注入

必要的函数 rand select rand(0) from hackbiao; rand(0):生成以0开头的随机数,生成的数量与字段下数据的条数相等。如果i没有这个地段的话,就会自己形成一个新的字段打印出来。 count和group by grouip by在进行排序的时候,会…

【分布式应用】Ceph的实战应用

目录 一、创建 CephFS 文件系统 MDS 接口1.1服务端操作1)在管理节点创建 mds 服务2)查看各个节点的 mds 服务3)创建存储池,启用 ceph 文件系统4)查看mds状态,一个up,其余两个待命,目…

SpringCloud(五)Gateway 路由网关

一、路由网关 官网地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ 我们需要连接互联网,那么就需要将手机或是电脑连接到家里的路由器才可以,而路由器则连接光猫,光猫再通过光纤连接到互联网&a…

对 Jenkins+ANT+Jmeter 接口测试的实践

目录 1、前言 2、框架与数据准备 3、脚本设计 4、整理测试报告 1、前言 JenkinsANTJMeter是一种常见的接口测试实践方案,可以实现自动化的接口测试和持续集成。Jenkins是一个流行的持续集成工具,ANT是一个构建工具,而JMeter是一个功能强大…

JS逆向系列之猿人学爬虫第18题-jsvmp - 洞察先机

文章目录 目标网址加密参数分析Python 实现往期逆向文章推荐目标网址 https://match.yuanrenxue.cn/match/18题目标着难度是困难级别,主要还是vmp保护的JS代码调试困难,理清逻辑就会变得简单了 加密参数分析 请求第一页时没有加密参数,从第二页开始,url会携带t和v两个参数…

240. 搜索二维矩阵 II

题目描述&#xff1a; 主要思路&#xff1a; 利用矩阵中的单调性进行搜索。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int nmatrix.size(),mmatrix[0].size();int in-1,j0;while(i>0&&j<m){if(m…

详解CPU的态

目录 1.CPU的工作过程 2.寄存器 3.CPU的上下文 4.系统调用 5.CPU的态 1.CPU的工作过程 CPU要执行的指令的地址存在寄存器中&#xff0c;指令存放在内存中&#xff0c;而CPU本质上就是一个去内存中根据地址取指令&#xff0c;然后执行指令的硬件。 举一个例子&#xff1a…

【蓝图】p27开关门互动实现

p27开关门互动实现 创建一个门 添加初学者内容包 拖拽一个门到场景中 添加一个碰撞 创建盒体触发器 左侧模式->基础->盒体触发器&#xff0c;拖拽到门上&#xff0c;调整大小 开关门互动实现 做一个开门互动 要把开门逻辑写在关卡蓝图里 门设置为可移动 打开关卡蓝…

SpringBoot整合knife4j

knife4j 文档地址&#xff1a;https://doc.xiaominfo.com/ knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。 Swagger介绍 前后端分离开发模式中&#xff0c;api文档是最好的沟通方式。 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和…

基于单片机的智能窗帘智能晾衣架系统的设计与实现

功能介绍 以STM32单片机单片机作为主控系统&#xff1b;OLED液晶显示当前环境温湿度&#xff0c;光照强度&#xff0c;时间&#xff0c;开关状态等信息&#xff1b;雨滴传感器检测当前环境是否下雨&#xff0c;天气下雨检测&#xff0c;天气潮湿时自动收衣服&#xff1b;可以通…

RabbitMq(一)

一、基本概念、常见工作模式以及简单使用 MQ全称Message Queue (消息队列)&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。 小结 MQ消息队列&#xff0c;存储消息的中间件分布式系统通信两种方式:直接远程调用和借助第三方完成间接通信发…

openGauss学习笔记-09 openGauss 简单数据管理-创建数据库

文章目录 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库9.1 语法格式9.2 参数说明9.3 示例 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库 数据库安装完成后&#xff0c;默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。 9.1 语法格式…

低代码技术:提高效率降低成本的全新选择

一、前言 企业想要独立的应用程序&#xff0c;开发者在寻求更快速、更高效、更灵活的开发方法&#xff0c;以适应快速变化的市场需求。在这个背景下&#xff0c;低代码技术以提高效率降低成本的方式走进人们视野&#xff0c;成为了一种全新的应用程序开发方式。 二、相比传统的…

金融中的数学:概率分布(下)

上篇博客介绍了离散型概率分布&#xff0c;本篇博客介绍连续型概率分布。 1.连续型概率分布 连续型均匀分布&#xff08;Continuous Uniform distribution&#xff09;是一种描述在特定区间内取值均匀分布的概率分布。在该分布中&#xff0c;随机变量在给定区间内的取值概率密…

上门服务小程序|上门家政小程序开发

随着现代生活节奏的加快和人们对便利性的追求&#xff0c;上门家政服务逐渐成为了许多家庭的首选。然而&#xff0c;传统的家政服务存在着信息不透明、服务质量不稳定等问题&#xff0c;给用户带来了困扰。为了解决这些问题&#xff0c;上门家政小程序应运而生。上门家政小程序…

Jupyter入门使用教程

1 Jupyter Notebook与Jupyter Lab简介 Jupyter Notebook是一个开源的Web应用&#xff0c;在深度学习领域非常活跃。用户可以在这里创建和分享可执行代码、可视化结构和注释说明的文档。 Jupyter Notebook以网页的形式展现&#xff0c;用户可以在此网页中直接编辑代码、运行程…

程序员如何制作PPT?

有道无术&#xff0c;术尚可求也&#xff1b;有术无道&#xff0c;止于术。大家好&#xff0c;我是程序员雪球&#xff0c;今天让我们一起探讨如何从零开始制作高质量的 PPT。 上周&#xff0c;领导要求我撰写一份关于 4到6月持续集成运营分析的报告&#xff0c;并通过 PPT 的形…

STM32单片机示例:多个定时器同步触发启动

文章目录 前言基础说明关键配置与代码其它补充示例链接 前言 多个定时器同步触发启动是一种比较实用的功能&#xff0c;这里将对此做个示例说明。 基础说明 该示例演示通过一个TIM使能时同步触发使能另一个TIM。 本例中使用TIM1作为主机&#xff0c;使用TIM1的使能信号作为…