IPtables中SNAT、DNAT和MASQUERADE的含义

IPtables中SNAT、DNAT和MASQUERADE的含义IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNAT和DNAT。SNAT是sourcenetworkaddresstranslation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访

大家好,又见面了,我是你们的朋友全栈君。

IPtables中可以灵活的做各种网络地址转换(NAT),网络地址转换主要有两种:SNATDNAT

SNATsource networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IPPC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了,所以叫做SNAT基于源地址的地址转换

DNATdestination networkaddress translation的缩写,即目标网络地址转换,典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT基于目标的网络地址转换

MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。

在iptables中有着和SNAT相近的效果,但也有一些区别,但使用SNAT的时候,出口ip的地址范围可以是一个,也可以是多个,例如:

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去,

iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source192.168.5.3

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去

iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT –to-source192.168.5.3-192.168.5.5

这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip,假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变,而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址,这个时候如果按照现在的方式来配置iptables就会出现问题了,因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip,这样是非常不好用的。

MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。

比如下边的命令:

iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的话,不用指定SNAT的目标ip了,不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148098.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月15日 下午3:16
下一篇 2022年6月15日 下午3:16


相关推荐

  • 段永平评价用AI做投资分析:查消息很方便,是不是准确不知道

    段永平评价用AI做投资分析:查消息很方便,是不是准确不知道

    2026年3月13日
    3
  • 解决NVIDIA显卡驱动 图形驱动程序安装失败 问题

    解决NVIDIA显卡驱动 图形驱动程序安装失败 问题本教程是在当你尝试一般的教程都无法解决问题的前提下使用,比如使用DDU工具卸载原显卡驱动后重新安装无效,找不到独立显卡的情况。退出火绒等杀毒软件win+R输入services.msc进入服务。将WindowsUpdata启动类型改为自动,并启动服务。win+R输入gpedit.msc进入本地策略编辑器。在计算机配置-模板管理-系统-设备安装-设备安装限制中双击图中第三个将其改为未配置或禁用重新安装显卡驱动即可…

    2022年5月6日
    845
  • java 写入properties文件_Java读写Properties配置文件

    java 写入properties文件_Java读写Properties配置文件Java 读写 Properties 配置文件 1 Properties 类与 Properties 配置文件 Properties 类继承自 Hashtable 类并且实现了 Map 接口 也是使用一种键值对的形式来保存属性集 不过 Properties 有特殊的地方 就是它的键和值都是字符串类型 2 Properties 中的主要方法 1 load InputStreami 这个方法可以从 properti

    2025年9月30日
    5
  • 两个正序数组 找中位数_两个有序数组的中位数

    两个正序数组 找中位数_两个有序数组的中位数原题连接给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输入:nums1 = [0,

    2022年8月8日
    6
  • 腾讯元宝接入DeepSeek-R1满血版 | 让普通用户也有神龙可用

    腾讯元宝接入DeepSeek-R1满血版 | 让普通用户也有神龙可用

    2026年3月12日
    1
  • 深度学习RNN实现股票预测实战(附数据、代码)

    深度学习RNN实现股票预测实战(附数据、代码)背景知识最近再看一些量化交易相关的材料 偶然在网上看到了一个关于用 RNN 实现股票预测的文章 出于好奇心把文章中介绍的代码在本地跑了一遍 发现可以 work 于是就花了两个晚上的时间学习了下代码 顺便把核心的内容翻译成中文分享给大家 nbsp 首先讲讲对于股票预测的理解 股票是一种可以轻易用数字表现律动的交易形式 因为大数定理的存在 定义了世间所有的行为都可以通过数字表示 并且存在一定的客观规律 股票也不例外

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号