首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

SNAT 与 DNAT

编程知识
2024年08月31日 18:37

本文为博主原创,转载请注明出处:

  SNAT(Source Network Address Translation,源网络地址转换)和DNAT(Destination Network Address Translation,目标网络地址转换)是网络地址转换(NAT)中的两种重要技术,它们在实现内部网络与外部网络之间的通信中发挥着关键作用。以下是对这两种技术的详细解释和它们的主要用途:

一、SNAT(源网络地址转换)

定义 SNAT是一种在IP数据包从内部网络发送到外部网络时,将源IP地址替换为公共IP地址的技术。这种转换允许内部网络中的多台设备通过共享一个或多个公共IP地址来访问外部网络。

工作原理 当内部网络中的设备发送数据包到外部网络时,数据包经过NAT设备(如路由器或防火墙),NAT设备会自动将数据包的源IP地址替换为配置的公共IP地址。这样,外部网络中的设备看到的所有来自内部网络的数据包都似乎来自同一个公共IP地址。

主要用途

  1. 地址共享:允许多个内部设备共享一个或多个公网IP地址访问互联网,从而节省公网IP资源。

  2. 负载均衡:在负载均衡场景中,SNAT可以将内部服务器的源IP地址替换为负载均衡器的IP地址,以实现流量分发和负载均衡。

  3. 安全性:通过隐藏内部网络的实际IP地址,SNAT可以增强内部网络的安全性,防止外部直接攻击内部设备。

  4. 简化网络配置:使用SNAT可以在规划地址时有更大的灵活性,简化内部网络的设计和配置。

二、DNAT(目标网络地址转换)

定义 DNAT是一种在IP数据包从外部网络发送到内部网络时,将目标IP地址替换为内部网络中的IP地址的技术。这种转换允许外部网络中的设备通过公共IP地址访问内部网络中的特定设备或服务。

工作原理 当外部网络中的数据包到达NAT设备时,NAT设备会检查数据包的目标IP地址和端口号,并根据配置的DNAT规则将其替换为内部网络中的相应IP地址和端口号。然后,数据包被转发到内部网络中的指定设备。

主要用途

  1. 端口映射:将外部网络中的公共IP地址和端口号映射到内部网络中的私有IP地址和端口号,实现远程访问、网站托管等功能。

  2. 负载均衡:在将外部流量分发到内部多个服务器时,DNAT可以根据负载均衡策略将流量转发到不同的服务器。

  3. 安全性:通过隐藏内部网络的实际IP地址和端口号,DNAT可以在一定程度上增强内部网络的安全性。

三、场景示例

场景假设

  • 内部网络:192.168.1.0/24

  • 外部网络:互联网,假设通过ISP获得的公网IP为1.2.3.4

  • 内部服务器IP:192.168.1.100,希望对外提供服务(例如Web服务)

  • NAT服务器/防火墙IP:内网为192.168.1.1,外网为1.2.3.4

3.1 添加SNAT规则

  允许外部访问内部服务器,首先,我们需要将到达NAT服务器的公网IP(1.2.3.4)上的特定端口(例如HTTP的80端口)的数据包转发到内部服务器的相应端口。

# 添加SNAT规则  
# 将源地址是192.168.1.0/24的数据包的源地址改为1.2.3.4  
# 假设出站接口为eth0(连接到外部网络的接口),需要根据实际情况替换  
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4  

3.2 添加DNAT规则

  允许外部访问内部服务器,需要将到达NAT服务器的公网IP(1.2.3.4)上的特定端口(例如HTTP的80端口)的数据包转发到内部服务器的相应端口。

# 添加DNAT规则  
# 将目的地址为1.2.3.4且目的端口为80的数据包的目标地址改为192.168.1.100  
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80  
  • -t nat:指定要操作的表为NAT表。NAT表用于地址转换,包括源地址转换(SNAT)和目的地址转换(DNAT)。

  • -A PREROUTING:向PREROUTING链添加一条规则。PREROUTING链用于处理进入本机的数据包,在路由决策之前进行。这意味着,对于进入本机的数据包,首先会经过PREROUTING链上的规则处理。

  • -d 1.2.3.4:指定目的IP地址为1.2.3.4的数据包会被这条规则匹配。这意味着,只有当数据包的目的地址是1.2.3.4时,这条规则才会生效。

  • -p tcp:指定协议类型为TCP。这意味着,只有TCP协议的数据包才会被这条规则匹配。

  • --dport 80:指定目的端口为80。这意味着,只有目的端口为80的TCP数据包才会被这条规则匹配。

  • -j DNAT:指定满足条件的数据包应该执行的动作是DNAT(目的地址转换)。DNAT用于将数据包的目的地址和/或端口号转换为其他值。

  • --to-destination 192.168.1.100:80:指定转换后的目的地址和端口。这意味着,满足上述条件的数据包的目的地址将被转换为192.168.1.100,目的端口将被转换为80。

 

From:https://www.cnblogs.com/zjdxr-up/p/18390656
本文地址: http://shuzixingkong.net/article/1618
0评论
提交 加载更多评论
其他文章 [postgres]使用pgbench进行基准测试
前言 pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带。pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率。 测试准备 既然要测postgres,肯定要先有个postgres。安装过程略过。 一些环境信息: postgres版
Go plan9 汇编: 打通应用到底层的任督二脉
原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 作为一个严肃的 Gopher,了解汇编是必须的。本汇编系列文章会围绕基本的 Go 程序介绍汇编的基础知识。 1. Go 程序到汇编 首先看一个简单到令人发指的示例: package main func main() { a := 1 print
Go plan9 汇编: 打通应用到底层的任督二脉 Go plan9 汇编: 打通应用到底层的任督二脉
2024 NepCTF
NepCTF NepMagic —— CheckIn 直接玩游戏就能出 注意有一关要把隐藏的方块全找到 NepCamera 先使用tshark读取数据 结果文件中发现大量jpeg头ffd8ffe0。 猜测是多个图片,编写脚本,提取出来。 脚本: import re inputFilePath=&qu
2024 NepCTF 2024 NepCTF 2024 NepCTF
设计模式之迭代器模式
迭代器模式很多人都熟悉,但是什么是迭代器,为什么要用迭代器?这个很多人就很难做出具体回答了,只是知道如果有了迭代器,那么我们就能foreach遍历了,方便循环处理。这只是对迭代器的用途,进行了回答,foreach语法是java1.5时加入的语法糖,那么在这之前呢,之前是怎么做的?要知道并不是所有容器
设计模式之迭代器模式
C++ lambda 引用捕获临时对象引发 coredump 的案例
今天复习前几年在项目过程中积累的各类技术案例,有一个小的 coredump 案例,当时小组里几位较资深的同事都没看出来,后面是我周末查了两三个小时解决掉的,今天再做一次系统的总结,给出一个复现的案例代码,案例代码比较简单,便于学习理解。 1. 简介 原则:临时对象不应该被 lambda 引用捕获,因
C++ lambda 引用捕获临时对象引发 coredump 的案例
STL 改造红黑树 模拟封装set和map
改造红黑树 目录改造红黑树适配STL迭代器的红黑树基本结构RBTreeNode__RBTree_iteratorRBTree完整代码封装的set封装的map 在初次看STL中实现红黑树的源码时有些不理解,然后自己尝试对set以RBTree<K,K>的方式封装红黑树的迭代器;实现过程发现,
大请求、请求超时问题
耗时很长的请求怎么处理?比如数据量大的。业务逻辑处理时间太久,以至于响应超时 这里的超时响应指的是ReadTimeOut,即发送请求内容完毕到接收响应数据开始的这段时间。普通HTTP请求可能在这段时间没有响应超时。 HTTP分块传输(Chunked Transfer Encoding)中每个数据块的
大请求、请求超时问题 大请求、请求超时问题 大请求、请求超时问题
全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型
在Python中,collections模块提供了一组高效、功能强大的容器数据类型,扩展了内置的基础数据类型(如list、tuple、dict等),这些容器数据类型在处理特定问题时,能够提供更简洁、更高效的解决方案。
全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型 全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型 全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型