当前位置: 首页 > news >正文

SNAT与DNAT公私网地址转换

前言

SNAT和DNAT是两种重要的网络地址转换技术,它们允许内部网络中的多个主机共享单个公共IP地址,或者将公共IP地址映射到内部网络中的特定主机。这些技术在构建企业级网络和互联网应用程序时非常重要,因为它们可以帮助保护内部网络安全,同时提供对外部网络的可访问性。

目录

前言

一、SNAT

1. 概述

2. SNAT原理与应用

3. SNAT转换前提条件

4. 案例演示

5. 公网地址未知

二、DNAT

1. 概述

2. DNAT原理与应用

3. DNAT转换前提条件

4. 案例演示


一、SNAT

1. 概述

SNAT(Source Network Address Translation)是一种将私有IP地址转换为公共IP地址的技术,通常用于将内部网络中的多个主机共享单个公共IP地址的情况。在SNAT过程中,路由器或防火墙会将内部主机的IP地址替换为公共IP地址,以便能够与互联网通信。当公共IP地址接收到响应时,路由器或防火墙会将响应转发到相应的内部主机。

2. SNAT原理与应用

SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)

SNAT原理:源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射

3. SNAT转换前提条件

① 局域网各主机已正确设置IP地址、子网掩码、默认网关地址

② Linux网关开启IP路由转发 linxu系统本身是没有转发功能 只有路由发送数据

4. 案例演示

公网ip有限,利用SNAT技术实现私网地址都可以访问公网 

环境准备:

① 三台服务器:7-0客户端、7-1网关、7-2服务端

② 硬件要求:7-0和7-2只需一块网卡、7-1需要两块网卡

③ 网络模式要求:7-0为NAT模式、网卡ens33为NAT模式、网卡ens36为仅主机模式、7-2为仅主机模式

④ IP地址要求:7-0为192.168.190.100/24,网关为192.168.190.101;7-1ens33网卡地址为192.168.190.101/24,网关为192.168.190.101、ens36为12.0.0.254/24,网关为12.0.0.254;7-2为12.0.0.10/24,网关为12.0.0.254

图示:

操作:

① 关闭三台机器的防火墙和selinux,并安装httpd服务

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y

② 配置7-0客户端,修改网卡ip为192.168.190/24,网关192.168.190.101,重启网卡 

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens3316 IPADDR=192.168.190.10017 NETMASK=255.255.255.018 GATEWAY=192.168.190.101
[root@localhost ~]# systemctl restart network

③  配置7-2客户端,修改网卡ip为12.0.0.10,网关12.0.0.254,重启网卡 

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens3316 IPADDR=12.0.0.1017 NETMASK=255.255.255.018 GATEWAY=12.0.0.254
[root@localhost ~]# systemctl restart network

④ 配置7-1网关服务器,分别配置ens33和ens36网卡信息,并开启路由转发功能

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens3316 IPADDR=192.168.190.10117 NETMASK=255.255.255.018 GATEWAY=192.168.190.101[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens3613 UUID=0927995e-64e0-49fb-b8ea-7809b06fc6b9
#删除以上内容12 NAME=ens3614 DEVICE=ens3616 IPADDR=12.0.0.25417 NETMASK=255.255.255.018 GATEWAY=12.0.0.254[root@localhost ~]# vim /etc/sysctl.conf
11 net.ipv4.ip_forward=1                     #开启路由转发
[root@localhost ~]# sysctl -p                #刷新配置文件
net.ipv4.ip_forward = 1 

 ⑥ 模拟环境中机器间默认是互通的,但生产环境内网和外网没有SNAT的情况下是不通的,这里的源地址为192.168.190.100,正常情况下私网ip是不会出现在公网中

7-0内网机器:
[root@localhost ~]# curl 12.0.0.107-2公网服务器:
[root@localhost ~]# tail -f /var/log/httpd/access_log 
192.168.190.100 - - [19/Feb/2024:18:44:28 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"

⑦ 在7-1中添加防火墙规则使得来源于192.168.30.0/24网段的所有从ens36网阿卡流出数据的ip全部NAT为12.0.0.254。然后再使用7-0去curl7-2服务端并在服务端实时查看日志

7-1网关服务器:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.190.0/24 -o ens36 -j SNAT --to 12.0.0.254
#将源IP地址为192.168.190.0/24网段的内部主机数据包进行SNAT地址转换,使用公网IP地址12.0.0.254作为源IP地址,并通过ens36接口进行转发
7-0客户机:
[root@localhost ~]# curl 12.0.0.10
7-2服务器:
[root@localhost ~]# tail -f /var/log/httpd/access_log 
192.168.190.100 - - [19/Feb/2024:18:44:28 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
12.0.0.254 - - [19/Feb/2024:18:50:45 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"

此时,可以看见日志源ip已转换为公网地址

5. 公网地址未知

可以将内部网络中的数据包源IP地址转换为外部网络接口的IP地址,以便能够通过外部网络进行访问。这样做的好处是可以隐藏内部网络的真实IP地址,增强安全性,同时也可以避免公网IP地址不足的问题。

7-1网关服务器:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.190.0/24 -o ens36 -j SNAT --to MASQUERADE
#转换后的源IP地址为ens36接口的IP地址,并使用MASQUERADE方式进行转换;MASQUERADE方式是一种特殊的SNAT方式,它会动态地将内部网络中的IP地址转换为外部网络接口的IP地址,这样可以方便地处理不同的内部网络IP地址转换到同一个外部IP地址的情况。可以理解为伪装。

二、DNAT

1. 概述

DNAT(Destination Network Address Translation)是一种将公共IP地址转换为私有IP地址的技术,通常用于将公共IP地址映射到内部网络中的特定主机。在DNAT过程中,路由器或防火墙会将公共IP地址替换为内部主机的私有IP地址,以便能够将请求转发到正确的主机。当内部主机接收到请求时,它会将响应发送回路由器或防火墙,后者会将响应的源地址转换为公共IP地址,以便将响应发送回请求方。

2. DNAT原理与应用

DNAT应用环境:在Internet中发布位于局域网内的服务器

DNAT原理:目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。

3. DNAT转换前提条件

① 局域网的服务器能够访问Internet

② 网关的外网地址有正确的DNS解析记录

③ Linux网关开启IP路由转发  

4. 案例演示

为提高服务器安全性,从公网访问的用户只能通过nat转换地址才可访问内网中的服务器

环境准备:

① 三台服务器:7-0客户端、7-1网关、7-2服务端

② 硬件要求:7-0和7-2只需一块网卡、7-1需要两块网卡

③ 网络模式要求:7-0为NAT模式、网卡ens33为NAT模式、网卡ens36为仅主机模式、7-2为仅主机模式

④ IP地址要求:7-0为192.168.190.100/24,网关为192.168.190.101;7-1ens33网卡地址为192.168.190.101/24,网关为192.168.190.101、ens36为12.0.0.254/24,网关为12.0.0.254;7-2为12.0.0.10/24,网关为12.0.0.254

图示:

① 网关服务器配置规则

[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80  -j DNAT --to 192.168.190.101
#将到达本机的目标IP地址为12.0.0.254,目标端口为80的TCP数据包进行DNAT地址转换,将目标IP地址转换为192.168.190.101。

② 实时查看7-0的/var/log/httpdd/access_log日志,使用7-2公网地址直接curl内网的7-0,可以看到日志中源地址

7-2公网客户端:
[root@localhost ~]# curl 192.168.190.100
7-0内网服务端:
[root@localhost ~]# tail -f /var/log/httpd/access_log
12.0.0.10 - - [19/Feb/2024:21:19:23 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"

总结:

SNAT和DNAT都是NAT的一种形式,用于在不同网络之间转换IP地址,以实现网络安全、网络连接和网络管理的目的 。

相关文章:

SNAT与DNAT公私网地址转换

前言 SNAT和DNAT是两种重要的网络地址转换技术,它们允许内部网络中的多个主机共享单个公共IP地址,或者将公共IP地址映射到内部网络中的特定主机。这些技术在构建企业级网络和互联网应用程序时非常重要,因为它们可以帮助保护内部网络安全&…...

快速上手Spring Boot整合,开发出优雅可靠的Web应用!

SpringBoot 1,SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.4 进行测试 1.1.2 对比1.1.3 官网构建工程1.1.3.1 进入SpringBoot官网1.1.3.2 选择依赖1.1.3.3 生成工程 1.1.4 SpringBoot工程…...

MySQL高级特性篇(7)-数据库版本控制与迁移

MySQL数据库版本控制与迁移 在软件开发的过程中,数据库版本控制和迁移是非常重要的一部分。这些过程确保了数据库的结构及数据的追踪和更新。在本篇博客中,我们将介绍如何使用Markdown语法来编写MySQL数据库版本控制与迁移的相关内容。 1. 什么是MySQL…...

js判断对象是否为空

给定一个对象或数组,判断它是否为空。 一个空对象不包含任何键值对。 一个空数组不包含任何元素。 输入:obj {"a": 1, "b": 2} 输出:false 解释:这个对象有两个键值对,所以它不为空。var isObje…...

2024前端面试准备之HTML篇

全文链接 1. doctype的作用是什么 DOCTYPE是html5标准网页声明,且必须声明在HTML⽂档的第⼀⾏。来告知浏览器的解析器⽤什么⽂档标准解析这个⽂档,不同的渲染模式会影响到浏览器对于 CSS 代码甚⾄ JavaScript 脚本的解析 ⽂档解析类型有: BackCompat:怪异模式,浏览器使…...

devOps系列(八)efk+prometheus+grafana日志监控和告警

前言 作者目前打算分享一期关于devOps系列的文章,希望对热爱学习和探索的你有所帮助。 文章主要记录一些简洁、高效的运维部署指令,旨在 记录和能够快速地构建系统。就像运维文档或者手册一样,方便进行系统的重建、改造和优化。每篇文章独立…...

考研英语单词29

Day 29 unify v.统一,使成一体【union n.结合,联合,工会,团结 unity n.团结,统一,协调】 offend v.冒犯,使不愉快【offender n.冒犯者 offensive a.冒犯的,无礼的】 d…...

spring-security 过滤器

spring-security过滤器 版本信息过滤器配置过滤器配置相关类图过滤器加载过程创建 HttpSecurity Bean 对象创建过滤器 过滤器作用ExceptionTranslationFilter 自定义过滤器 本章介绍 spring-security 过滤器配置类 HttpSecurity,过滤器加载过程,自定义过…...

掌握这7种软件设计原则,让你的代码更优雅

掌握这7种软件设计原则,让你的代码更优雅 在软件开发过程中,设计原则是非常重要的指导方针,它们可以帮助我们创建出更加清晰、可维护和可扩展的软件系统。本文将介绍7种常见的软件设计原则,并解释它们如何提升代码质量。 1. 单…...

Flutter自定义tabbar任意样式

场景描述 最近在使用遇到几组需要自定义的tabbar或者类似组件,在百度查询资料中通常,需要自定义 TabIndicator extends Decoration 比如上图中的带圆角的指示器这样实现 就很麻烦, 搜出来的相关也是在此之处上自己画,主要再遇…...

Java设计模式【策略模式】

一、前言 1.1 背景 针对某种业务可能存在多种实现方式,传统方式是通过传统if…else…或者switch代码判断; 弊端: 代码可读性差扩展性差难以维护 1.2 简介 策略模式是一种行为型模式,它将对象和行为分开,将行为定…...

(13)Hive调优——动态分区导致的小文件问题

前言 动态分区指的是:分区的字段值是基于查询结果自动推断出来的,核心语法就是insertselect。 具体内容指路文章: https://blog.csdn.net/SHWAITME/article/details/136111924?spm1001.2014.3001.5501文章浏览阅读483次,点赞15次…...

【linux】使用g++调试内存泄露:AddressSanitizer

1、简介 AddressSanitizer(又名 ASan)是 C/C++ 的内存错误检测器。它可以用来检测: 释放后使用(悬空指针) 堆缓冲区溢出 堆栈缓冲区溢出 全局缓冲区溢出 在作用域之后使用 初始化顺序错误 内存泄漏这个工具非常快,只将被检测的程序速度减慢约2倍,而Valgrind将会是程序…...

第三百五十七回

文章目录 1. 概念介绍2. 使用方法2.1 List2.2 Map2.3 Set 3. 示例代码4. 内容总结 我们在上一章回中介绍了"convert包"相关的内容,本章回中将介绍collection.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的内容是col…...

新版Java面试专题视频教程——框架篇

新版Java面试专题视频教程——框架篇 框架篇 01-框架篇介绍02-Spring-单例bean是线程安全的吗03-Spring-AOP相关面试题04-Spring-事务失效的场景05-Spring-bean的生命周期5.1 BeanDefinition 06-Spring-bean的循环依赖(循环引用)6.1 一般对象的循环依…...

网络爬虫实战 | 上传以及下载处理后的文件

详细代码在文尾 以实现爬虫一个简单的(SimFIR (doctrp.top))网址为例,需要遵循几个步骤: 1. 分析网页结构 首先,需要分析该网页的结构,了解图片是如何存储和组织的。这通常涉及查看网页的HTML源代码,可能还包括CSS和JavaScript文件。检查图片URL的模式,看看是否有规律…...

Linux--shell编程中有关while循环的详细内容

文章关于while循环的内容目录 一、while循环 ​​​​​​​​​​​​​​二、无限循环 ​​​​​​​​​​​​​​三、case语句 ​​​​​​​四、跳出循环 ​​​​​​​​​​​​​​五、break ​​​​​​​六、continue​​​​​​​ ​​​​​​​一、w…...

回归测试与重新测试

软件开发是一个充满挑战的旅程,在这条道路上始终伴随着错误和不确定性的挑战。然而,真正将卓越软件与其他软件区分开来的是管理和解决这些挑战的效率,这就是结构良好的测试计划变得至关重要的地方,该计划的核心在于两个基本实践&a…...

java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化

项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审…...

详解动态内存管理!

目录 ​编辑 1.为什么要用动态内存分配 2.malloc和free 2.1 malloc 2.2 free 3.calloc和realloc 3.1 calloc 3.2 realloc 4.常见的动态内存的错误 4.1 对NULL的解引用操作 4.2 对动态内存开辟空间的越界访问 4.3 对非动态内存开辟空间用free释放 4.4 使用free释放动…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...