【计算机网络】Linux配置SNAT/DNAT策略
什么是NAT?
NAT 全称是 Network Address Translation(网络地址转换),是一个用来在多个设备共享一个公网 IP上网的技术。
NAT 的核心作用:将一个网络中的私有 IP 地址,转换为公网 IP 地址,从而实现上网功能。
没有NAT的情况:

环境准备
VMware 创建两台 Linux 虚拟机:
server1:nat-router
- 作用: NAT 路由器,作为网络地址转换的中介。
- 网卡配置:
ens32:NAT 模式(连接外网)ens33:仅主机模式(与 server2 通信)
[root@nat-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.100.202
NEKMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=223.5.5.5
DNS2=8.8.8.8[root@nat-router ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.200.253
NETMASK=255.255.255.0
server2:nat-client
- 作用: NAT 客户端,通过 server1 上网。
- 网卡配置:
ens32:仅主机模式(连接 server1)
[root@nat-client ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
BOOTPROTO=static
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.200.201
NEKMASK=255.255.255.0
GATEWAY=192.168.200.253
DNS1=223.5.5.5
NAT 实现原理
使用 iptables 实现 NAT 转换
iptables是一个 防火墙工具,用于配置 Linux 内核的网络行为。- 本身不做 NAT 转换,它的作用是 告诉内核怎么做。
实际执行 NAT 转换的是 Linux 内核
- 负责对底层网络数据包进行管理、处理与转发。
- 管理网卡、路由、数据包过滤等功能。
NAT 数据包处理流程:
人(配置命令) -> iptables(设置规则) -> 内核(执行SNAT) -> 网络通信
防火墙(Firewall)概念
- 作用: 管控进出网络的数据,防止非法访问或数据泄露。
- Linux 中常见防火墙工具有:
iptables(传统,功能强大)firewalld(基于 zone 的新型防火墙,CentOS 7+ 默认)
SNAT配置
server1(NAT 路由器)上配置 SNAT(源地址转换)
# 清除规则
iptables -F
iptables -t nat -F
- 清除原有的 iptables 规则,避免旧规则干扰。
-F:清空 filter 表(默认表)的所有规则。-t nat -F:清空 nat 表的所有规则。
# 开启路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
- 启用 IP 转发,使 Linux 内核可以作为路由器转发数据包。
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens32 -j SNAT --to-source 192.168.100.202
- 设置 SNAT 规则:
-t nat:操作 NAT 表。-A POSTROUTING:在数据包离开本机之前改变源地址。-s 192.168.200.0/24:匹配从 nat-client 发来的内网地址段。-o ens32:数据包从哪张网卡出去(外网网卡)。-j SNAT --to-source 192.168.100.202:将源地址改成 server1 外网 IP。
[root@nat-router ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destinationChain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.200.0/24 0.0.0.0/0 to:192.168.100.202
nat-client测试网络情况
My traceroute [v0.85]
nat-client (0.0.0.0) Sat Apr 5 22:15:10 2025
Keys: Help Display mode Restart statistics Order of fields quitPackets PingsHost Loss% Snt Last Avg Best Wrst StDev1. 192.168.200.253 0.0% 7 0.5 0.5 0.4 0.7 0.02. 192.168.100.2 0.0% 7 0.5 0.7 0.4 1.3 0.03. ???
可以看到正常转发网络请求

DNAT 配置
什么是 DNAT?
DNAT(Destination Network Address Translation,目的地址转换)是一种 NAT 技术,用于将 访问公网 IP 的请求转发到内网指定主机。
- 常见于部署在路由器上的 端口映射 功能,比如访问公网
80端口,就自动转发到内网 Web 服务器的80端口。
使用场景
假设你希望让外部主机访问 192.168.100.202:80(server1 公网 IP + 端口),但实际要访问的是 内网的 server2(192.168.200.201)的 Web 服务。
开启 DNAT 转发规则
iptables -t nat -A PREROUTING -i ens32 -d 192.168.100.202 -p tcp --dport 80 -j DNAT --to-destination 192.168.200.201
-t nat:操作 NAT 表。-A PREROUTING:在数据包进入防火墙(内核处理)前修改其目标地址。-i ens32:从外网接口进来的数据包。-d 192.168.100.202:目的 IP 是 server1 的公网 IP。-p tcp --dport 80:匹配 TCP 协议的 80 端口(Web 请求)。-j DNAT --to-destination 192.168.200.201:将请求转发到内网 server2 的 IP 地址。
开启 IP 转发功能(如果还没启)
echo 1 > /proc/sys/net/ipv4/ip_forward
- 允许 Linux 内核像路由器一样转发数据包。
查看 DNAT 配置是否生效
iptables -t nat -nL PREROUTING
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 192.168.100.202 tcp dpt:80 to:192.168.200.201
访问验证
从任意一台外部机器(能访问 server1)访问:
curl http://192.168.100.202
如果 server2(192.168.200.201)运行着 Web 服务,会成功响应!
可选:如果 server2 没有默认网关指向 server1,还需配置 SNAT(返回地址转换)
如果 server2 的返回数据包没有经过 server1,那么客户端可能收不到响应。这时需要配合 SNAT:
iptables -t nat -A POSTROUTING -d 192.168.200.201 -j SNAT --to-source 192.168.200.253
- 强制 server2 把响应发回 server1,再由 server1 转发出去。
这种 DNAT+SNAT 的搭配也叫 双向 NAT,常用于网络地址“伪装”或负载均衡。
结构图示意:
┌─────────────┐│ 外部客户端 │└─────┬───────┘↓┌────────────────────┐│ server1 (NAT网关) ││ ens32: 192.168.100.202│ ens33: 192.168.200.253└────────┬───────────┘↓ DNAT转发┌────────────────────┐│ server2 (内网Web) ││ ens32: 192.168.200.201└────────────────────┘
总结:SNAT 与 DNAT 的区别
| 类型 | 全称 | 修改内容 | 作用方向 | 常用于 |
|---|---|---|---|---|
| SNAT | Source NAT | 源 IP 地址 | 出去的包 | 内网访问公网(上网) |
| DNAT | Destination NAT | 目的 IP 地址 | 进入的包 | 公网访问内网服务(端口映射) |
相关文章:
【计算机网络】Linux配置SNAT/DNAT策略
什么是NAT? NAT 全称是 Network Address Translation(网络地址转换),是一个用来在多个设备共享一个公网 IP上网的技术。 NAT 的核心作用:将一个网络中的私有 IP 地址,转换为公网 IP 地址,从而…...
火山引擎coze用户市场
火山引擎 **Coze**(扣子)的用户市场主要集中在 **需要快速构建和部署智能对话应用的企业及开发者群体**,覆盖多个行业与场景。以下是具体分析: --- ### **一、核心用户群体** 1. **企业用户** - **互联网/科技公司**&#…...
qt designer 软件主题程序设计
对于使用Qt Designer设计的界面,主题切换的实现需要结合Qt的信号槽机制、样式表动态加载以及资源管理。以下是针对Qt Designer UI的详细解决方案: 一、UI文件与主题系统的整合架构 二、核心实现步骤 1. 动态样式表加载系统 // ThemeManager.h class …...
2025/4/2 心得
第一题 题目描述 给定1001个范围在[1,1000]的数字,保证只有1个数字重复出现2次,其余数字只出现1次。试用O(n)时间复杂度来求出出现2次的这个数字。 不允许用数组 输入格式 第一行:一个整数1001; 第二行:1001个用…...
AI安全:构建负责任且可靠的系统
AI已成为日常生活中无处不在的助力,随着AI系统能力和普及性的扩展,安全因素变得愈发重要。从基础模型构建者到采用AI解决方案的企业,整个AI生命周期中的所有相关方都必须共同承担责任。 为什么AI安全至关重要? 对于企业而言&…...
VUE+SPRINGBOOT+语音技术实现智能语音歌曲管理系统
语音控制歌曲的播放、暂停、增删改查 <template><div class"Music-container"><div style"margin: 10px 0"><!--检索部分--><el-input style"width: 200px;" placeholder"请输入歌曲名称"v-model"sen…...
使用 SignalR 在 .NET Core 8 最小 API 中构建实时通知
示例代码:https://download.csdn.net/download/hefeng_aspnet/90448094 介绍 构建实时应用程序已成为现代 Web 开发中必不可少的部分,尤其是对于通知、聊天系统和实时更新等功能。SignalR 是 ASP.NET 的一个强大库,可实现服务器端代码和客户…...
Kotlin 集合函数:map 和 first 的使用场景
Kotlin 提供了丰富的集合操作函数,使开发者可以更加简洁、高效地处理数据。其中,map 和 first 是两个常用的函数,分别用于转换集合和获取集合中的第一个元素。 1. map 的使用场景 场景 1:对象列表转换 在开发中,我们…...
Spring Cloud 框架为什么能处理高并发
Spring Cloud框架能够有效处理高并发场景,核心在于其微服务架构设计及多组件的协同作用,具体机制如下: 一、分布式架构设计支撑高扩展性 服务拆分与集群部署 Spring Cloud通过微服务拆分将单体系统解耦为独立子服务,每个服务可独…...
【Python爬虫高级技巧】BeautifulSoup高级教程:数据抓取、性能调优、反爬策略,全方位提升爬虫技能!
大家好,我是唐叔!上期我们聊了 BeautifulSoup的基础用法 ,今天带来进阶篇。我将分享爬虫老司机总结的BeautifulSoup高阶技巧,以及那些官方文档里不会告诉你的实战经验! 文章目录 一、BeautifulSoup性能优化技巧1. 解析…...
复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect
这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴,将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器,能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…...
Spring Boot + MySQL + MyBatis(注解和XML配置两种方式)集成Redis的完整启用及配置详解,包含代码示例、注释说明和表格总结
以下是 Spring Boot MySQL MyBatis(注解和XML配置两种方式)集成Redis的完整启用及配置详解,包含代码示例、注释说明和表格总结: 1. 添加依赖 在pom.xml中添加Spring Boot对MySQL、MyBatis和Redis的支持依赖: <d…...
Webpack vs Vite:现代前端构建工具的巅峰对决与选型指南
构建工具的进化革命当雪碧瓶上的水珠折射出前端工程的变迁史,Webpack与Vite的决战已然成为现代前端开发的分水岭。这场始于打包理念的革命,正在重塑整个前端生态的底层逻辑。本文将从原理架构、性能表现、开发体验三个维度,结合真实项目数据对…...
2023-2024总结记录
概括经历 这一年算是一个人生节点,2023年花了一整年的时间在准备考研,基本上等于一个人奋战,我不怎么去图书馆,只呆在无人的实验室,还好有对象陪我,不然可能要抑郁了。作息上还是很随意,什么时…...
技术驱动革新,强力巨彩LED软模组助力创意显示
随着LED显示技术的不断突破,LED软模组因其独特的柔性特质和个性化显示效果,正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新,为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。 LED…...
Spring 核心技术解析【纯干货版】- XVIII:Spring 网络模块 Spring-WebSocket 模块精讲
在现代 Web 开发中,实时通信已成为提升用户体验的关键技术之一。传统的 HTTP 轮询方式存在较高的延迟和带宽开销,而 WebSocket 作为一种全双工通信协议,能够在客户端和服务器之间建立持久连接,实现高效的双向数据传输。 Spring 框…...
Spark,HDFS概述
HDFS组成构架: 注: NameNode(nn):就是 Master,它是一个主管、管理者。 (1) 管理 HDFS 的名称空间; (2) 配置副本策略。记录某些文件应该保持几个副本; (3) 管理数据块(…...
【数据结构】图论进阶:生成树、生成森林与权值网络的终极解析
图的基本概念 导读一、图中的树与森林1.1 生成树与生成森林1.1.1 生成树1.1.2 生成森林1.1.3 生成树、生成森林与连通分量结点的关系边的关系 1.2 有向图中的树与森林1.2.1 有向树与有向森林1.2.2 生产有向树与生成有向森林1.2.3 有向树与生成有向树的区别1.2.4 有向森林与生成…...
C和C++(list)的链表初步
链表是构建其他复杂数据结构的基础,如栈、队列、图和哈希表等。通过对链表进行适当的扩展和修改,可以实现这些数据结构的功能。想学算法,数据结构,不会链表是万万不行的。这篇笔记是一名小白在学习时整理的。 C语言 链表部分 …...
深入浅出 TypeScript 泛型:类型安全的艺术与实践
文章目录 一、泛型的核心概念1.1 类型参数:代码中的类型变量1.2 类型推断:让代码保持简洁 二、泛型的四大应用场景2.1 泛型函数:打造通用工具库2.2 泛型接口:定义灵活的数据结构2.3 泛型类:构建类型安全的容器2.4 泛型…...
【KWDB创作者计划】_KaiwuDB 2.1.0 单节点裸机部署
大家好,这里是 DBA学习之路,专注于提升数据库运维效率。 目录 前言KWDB 介绍安装准备环境信息配置要求操作系统软件依赖端口要求安装包下载 部署 KWDB简单实用连接数据库创建数据库创建用户创建时序表 前言 今天无意间在墨天轮看到一个征文活动 征文大赛…...
洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构
题目描述 《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a a a 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 2 2 2,向下取整)。第几天的时候木…...
前端快速入门学习3——CSS介绍与选择器
1.概述 CSS全名是cascading style sheets,中文名层叠样式表。 用于定义网页样式和布局的样式表语言。 通过 CSS,你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式,从而实现更精确的页面设计。 HTML与CSS的关系:HTML相当…...
Redash:一个开源的数据查询与可视化工具
Redash 是一款免费开源的数据可视化与协作工具,可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程,尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…...
嵌入式Linux驱动—— 1 GPIO配置
目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能(CCM) 1.3 IO 复用(IOMUXC) 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程: 使能某组GPIO模块(GPIO1、2、...)&#…...
[ICLR 2025]Biologically Plausible Brain Graph Transformer
论文网址:Biologically Plausible Brain Graph Transformer 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 …...
SpringBoot+MyBatis Plus+PageHelper+vue+mysql 实现用户信息增删改查功能
静态资源展示 (1)静态资源下载 (2)下载后文件放到resources/static 目录下 (3) main函数启动项目访问对应文件,http://127.0.0.1:8080/user-list.html 数据库添加表和数据 SET FOREIGN_KEY_CHECKS0;-- --------…...
企业常用Linux服务搭建
1.需要两台centos 7服务器,一台部署DNS服务器,另一台部署ftp和Samba服务器。 2. 部署DNS 服务器 #!/bin/bash# 更新系统 echo "更新系统..." sudo yum update -y# 安装 BIND 和相关工具 echo "安装 BIND 和相关工具..." sudo y…...
Qwen-7B-Chat 本地化部署使用
通义千问 简介 通义千问是阿里云推出的超大规模语言模型,以下是其优缺点: 优点 强大的基础能力:具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…...
QGIS获取建筑矢量图-Able Software R2V
1.QGIS截图 说明:加载天地图矢量图层,然后进行截图。 2.Able Software R2V 说明:Able Software R2V 是一款将光栅图像(如扫描图纸、航拍照片)自动转换为矢量图形(如DXF格式)的软件&a…...
