当前位置: 首页 > 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释放动…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...