计算机网络 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.hqwc.cn/news/27815.html

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

相关文章

RS485远传电表有哪些功能?

RS485远传电表是一种具有远程传输功能的电表,可以通过RS485接口进行数据传输。它主要用于远程测量电能消耗、监测电力质量和实时控制电力负载等方面。 RS485远传电表具有多种功能,如: 1.远程测量电能消耗:RS485远传电表可以通过远…

Fiddler网络调试器,抓包工具供大家学习研究参考

Fiddler 是一个 http 协议调试代{过}{滤}理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断 点,查看所有的“进出”Fiddler 的数据(指 cookiehtmljscss等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为…

SQlite3数据库相关相关命令

目录 1)系统命令 以 . 开头2)sql语句 以 ;结尾1. 创建表格2. 插入数据3. 查看数据库记录4. 删除信息5. 更新数据6. 增加一列7. 删除一列 (sqlite3 不支持直接删除一列) 3)sqlite3 数据库 C语言 API1. 打开数据库2. 关闭…

C\C++ 使用socket判断ip是否能连通

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 使用socket判断ip是否能联通 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <cstdlib> #include <cstdio> #include &…

【产品设计】功能型小程序的前后台原型设计

最近公司基于目前招聘兼职老师的流程做了一款小程序。之所以选择做小程序的原因&#xff0c;一方面是因为项目功能比较简单&#xff0c;没必要开发一款独立的APP&#xff1b;另一方面是因为小程序开发起来比较方便&#xff0c;节约开发成本&#xff0c;用户使用起来也比较方便。…

JavaScript中的JSON

一&#xff1a;分类  简单值&#xff1a;字符串、数值、布尔值和 null 可以在 JSON 中出现&#xff0c;就像在 JavaScript 中一样。特殊 值 undefined 不可以。 对象&#xff1a;第一种复杂数据类型&#xff0c;对象表示有序键/值对。每个值可以是简单值&#xff0c;也可以…

STM32F4_FLASH模拟EEPROM

目录 前言 1. 内部FLASH简介 2. 内部FLASH写入过程 3. 内部FLASH库函数 4. FLASH的读写保护及解除 5. FLASH相关寄存器 6. 实验程序 6.1 main.c 6.2 STMFlash.c 6.3 STMFlash.h 前言 STM32F4本身并没有自带EEPROM&#xff0c;但是STM32F4具有IAP功能&#xff0c;也就…

操作系统进行设备控制的方式

一.I/O控制方式 上一篇的博客介绍了设备管理的一些概念基础知识点&#xff0c;其中I/O控制方式这一块没有详细说明。设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入/输出控制方式有4种&#xff0c;下面分别加以介绍。 二.程序直接控制…

Kotlin基础(五):类和接口

前言 本文主要讲解类和接口&#xff0c;主要包括类的声明、构造器、类成员、修饰符、类的继承、接口、抽象类。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 类的声明 在 Kotlin 中&#xff0c;类的声明使用关键字 class。下面是一个简单的类声明的示例&…

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式&#xff1b; 全球预测模式、中尺度数值模式&#xff1b; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …

【论文阅读】一些多轮对话文章的体会 ACL 2023

前言 本文是对昨天看到的ACL 2023三篇多轮对话文章的分享这三个工作都是根据一些额外属性控制输出的工作&#xff0c;且评估的方面比较相似&#xff0c;可以借鉴 方法 这几篇文章都不是做general任务的&#xff0c;倾向于通过一些额外信息&#xff0c;来做specific任务 【1】…

Linux的基本使用和web程序部署

注意&#xff1a;本文章不适合C学习者&#xff08;知识点远远不够&#xff09;&#xff0c;只适合Java学习者&#xff0c;学习简单的Linux命令 1.Linux的背景知识 1.1Linux是什么 Linux是一个操作系统&#xff0c;和Windows是“并列”的关系。经过多年的发展&#xff0c;Lin…