当前位置: 首页 > news >正文

【网络】iptables MASQUERADE作用

文章目录

  • 概述
  • 1. 设置了 MASQUERADE/SNAT (正常情况)
  • 2. 没有设置 MASQUERADE/SNAT

概述

sudo iptables -t nat -A POSTROUTING -j MASQUERADE 的核心作用

这条命令的作用是:在所有从本机转发出去的数据包离开本机之前,自动将其源IP地址修改为本机出口网的IP地址。

针对您的场景分析 (Client -> Server1 -> Server2)
我们用这个具体场景来解释,假设:

Client IP: 192.168.1.100 (一个私有IP)

Server1 IP:

  • 内网卡 (eth1): 192.168.1.1 (Client的网关)

  • 外网卡 (eth0): 111.11.1.42 (公网IP)

Server2 IP: 8.8.8.8 (一个公网IP)

1. 设置了 MASQUERADE/SNAT (正常情况)

1、Client 发送包:

  • 数据包: 源IP: 192.168.1.100 (client) | 目标IP: 8.8.8.8 (server2)

  • Client根据自己的路由表,将这个包发给它的网关 192.168.1.1 (Server1)。

2、Server1 收到并路由:

  • 数据包从 eth1 进入 Server1。

  • Server1 的内核根据路由表,判断这个包要去往互联网,应该从 eth0 接口发出。

  • 在数据包从 eth0 发出之前 (POSTROUTING 链),MASQUERADE 规则生效。

3、MASQUERADE 执行SNAT:

  • 规则将数据包的源IP从 192.168.1.100(client) 修改为 Server1 的外网IP 111.11.1.42(server1)。

  • 修改后的数据包: 源IP: 111.11.1.42 (server1) | 目标IP: 8.8.8.8 (server2)

  • 这个新包被发送到互联网,最终到达 Server2。

4、Server2 回复:

  • Server2 收到包后,它认为是在和 111.11.1.42 (server1)通信。

  • 它构造回复包: 源IP: 8.8.8.8 (server2) | 目标IP: 111.11.1.42 (server1)

5、回复包回到 Server1:

  • 这个回复包通过互联网路由,顺利到达 Server1 (111.11.1.42)。

  • Server1 的内核知道这个连接(因为它有连接跟踪 conntrack 的记录),记得这个来自 8.8.8.8 发给 111.11.1.42 的回复,其实是属于当初那个从 192.168.1.100 发往 8.8.8.8 的请求。

  • 内核在 PREROUTING 链执行 DNAT,将回复包的目标IP从 111.11.1.42 (server1)修改回 192.168.1.100 (client)。

6、Server1 转发回 Client:

  • 修改后的回复包: 源IP: 8.8.8.8 | 目标IP: 192.168.1.100

  • Server1 根据路由表,将这个包从 eth1 接口发出,最终到达 Client。

结论: 通信成功。Server2 始终不知道 Client 192.168.1.100 的存在,它只和 Server1 通信。

2. 没有设置 MASQUERADE/SNAT

1、Client 发送包:

  • 数据包: 源IP: 192.168.1.100 | 目标IP: 8.8.8.8

  • 包到达 Server1。

2、Server1 收到并路由:

  • 数据包从 eth1 进入 Server1。

  • 内核路由判断它应该从 eth0 发出。

  • 因为没有 SNAT 规则,数据包原封不动地从 eth0 发出。

  • 发出的数据包: 源IP: 192.168.1.100(client) | 目标IP: 8.8.8.8

3、Server2 收到包:

  • Server2 收到这个包,看到源IP是 192.168.1.100(client) 。

  • 它很高兴地处理这个请求,然后构造回复包。

4、Server2 尝试回复:

  • 回复包: 源IP: 8.8.8.8 | 目标IP: 192.168.1.100

  • 问题来了! 192.168.1.100 是一个私有IP地址,在公共互联网上是不可路由的。这个回复包根本到不了 Client

  • 更可能的情况是,互联网上的路由器在看到目标地址是私有IP时,会直接丢弃这个包。回复包甚至都无法到达 Server1

5、即使回复包奇迹般到达 Server1:

  • 假设我们在一个实验环境中,回复包被送回了 Server1。

  • Server1 内核看到这个包:目标IP: 192.168.1.100。

  • 它检查自己的连接跟踪表(conntrack),但找不到任何记录(因为出去的包没做SNAT,无法建立完整的连接跟踪)。

  • 最终,Server1 不知道这个包是给谁的。如果它开启了IP转发,它可能会尝试将其转发到 192.168.1.100,但整个过程非常脆弱且不符合标准。

在这里插入图片描述

http://www.dtcms.com/a/354314.html

相关文章:

  • 机器学习与Backtrader结合量化交易
  • 无人机抗干扰技术要点解析
  • O2OA移动办公 × Flutter:一次开发,跨平台交付
  • 【C++】深入解析构造函数初始化
  • Docker 镜像重命名【打上新的标签】
  • AI应用图文解说--百度智能云实现语音聊天
  • Python爬虫获取1688商品列表与图片信息
  • 【免驱】一款基于AI8H2K08U芯片的USB转RS485模块,嵌入式工程师调试好帮手!
  • Web 自动化测试常用函数实战(一)
  • 如何防御安全标识符 (SID) 历史记录注入
  • 嵌入式学习day38
  • 怎样选择合适的报表系统?报表系统的主要功能有什么
  • PLC_博图系列☞基本指令”S_PULSE:分配脉冲定时器参数并启动“
  • PyTorch闪电入门:张量操作与自动微分实战
  • Wxml2Canvas在组件中的渲染获取不到元素问题
  • vue 海康视频插件
  • Java Spring Boot 集成淘宝 SDK:实现稳定可靠的商品信息查询服务
  • AI鱼塘,有你画的鱼吗?
  • 代码随想录刷题Day44
  • IDEA连接阿里云服务器中的Docker
  • 嵌入式学习日志————DMA直接存储器存取
  • 微信开发者工具中模拟调试现场扫描小程序二维码功能
  • Centos 7.6离线安装docker
  • 元宇宙+RWA:2025年虚拟资产与真实世界的金融融合实验
  • aiohttp模块如何使用
  • 开发避坑指南(39):Java List全null元素引发的空判断无效处理方案
  • 用LightRAG打造智能问答系统:知识图谱与RAG的融合应用实践
  • 如何在升级到S/4HANA后关闭SAP旧系统?
  • 3-4〔OSCP ◈ 研记〕❘ WEB应用攻击▸Burp Suite工具
  • MySQL中的InnoDB