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

防火墙 (iptables)------------------------SNAT与DNAT

一、SNAT

①SNAT 应用环境:

局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)

②SNAT原理:

源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射

数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP

当响应的数据包从公网发送到内网时,会把数据包的目的IP由公网IP转换为私网IP

③SNAT转换前提条件

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

linxu系统本身是没有转发功能 只有路由发送数据

④实验

实验目的:

公司内有2台机器,但是只有一个公网ip,利用SNAT技术实现2台私网地址都可以访问公网。

实验拓朴图:

内网主机通过网关服务器的SNAT转换实现访问外网

外网主机访问网关服务器地址,通过DNAT实现访问内网服务器

SNAT实验环境准备

三台服务器:PC1(centos7-1)客户端、PC2网关服务器(centos7-2)、PC3服务端(centos7-3)

硬件要求:PC1和PC3均只需一块网卡、PC2需要2块网卡

实验步骤:

首先关闭三台机器的防火墙和防护
[root@centos1 ~]#systemctl stop firewalld
[root@centos1 ~]#setenforce 0[root@centos2 ~]#systemctl stop firewalld
[root@centos2 ~]#setenforce 0[root@centos3 ~]#systemctl stop firewalld
[root@centos3 ~]#setenforce 0
①网关服务器:
第一步:先设置网关服务器的ip地址,两张网卡,ens33设置为内网,ens37设置为外网
先添加网卡

[root@centos2 ~]#cd /etc/sysconfig/network-scripts/
[root@centos2 network-scripts]#ls
ifcfg-ens33  ifdown-ipv6    ifdown-TeamPort  ifup-ippp   ifup-routes       network-functions
ifcfg-lo     ifdown-isdn    ifdown-tunnel    ifup-ipv6   ifup-sit          network-functions-ipv6
ifdown       ifdown-post    ifup             ifup-isdn   ifup-Team
ifdown-bnep  ifdown-ppp     ifup-aliases     ifup-plip   ifup-TeamPort
ifdown-eth   ifdown-routes  ifup-bnep        ifup-plusb  ifup-tunnel
ifdown-ib    ifdown-sit     ifup-eth         ifup-post   ifup-wireless
ifdown-ippp  ifdown-Team    ifup-ib          ifup-ppp    init.ipv6-global
[root@centos2 network-scripts]#cp ifcfg-ens33 ifcfg-ens37
[root@centos2 network-scripts]#vim ifcfg-ens37
[root@centos2 network-scripts]#vim ifcfg-ens37
[root@centos2 network-scripts]#systemctl restart network
[root@centos2 network-scripts]#ip a

第二步:开启路由转发功能

[root@centos2 network-scripts]#sysctl -a|grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_use_pmtu = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens37.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
[root@centos2 network-scripts]#vim /etc/sysctl.conf
[root@centos2 network-scripts]#sysctl -p
net.ipv4.ip_forward = 1
[root@centos2 network-scripts]#sysctl -a|grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.ens37.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0.stable_secret"
sysctl: reading key "net.ipv6.conf.virbr0-nic.stable_secret"
②内网客户端(192.168.246.7)
[root@centos1 ~]#rpm -q httpd
未安装软件包 httpd 
[root@centos1 ~]#yum install httpd -y
第一步:修改内网服务器的网关ip地址,为网关服务器的ip地址
[root@centos1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centos1 ~]#systemctl restart network
第二步:开启本机httpd服务,并写上一个测试网页index.html内容为haha
[root@centos1 ~]#systemctl start httpd
[root@centos1 ~]#echo "haha" > /var/www/html/index.html
[root@centos1 ~]#

③外网服务器:
[root@centos1 ~]#rpm -q httpd
未安装软件包 httpd 
[root@centos1 ~]#yum install httpd -y
第一步:先修改外网服务器的ip地址和网关,都应该是12段的,ip地址是12.0.0.100,网关地址是12.0.0.1
[root@centos3 ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@centos3 ~]#systemctl restart network

会断,由于是不同网段

第二步:开启httpd服务
[root@centos3 ~]#systemctl start httpd
[root@centos3 ~]#echo "nihao" > /var/www/html/index.html
[root@centos3 ~]#tail -f /var/log/httpd/access_log 

检测PC1(centos1)、PC2(centos2)、PC3(centos3)三台机器之间是否互通(使用虚拟机做实验默认是互通的,是由于处在同一环境中,生产环境内网和外网没有SNAT的情况下是不通的)

进入xhell:

再进入虚拟机:

在PC1上curl 服务端ip,然后在服务端实时查看/var/log/httpd/access_log日志。可查看到源ip为PC1的ip,所以是未经过NAT的,生产环境中不可能直接curl通。

④再次进入网关服务器:
前两步骤参照上文
第三步:设置iptables的转换规则
[root@centos2 ~]#iptables -t nat  -A POSTROUTING -s 192.168.246.0/24 -o ens37 -j SNAT --to 12.0.0.1##表示当内网192.168.246.0网段的主机访问外网的时候,网关服务器会通过SNAT转换源ip地址为网关服务器的公网ip12.0.0.1
方法一:已知公网地址

验证:

在xhell中用内网客户机(192.168.246.7)去访问外网ip地址

再去虚拟机外网服务器查看:centos3

总结

内网主机通过网关服务器的SNAT转换实现访问外网 

不经过nat的地址为PC1(centos1)自己的地址,使用虚拟机环境才会出现这种情况,市场环境是不通的。

经过nat之后的地址是公司的公网ip地址,由网关服务器iptables规则SNAT实现

方法二:未知公网地址

验证:

二、DNAT

①DNAT应用环境:

在Internet中发布位于局域网内的服务器

②DNAT原理:

目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。

③DNAT转换前提条件:

DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录                                                                                           3. Linux网关开启IP路由转发

④实验:

实验拓朴图:

外网访问内网访问12.0.0.1 相当与访问192.168.246.7

实验步骤:

前边步骤参照SNAT前3步
④再次进入网关服务器:

设置iptables的转换规则

[root@centos2 ~]#iptables -t nat -A PREROUTING -i ens37 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.246.7
[root@centos2 ~]#iptables -t nat  -vnL

进入外网服务器进行直接访问,会被拒绝 , 接下来需要设置防火墙规则(如上图)

进入内网服务器查看验证;

总结

内网主机通过网关服务器的SNAT转换实现访问外网

外网主机访问网关服务器地址,通过DNAT实现访问内网服务器

相关文章:

  • ADC--模拟量转换成数字量
  • Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)
  • Mongodb 文本检索
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】
  • 【C语言】指针练习篇(下),深入理解指针---指针练习题【图文讲解,详细解答】
  • Python循环语句——for循环的嵌套使用
  • Java学习第十六节之创建对象内存分析和小结类与对象
  • Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL
  • Godot 游戏引擎个人评价和2024年规划(无代码)
  • QtApplets-线程池
  • MinGW/MSYS/GCC/GNU/MSVC/Clang/LLVM都是什么
  • 防火墙HA详解
  • 问题:内存时序参数 CASLatency 是() #学习方法#微信#微信
  • 防御保护--内容安全过滤
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 10个最佳ES6特性 ES7与ES8的特性
  • C++类中的特殊成员函数
  • Docker入门(二) - Dockerfile
  • ES6 学习笔记(一)let,const和解构赋值
  • happypack两次报错的问题
  • java2019面试题北京
  • Just for fun——迅速写完快速排序
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PAT A1120
  • Redash本地开发环境搭建
  • 记录一下第一次使用npm
  • 前端性能优化——回流与重绘
  • 三分钟教你同步 Visual Studio Code 设置
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 手写一个CommonJS打包工具(一)
  • 一个完整Java Web项目背后的密码
  • - 转 Ext2.0 form使用实例
  • Spring第一个helloWorld
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​什么是bug?bug的源头在哪里?
  • # 安徽锐锋科技IDMS系统简介
  • (13):Silverlight 2 数据与通信之WebRequest
  • (30)数组元素和与数字和的绝对差
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C++17) std算法之执行策略 execution
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (九)One-Wire总线-DS18B20
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十五)使用Nexus创建Maven私服