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

  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。

SNAT 与 DNAT的更多相关文章

  1. iptables snat和dnat

    iptables中的snat和dnat是非常有用的,感觉他们二个比较特别,所以单独拿出来说一下. dnat是用来做目的网络地址转换的,就是重写包的目的IP地址.如果一个包被匹配了,那么和它属于同一个流 ...

  2. iptables snat 和dnat说明

    iptables中的snat和dnat是非常有用的,感觉他们二个比较特别,所以单独拿出来说一下. dnat是用来做目的网络地址转换的,就是重写包的目的IP地址.如果一个包被匹配了,那么和它属于同一个流 ...

  3. Iptables防火墙(SNAT和DNAT)

     1.SNAT:源地址转换 实现内网访问外网,修改IP地址,使用POSTROUTING 命令:iptables  -t  nat  -A POSTROUTING  -s  192.168.1.10/2 ...

  4. [daily] SNAT和DNAT

    SNAT,DNAT,MASQUERADE都是NAT MASQUERADE是SNAT的一个特例 SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包 ...

  5. Iptables 下 SNAT、DNAT和MASQUERADE三者之间的区别

    Iptables 中可以灵活的做各种网络地址转换(NAT,Network Address Translation) 网络地址转换(NAT)主要有两种:SNAT 和 DNAT,但是也有一种特例 MASQ ...

  6. 10.Linux防火墙iptables之SNAT与DNAT

    Linux防火墙iptables之SNAT与DNAT 目录 Linux防火墙iptables之SNAT与DNAT SNAT策略及应用 SNAT策略概述 SNAT策略典型应用环境 SNAT策略原理 SN ...

  7. 经验分享:Linux 双网卡SNAT和DNAT映射本地端口出外网

    A 机器 网卡1  公网IP网卡2  内网 B 机器网卡1 内网 如果想把公网端口P1 映射为内网B机器端口P2 iptables -t nat -A PREROUTING -d [A公网地址] -p ...

  8. 如何区分SNAT和DNAT

    从定义来讲它们一个是源地址转换,一个是目标地址转换.都是地址转换的功能,将私有地址转换为公网地址.要区分这两个功能可以简单的由连接发起者是谁来区分:       内部地址要访问公网上的服务时(如web ...

  9. 学习总结---SNAT和DNAT

    1.SNAT是结合源ip+源端口号变化的NAT功能. DNAT是将目的ip直接转换成私有的目的ip.(是否转换目的端口号?) 2.SNAT的应用场景:公司内部访问互联网时,使用公共的公网ip.从内到外 ...

  10. SNAT和DNAT

    1.SNAT iptables防火墙 Centos6.6 64位 iptables 内网:eth0 172.16.4.1 外网:eth 112.112.112.112/24 当有用户访问公网时,修改用 ...

随机推荐

  1. Windows服务器安全检查

    为降低windows服务器系统的脆弱性,除了补丁及时更新,还建议加强系统账号的管理. 1.精简系统登录账号,最小化登录权限 检查方法:开始->运行->compmgmt.msc(计算机管理) ...

  2. SpringBoot可视化接口开发工具magic-api

    magic-api简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller.Service ...

  3. 推荐一款Python接口自动化测试数据提取分析神器!

    1.引言 在处理JSON数据时,我们常常需要提取.筛选或者变换数据.手动编写这些操作的代码不仅繁琐,而且容易出错.Python作为一个功能强大的编程语言,拥有丰富的库和工具来处理这些数据.今天,将介绍 ...

  4. EasyBPM进销存之物料管理

    本文是EasyBPM平台实现进销存系列中的一篇,主要讲述物料的相关的管理. 在ERP系统中,"物料"一词有着广泛的含义,它是所有产品.半成品.在制品.原材料.配套件.协作件.易耗品 ...

  5. 将mysql的查询结果保存到文件中,并将文件从内网下载到外网服务器

    方法一: 直接执行命令: mysql> SELECT ordersid from yws.callback_clockd  ORDER BY ordersid ASC limit 0,10000 ...

  6. webpack4.15.1 学习笔记(一) — 基本概念

    目录 入口(entry) 出口(output) 加载器 Loaders 插件 Plugins 模式 webpack.config.js 配置 终终终终于下定决心,对你下手了,系统的学习一下. webp ...

  7. Linux 提权-密码搜寻

    本文通过 Google 翻译 Password Hunting – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充 ...

  8. [oeasy]python0140_导入_import_from_as_namespace_

    导入import 回忆上次内容 上次学习了 try except   注意要点 半角冒号 缩进 输出错误信息   有错就报告 不要隐瞒 否则找不到出错位置 还可以用traceback把 系统报错信息原 ...

  9. Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格

    本文分享自华为云社区<Kmesh v0.4发布!迈向大规模 Sidecarless 服务网格>,作者: 云容器大未来. 近日 Kmesh 发布了 v0.4.0 版本,感谢社区的贡献者在两个 ...

  10. 面试题-python 什么是闭包(closure)?

    前言 前面学了装饰器,那么闭包和装饰器有什么区别呢?闭包传递的是变量,而装饰器传递的是函数对象,只是传的参数内容不一样,闭包的概念包含了装饰器,可以说装饰器是闭包的一种,它只是传递函数对象的闭包. 先 ...