【计算机网络】Linux配置SNAT/DNAT策略

news2025/4/8 7:12:13

什么是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               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain 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   quit
                                       Packets               Pings
 Host                                Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 192.168.200.253                   0.0%     7    0.5   0.5   0.4   0.7   0.0
 2. 192.168.100.2                     0.0%     7    0.5   0.7   0.4   1.3   0.0
 3. ???

可以看到正常转发网络请求
在这里插入图片描述

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 的区别

类型全称修改内容作用方向常用于
SNATSource NAT源 IP 地址出去的包内网访问公网(上网)
DNATDestination NAT目的 IP 地址进入的包公网访问内网服务(端口映射)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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 中构建实时通知

示例代码&#xff1a;https://download.csdn.net/download/hefeng_aspnet/90448094 介绍 构建实时应用程序已成为现代 Web 开发中必不可少的部分&#xff0c;尤其是对于通知、聊天系统和实时更新等功能。SignalR 是 ASP.NET 的一个强大库&#xff0c;可实现服务器端代码和客户…

复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect

这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴&#xff0c;将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器&#xff0c;能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…

技术驱动革新,强力巨彩LED软模组助力创意显示

随着LED显示技术的不断突破&#xff0c;LED软模组因其独特的柔性特质和个性化显示效果&#xff0c;正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新&#xff0c;为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。    LED…

Spark,HDFS概述

HDFS组成构架&#xff1a; 注&#xff1a; NameNode&#xff08;nn&#xff09;&#xff1a;就是 Master&#xff0c;它是一个主管、管理者。 (1) 管理 HDFS 的名称空间&#xff1b; (2) 配置副本策略。记录某些文件应该保持几个副本&#xff1b; (3) 管理数据块&#xff08;…

【数据结构】图论进阶:生成树、生成森林与权值网络的终极解析

图的基本概念 导读一、图中的树与森林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)的链表初步

链表是构建其他复杂数据结构的基础&#xff0c;如栈、队列、图和哈希表等。通过对链表进行适当的扩展和修改&#xff0c;可以实现这些数据结构的功能。想学算法&#xff0c;数据结构&#xff0c;不会链表是万万不行的。这篇笔记是一名小白在学习时整理的。 C语言 链表部分 …

【KWDB创作者计划】_KaiwuDB 2.1.0 单节点裸机部署

大家好&#xff0c;这里是 DBA学习之路&#xff0c;专注于提升数据库运维效率。 目录 前言KWDB 介绍安装准备环境信息配置要求操作系统软件依赖端口要求安装包下载 部署 KWDB简单实用连接数据库创建数据库创建用户创建时序表 前言 今天无意间在墨天轮看到一个征文活动 征文大赛…

前端快速入门学习3——CSS介绍与选择器

1.概述 CSS全名是cascading style sheets,中文名层叠样式表。 用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;从而实现更精确的页面设计。 HTML与CSS的关系&#xff1a;HTML相当…

Redash:一个开源的数据查询与可视化工具

Redash 是一款免费开源的数据可视化与协作工具&#xff0c;可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程&#xff0c;尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…

嵌入式Linux驱动—— 1 GPIO配置

目录 1.GPIO操作 1.1 IO命名 1.2 GPIO 时钟使能&#xff08;CCM&#xff09; 1.3 IO 复用&#xff08;IOMUXC&#xff09; 1.4 IO 配置 1.5 GPIO 配置 1.GPIO操作 GPIO操作主要是以下流程&#xff1a; 使能某组GPIO模块&#xff08;GPIO1、2、...&#xff09;&#…

[ICLR 2025]Biologically Plausible Brain Graph Transformer

论文网址&#xff1a;Biologically Plausible Brain Graph Transformer 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 …

SpringBoot+MyBatis Plus+PageHelper+vue+mysql 实现用户信息增删改查功能

静态资源展示 &#xff08;1&#xff09;静态资源下载 &#xff08;2&#xff09;下载后文件放到resources/static 目录下 (3) main函数启动项目访问对应文件&#xff0c;http://127.0.0.1:8080/user-list.html 数据库添加表和数据 SET FOREIGN_KEY_CHECKS0;-- --------…

企业常用Linux服务搭建

1.需要两台centos 7服务器&#xff0c;一台部署DNS服务器&#xff0c;另一台部署ftp和Samba服务器。 2. 部署DNS 服务器​ #!/bin/bash# 更新系统 echo "更新系统..." sudo yum update -y# 安装 BIND 和相关工具 echo "安装 BIND 和相关工具..." sudo y…

Qwen-7B-Chat 本地化部署使用

通义千问 简介 通义千问是阿里云推出的超大规模语言模型&#xff0c;以下是其优缺点&#xff1a; 优点 强大的基础能力&#xff1a;具备语义理解与抽取、闲聊、上下文对话、生成与创作、知识与百科、代码、逻辑与推理、计算、角色扮演等多种能力。可以续写小说、编写邮件、解…

QGIS获取建筑矢量图-Able Software R2V

1.QGIS截图 说明&#xff1a;加载天地图矢量图层&#xff0c;然后进行截图。 2.Able Software R2V 说明&#xff1a;Able Software R2V 是一款​​将光栅图像&#xff08;如扫描图纸、航拍照片&#xff09;自动转换为矢量图形&#xff08;如DXF格式&#xff09;​​的软件&a…

form实现pdf文件转换成jpg文件

说明&#xff1a; 我希望将pdf文件转换成jpg文件 请去下载并安装 Ghostscript&#xff0c;gs10050w64.exe 配置环境变量&#xff1a;D:\Program Files\gs\gs10.05.0\bin 本地pdf路径&#xff1a;C:\Users\wangrusheng\Documents\name.pdf 输出文件目录&#xff1a;C:\Users\wan…

STM32单片机入门学习——第13节: [6-1] TIM定时中断

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.04 STM32开发板学习——第13节: [6-1] TIM定时中断 前言开发板说明引用解答和科普一…

【2】搭建k8s集群系列(二进制)之安装etcd数据库集群

一、etcd服务架构 Etcd 是一个分布式键值存储系统&#xff0c;Kubernetes 使用 Etcd 进行数据存储&#xff0c;所以先 准备一个 Etcd 数据库&#xff0c;为解决 Etcd 单点故障&#xff0c;应采用集群方式部署&#xff0c;这里使用 3 台组建集群&#xff0c;可容忍 1 台机器故障…