SNAT与DNAT的应用

news/2025/2/11 1:05:58/

目录

一、SNAT概述

1.SNAT应用环境——局域网共享上网

2. SNAT工作原理

2.1未作SNAT转换时

2.2进行SNAT转换后

二、配置SNAT策略

1.开启IP路由转发

2.SNAT转换

3.模拟实验

3.1服务端

3.2网关服务器

3.3网关服务器设置iptables规则

 3.4客户端

 3.5实验结果

三、DNAT概述

1.DNAT策略应用环境——外网访问在局域网中的服务器

 2.DNAT工作原理

 四、配置DNAT策略

 1.DNAT转换

2.模拟实验

3.1服务端

 3.2客户端

 3.3网关服务器

3.4配置DNAT策略

3.5实验结果

五、tcpdump抓包

六、防火墙规则的备份和还原


一、SNAT概述

SNAT原理:修改数据包的源地址

1.SNAT应用环境——局域网共享上网

将局域网中的IP地址映射到 dns 网关服务器上,将私网IP地址转换成公网IP地址,从而访问位于公网的服务器。

2. SNAT工作原理

2.1未作SNAT转换时

源主机发送数据包给目的主机,目的主机可以收到数据包,但目的主机发送回包时,数据包无法发送给源主机。

2.2进行SNAT转换后

工作原理:

  1. 将从内网发到外网的数据包的源IP由私网IP转换成公网IP
  2. 将从外网服务器响应返回到内网的数据包的目的IP由公网IP转换成私网IP

二、配置SNAT策略

SNAT转换前条件

  • 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
  • Linux网关开启IP路由转发

1.开启IP路由转发

临时打开
echo 1 > /proc/sys/net/ipv4/ip_forward  
或
sysctl -w net.ipv4.ip_forward=1永久打开
vim /etc/sysctl.conf
net.ipv4.ip_forward=1    #将其添加进配置文件sysctl -p                #读取修改后的配置

2.SNAT转换

转换为固定的公网IP地址:
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens33 -j SNAT 
--to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens33 -j SNAT 
--to-source 12.0.0.1-12.0.0.10转换为非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens33 -j MASQUERADE

小知识扩展:
一个IP地址做SNAT转换,一般可以让内网 100到200 台主机实现上网。

3.模拟实验

3.1服务端

服务器位于公网,IP地址为12.0.0.100/24。开启http服务。

vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.50systemctl restart networkyum -y install httpd
#进入http服务的网页目录
cd /var/www/html
#在其中写入一个文件
echo 'hello world!' > test.html
#开启服务
systemctl start httpd

3.2网关服务器

进行SNAT转换,ens33作为私网IP地址,ens35作为公网IP地址。首先,在虚拟机中设置两张网卡

vim /etc/sysconfig/network-scripts/ifcfg-ens35
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.50
NETMASK=255.255.255.0vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.40
NETMASK=255.255.255.0systemctl restart network

3.3网关服务器设置iptables规则

#安装iptables服务
yum -y install iptables*
#删除iptables规则及nat表中规则
iptables -F && iptables -F -t nat
#查看iptables规则
iptables -nLvim /etc/sysctl.conf
net.ipv4.ip_forward=1    sysctl -p   #允许192.168.88.0网段进入网关服务器转发
iptables -t filter -A FORWARD -s 192.168.88.0/24 -j ACCEPT
#指定出站网卡ens35,将192.168.88.0网段IP地址转换为12.0.0.50
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens35 -j SNAT 
--to 12.0.0.50

 3.4客户端

vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.20
NETMASK=255.255.255.0
GATEWAY=192.168.88.40systemctl restart network

 3.5实验结果

在客户端浏览器登录 http://12.0.0.100/test.html

服务端

cd /var/log/httpd
grep 'test.html' access_log

   

三、DNAT概述

DNAT原理:修改数据包的目的地址

1.DNAT策略应用环境——外网访问在局域网中的服务器

 2.DNAT工作原理

工作原理:

  1. 将外网发来的数据包的目的地址由公网IP或端口转换成私网IP或端口;网关服务器将私网IP转发给内网服务器
  2. 将内网服务器发来的应答响应数据包的源地址由私网IP或端口转换成公网IP或端口

 四、配置DNAT策略

DNAT转换前提条件:

  • 局域网的服务器能够访问Internet
  • 网关的外网地址有正确的DNS解析记录
  • Linux网关开启IP路由转发

 1.DNAT转换

发布内网的web服务
把从ens35进来的要访问web服务的数据包目的地址转换为 192.168.88.40
iptables -t nat -A PREROUTING -i ens35 -d 12.0.0.50 -p tcp --dport 80 
-j DNAT --to 192.168.88.40
或
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.50 -p tcp --dport 80 
-j DNAT --to-destination 192.168.88.40发布时修改目标端口
发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 
-j DNAT --to 192.168.80.10:22

注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回

小知识扩展:

  • 主机型防火墙 主要使用 INPUT、OUTPUT 链,设置规则时一般要详细的指定到端口
  • 网络型防火墙 主要使用 FORWARD 链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可
     

2.模拟实验

3.1服务端

vim /etc/sysconfig/network-scripts/ifcfg-ens33 
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.30
NETMASK=255.255.255.0
GATEWAY=192.168.88.40systemctl restart networkyum -y install httpd
#进入http服务的网页目录
cd /var/www/html
#在其中写入一个文件
echo 'hello world!' > test.html
#开启服务
systemctl start httpd

 3.2客户端

vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.200
NETMASK=255.255.255.0
GATEWAY=12.0.0.50systemctl restart network

 3.3网关服务器

vim /etc/sysconfig/network-scripts/ifcfg-ens35
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=12.0.0.2
NETMASK=255.255.255.0vim /etc/sysconfig/network-scripts/ifcfg-ens33
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.88.2
NETMASK=255.255.255.0systemctl restart network

 

 

3.4配置DNAT策略

#外网主机访问发送数据包允许通过
iptables -t nat -A PREROUTING -i ens35 -d 12.0.0.2 -p tcp --dport 8080 
-j DNAT --to 192.168.88.30:80#服务器的回包发送给访问主机
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens35 -j SNAT 
--to 12.0.0.2

3.5实验结果

客户端访问服务器

五、tcpdump抓包

tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 
and src net 192.168.1.0/24 -w ./target.cap-i ens33:只抓经过接口ens33的包
-t:不显示时间戳
-s 0:抓取完整数据包,否则默认抓取长度为68字节
-c 100:只抓取100个包
dst port !22 :不抓取目标端口是22的数据包
src net:数据包的源地址
-w:保存为cap文件,方便wireshark分析

六、防火墙规则的备份和还原

导出(备份)所有表的规则
iptables-save > /opt/ipt.txt导入(还原)规则
iptables-restore < /opt/ipt.txt将iptables规则文件保存在 /etc/sysconfig/iptables 中,iptables服务启动时会自动还原规则
iptables-save > /etc/sysconfig/iptables停止iptables服务会清空掉所有表的规则
systemctl stop iptables						启动iptables服务会自动还原/etc/sysconfig/iptables 中的规则
systemctl start iptables					


http://www.ppmy.cn/news/78689.html

相关文章

springboot使用多线程进行扫描文件以及读取数据库

好的&#xff0c;那我就举一个实际业务中使用Async注解的例子吧。 假设我们有一个需求&#xff0c;需要在用户发表一篇文章时&#xff0c;对这篇文章进行一个异步的处理&#xff0c;比如将文章的内容进行敏感词过滤。而此时我们又不希望用户等待这个过程完成才能得到反馈&…

Weex工具链的奥秘

在2017年1月12日 Weex Conf 2017上&#xff0c;来自阿里的卜道依据Weex开发中的痛点介绍了Weex的打包和插件机制&#xff0c;同样来自阿里的归影介绍了Weex的调试工具Devtools&#xff0c;共同揭秘了Weex的工具链。本文是卜道和归影关于Weex工具链实践的分享整理。 Weexpack与…

IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍

文章目录 前言 一、Idea创建项目的操作 1、选择本地的Scala插件包 2、创建项目的操作 3、输入新建的项目名称 4、在文件file里面选择new一个新的module文件 5、输入项目的名称&#xff0c;点击下一步 6、创建一个Scala文件夹 7、选择Mark directory as 8、单击文件里…

快来试试这几个简单好用的手机技巧吧

技巧一&#xff1a;相机功能 苹果手机的相机功能确实非常出色&#xff0c;除了出色的像素之外&#xff0c;还有许多其他实用功能可以提升拍摄体验。 这些相机功能提供了更多的选择和便利性&#xff0c;使用户能够更好地适应不同的拍摄需求。 自拍功能&#xff1a;通过选择自…

StarRocks 极速全场景 MPP 数据库介绍及使用

一、简介 StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。既支持从各类实时和离线的数据源高效导入数据&#xff0c;也支持直接分析数据湖上各种格式的数据。兼…

【C++】哈希表特性总结及unordered_map和unordered_set的模拟实现

✍作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;C 文章目录 前言一、哈希表的特性 - 哈希函数和哈希冲突1 哈希函数2. 哈希冲突 二、闭散列的实现 -- 开放地址法1. 定义数据结构2.insert()3.Find()4. Erase()5.仿函数处理key值不能取模无法映射 --- BKDRHash 三、开…

分布式锁-Redis

一、为什么要有锁的概念 1.假如现在我们有这么一个场景&#xff1a; 用户在淘宝app上购买商品,用户提交订单的时候提交了,多点击了几次。 不管用户点击几次,只要用户一直停留在一个页面&#xff0c;那么就必须生成一个订单。 1.1 如果我们的服务是单体服务的话 比如现在我们的…

`JOB`的正确打开方式

文章目录 JOB的正确打开方式 简介工作原理使用场景使用方式注意事项启动JOB失败的情况JOB正确打开方式错误方式正确方式进阶方式终极方式 总结 JOB的正确打开方式 最近有一些小伙伴在使用JOB时&#xff0c;由于使用不当&#xff0c;引起一些问题。例如把license占满&#xff0c…