文章目录

  • Pre
  • 前提:开启IP转发
  • IP包的结构
  • 数据包在iptables中要经过的链(chain)
  • 总结
    • -j SNAT
    • -j DNAT

Pre

Linux-iptables命令

Linux-SNAT和DNAT

在上一博客Linux-iptables命令中,我们知道了一些iptable的nat表中几个链的区别,这里单独讲其中两个链拿出来详细说明。

  • DNAT(Destination Network Address Translation,目的地址转换) 通常被叫做目的映射。

  • SNAT(Source Network Address Translation,源地址转换)通常被叫做源映射


前提:开启IP转发

开启内核转发的模块。

echo 1 > /porc/sys/net/ipv4/ip_forward  #临时生效,重启失效

永久生效:

vi /etc/sysctl.conf

修改其中的net.ipv4.ip_forward = 1

执行

sysctl -p

立刻生效


IP包的结构

我们在设置Linux网关或者防火墙时经常要用来的两种方式。
首先,我们要了解一下IP包的结构

在任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而iptables的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改。


数据包在iptables中要经过的链(chain)

图中正菱形的区域是对数据包进行判定转发的地方。

在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发。如果destination ip adress是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则交给FORWARD链检测。

这也就是说,我们要做的DNAT要在进入这个菱形转发区域之前,也就是在PREROUTING链中做,

比如我们要把访问202.103.96.112的访问转发到192.168.0.112上:

iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112

这个转换过程当中,其实就是将已经达到这台Linux网关(防火墙)上的数据包上的destination ip address从202.103.96.112修改为192.168.0.112然后交给系统路由进行转发。

SNAT自然是要在数据包流出这台机器之前的最后一个链也就是POSTROUTING链来进行操作

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 58.20.51.66

这个语句就是告诉系统把即将要流出本机的数据的source ip address修改成为58.20.51.66。这样,数据包在达到目的机器以后,目的机器会将包返回到58.20.51.66也就是本机。如果不做这个操作,那么你的数据包在传递的过程中,reply的包肯定会丢失。


总结

PREROUTING: 位于 nat 表,用于修改目的地址(DNAT)(上一节说的是数据包作路由选择前应用此链中的规则 记住!所有的数据包进来的时侯都先由这个链处理)

POSTROUTING:位于 nat 表,用于修改源地址 (SNAT)(上一节说的是对数据包作路由选择后应用此链中的规则,所有的数据包出来的时侯都先由这个链处理.


-j SNAT

简单的说,开放内网机器外网权限

注意:【系统在路由及过虑等处理直到数据包要被送出时才进行SNAT】

-j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING链) 源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池 (一组连续的 IP 地址)

例如:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1

将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10

同上,只不过修改成一个地址池里的 IP


-j DNAT

简单的来说是发布内部服务器,让外面的internet用户能访问到服务器,如网站等

有一种DNAT的特殊情况是重定向,也就是所谓的Redirection,这时候就相当于将符合条件的数据包的目的ip地址改为数据包进入系统时的网络接口的ip地址

-j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链) 目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池 (一组连续的 IP 地址)

例如:

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1

把从 ppp0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81  -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80  -j DNAT --to192.168.0.1-192.168.0.10

公网访问 http://218.100.100.111时:(假设公网上用户的IP为199.199.199.199,端口12345为随机的产生的。)

数据源 : ip:199.199.199.199 sport:12345
数据目标: ip:218.100.100.111 dport 80

此时,通过-A PREROUTING –i eth0 –p tcp –d 218.100.100.111 --dport 80 –j DNAT --to-destination 192.168.5.179:80 告诉199.199.199.199,您要访问的真正地址应该是192.168.5.179:80

Linux-SNAT和DNAT相关推荐

  1. Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则

    Linux的iptables防火墙.SNAT.DNAT 一.iptables概述 1.netfilter/iptables关系 2.四表五链 四表 五链 规则表之间的优先顺序 规则链之间的匹配顺序 二 ...

  2. linux服务-iptables( snat 和dnat )

    iptables snat 和dnat说明 1.dnat是用来做目的网络地址转换的,就是重写包的目的IP地址.比如,你的Web服务器在LAN内部,而且没有可在Internet上使用的真实IP地址,那就 ...

  3. Linux包过滤防火墙(SNAT,DNAT)

    文章目录 一.Linux包过滤防火墙概述 二.iptables的表,链结构 三.数据包过滤的匹配流程 四.iptables的基本语法 五.设置默认策略 六.数据包的常见类型 七.规则的匹配条件 1.匹 ...

  4. iptables 防火墙中的SNAT和DNAT

    目录 前言 一.SNAT策略 1.1 SNAT应用环境 1.2 SNAT原理 1.3 SNAT转换前提条件 1.4 SNAT转换流程 1.4 SNAT 应用 1.4.1 临时打开 1.4.2 永久打开 ...

  5. lqc_使用SNAT、DNAT策略实现网关应用

    使用SNAT.DNAT策略实现网关应用 实验环境: 某公司使用双网卡linux主机作为网关服务器,其中网卡eth1连接局域网,网卡eth0通过光纤接入internet,由于只注册了一个公网IP地址,要 ...

  6. 防火墙——SNAT和DNAT策略的原理及应用、防火墙规则的备份和还原

    防火墙--SNAT和DNAT策略的原理及应用.防火墙规则的备份和还原 一.SNAT策略概述 SNAT(Source Network Address Translation,源地址转换)是Linux防火 ...

  7. Docker 容器网络访问原理,SNAT和DNAT

    docker使用教程相关系列 目录 目录 容器网络访问原理图 网络访问的过程图 DOCKER SNAT与DNAT 容器访问外部实现 外部访问容器实现 容器网络访问原理图 首先我们会有这个 宿主机命名空 ...

  8. iptables防火墙(二)——SNAT和DNAT

    目录 一:SNAT策略及应用 1.1SNAT应用环境和SNAT策略的原理 1.1.1SNAT策略的典型应用环境 1.1.2SNAT策略的原理 1.1.3SNAT转换前提条件 1.2SNAT策略的工作原 ...

  9. 防火墙之SNAT和DNAT

    文章目录 1 SNAT 原理与应用 1.1 SNAT 应用环境和策略的原理 1.2 SNAT 工作原理 1.3 SNAT 转换前提条件 1.4 路由转发开启方式 1.5 SNAT转换 1.6 小知识扩 ...

  10. iptables之SNAT与DNAT

    iptables之SNAT与DNAT 前言 一.SNAT策略及应用 (1)SNAT策略概述 ①SNAT应用环境 ②SNAT的策略原理 ③SNAT转换前提条件 (2)开启SNAT命令 (3)SNAT案例 ...

最新文章

  1. ​清华来了第二位菲尔兹奖得主,是丘成桐力荐的老朋友Caucher Birkar
  2. jdbcdslog hibernate sql log
  3. 笔记-高项案例题-2016年下-计算题
  4. 《VC++深入详解》学习笔记 第一章 Windows程序内部运行机制
  5. LeetCode 2069. 模拟行走机器人 II(模拟)
  6. win7环境下创建超级隐藏账户
  7. 西南交大计算机机试题,西南交大 土木茅以升班 计算机应用基础试题(2004年) B卷...
  8. python中matplotlib出错_Python中使用matplotlib的报错问题
  9. Matlab中(),[],与{}的用法认识
  10. RainMeter学习1
  11. 集成电路和芯片的联系与区别
  12. 在win7中chm打不开的多种解决方法
  13. 阵列卡的全称叫磁盘阵列卡 是用来做 RAID
  14. 极值理论(一):极大值极限分布
  15. 【Day 6 of Learning Python 】修改、添加和删除列表元素
  16. ROS学习之发布消息——Publisher_代码分析
  17. 什么从什么写短句_什么在什么,在什么,什么仿写句子,怎样写
  18. Android原生权限管理:AppOps
  19. 配准带尺度点云的方法汇总
  20. Ubuntu18.04 WPS安装后,提示“系统缺失字体symbol、wingdings、wingdings 2、wingdings 3、webding”的解决方法

热门文章

  1. 将keras的h5模型转化为onnx
  2. rdesktop 登录腾讯云
  3. 从postgress 读取数据
  4. html5测试 2345,HTML5实例测试
  5. 重温强化学习之无模型学习方法:TD(lambda)
  6. 线性代数笔记:Khatri-Rao积
  7. MCMC笔记:蒙特卡罗方法
  8. MATLAB从入门到精通-MATLAB零矩阵eye()函数的几种应用场景
  9. MapReduce 模式、算法和用例
  10. 计算机外观类型,知道你的笔记本电脑是什么类型的吗?五大类型派对号入座