防火墙 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实现访问内网服务器

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

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

相关文章

深入解析鸿蒙系统的页面路由(Router)机制

鸿蒙系统以其独特的分布式架构和跨设备的统一体验而备受瞩目。在这个系统中,页面路由(Router)机制是连接应用各页面的关键组成部分。本文将深入探讨鸿蒙系统的页面路由,揭示其工作原理、特点以及在应用开发中的实际应用。 1. 实现…

java日志框架总结(六、logback日志框架 扩展)

springboot推荐使用logback-spring.xml而不是logback.xml而logback-spring.xml文件与logback.xml文件还是有一定的区别&#xff0c;所以简单讲解一下。 一、logback-spring.xml 配置文件实例&#xff1a; <?xml version"1.0" encoding"UTF-8"?> …

C#,二进制数的按位旋转(Bits Rotate)算法与源代码

1 二进制数的按位旋转 二进制数的按位旋转&#xff08;翻转&#xff09;是编程中常见的按位运算方法。 二进制数的按位旋转分为左转、右转。 左转意味着数据变大&#xff0c;右转意味着数据变小&#xff08;有损&#xff09;。 2 源程序 using System; using System.Text; us…

数据结构之时空复杂度

一、前言 1&#xff09;什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的 集合。 2&#xff09;什么是算法 算法(Algorithm):就是定义良好的计算过程&#xff0c;他取一个或一组的值为输入&am…

物联网实时补丁的未来:网络安全的期望

■ 未打补丁的设备通常存在已知的安全漏洞&#xff0c;可能会被攻击者利用 ■ 物联网实时修补即使在安全更新期间也能保持设备在线和运行&#xff0c;从而减少停机时间 ■ 自动修补解决方案使物联网设备更能抵御网络攻击 物联网 (IoT)正在迅速发展&#xff0c;数十亿联网设备渗…

LiveGBS流媒体平台GB/T28181功能-redis订阅国标设备状态redis订阅通道状态subscribe device操作及示例

支持Redis订阅国标设备状态及国标通道状态上线离线 1、设备状态监听的烦恼2、device订阅2.1、设备上线消息2.2、设备离线消息2.2、通道上线消息2.2、通道离线消息 3、订阅示例3.1、连接REDIS3.2、订阅device示例3.3、设备上线示例3.3.1、注册上线后 3.4、设备离线示例3.4.1、注…

Leetcode-429.N叉树的层序遍历

题目&#xff1a; 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08;参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff…

每日一题——LeetCode1455.检查单词是否为句中其他单词的前缀

方法一 js函数slice() 将字符串按空格符分割为单词数组&#xff0c;记searchWord的长度为n&#xff0c;分割每个单词的前n位看是否和searchWord匹配 var isPrefixOfWord function(sentence, searchWord) {let res sentence.split(" ")for(i 0 ; i < res.lengt…

线程池工作过程

线程池工作流程 线程池的处理流程总结 线程池的处理流程 当提交一个新任务到线程池时&#xff0c;线程池的处理流程如下&#xff1a; 1、线程池判断核心线程池里的线程是否都在执行任务。如果不是&#xff0c;则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执…

fgets的使用方法详解

fgets的使用 文章目录 fgets的使用前言&#xff08;吹水&#xff0c;不看也罢&#xff09;fgets 的基本语法使用示例fgets() 对输入的处理的特点gets() 与 fgets() 的主要区别 总结 前言&#xff08;吹水&#xff0c;不看也罢&#xff09; 鼠鼠今天在B站上大学的时候&#xff…

Vue2:组件间通信框架Vuex

一、原理图及作用 功能介绍&#xff1a; 简单说就是Vue项目中&#xff0c;各个组件间通信的一种框架 相较于之前的全局事件总线&#xff0c;该框架更实用&#xff01; 提高了代码的复用率&#xff0c;把核心业务代码&#xff0c;集中到store中&#xff0c;这样&#xff0c;一处…

掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

原生智能是HarmonyOS NEXT的核心亮点之一&#xff0c;依托HarmonyOS SDK丰富全面的开放能力&#xff0c;开发者只需通过几行代码&#xff0c;即可快速实现AI功能。新浪新闻作为鸿蒙原生应用开发的先行者之一&#xff0c;从有声资讯入手&#xff0c;将基于Speech Kit朗读控件上线…

从kafka如何保证数据一致性看通常数据一致性设计

一、前言 在数据库系统中有个概念叫事务&#xff0c;事务的作用是为了保证数据的一致性&#xff0c;意思是要么数据成功&#xff0c;要么数据失败&#xff0c;不存在数据操作了一半的情况&#xff0c;这就是数据的一致性。在很多系统或者组件中&#xff0c;很多场景都需要保证…

计算机网络——18无连接传输UDP

无连接传输UDP UDP “尽力而为的”服务&#xff0c;报文段可能 丢失送到应用进程的报文段乱序 无连接 UDP发送端和接收端之间没有握手每个UDP报文段都被独立的处理 UDP被用于 流媒体DNSSNMP 在UDP上实现可靠传输 在应用层增加可靠性应用特定的差错格式 UDP&#xff1a;用户…

Positive SSL 证书介绍

Positive SSL 是一种受欢迎的 SSL 证书&#xff0c;提供了卓越的安全性、性价比和品牌信任。以下是对 Positive SSL 在这些方面的简要介绍&#xff1a; 1. 安全性&#xff1a; Positive SSL 证书采用强大的加密技术&#xff0c;确保网站和用户之间的数据传输是安全的。它使用…

turn服务器debug

turn服务器正常能连通的调用堆栈 turn_port.cc AddRequestAuthInfo check 崩溃 有问题的turn msg type是259 request type 是3 用不了的turn 服务器turnmessage type 275

Mybatis源码分析

Mybatis源码分析 第一章、回顾 1. 课程中工具的版本 1. JDK8 2. IDEA2018.3 3. Maven3.5.3 4. MySQL 5.1.48 --> MySQL 5Mybatis 3.4.62. Mybatis开发的简单回顾 1. Mybatis做什么&#xff1f;Mybatis是一个ORM类型框架&#xff0c;解决的数据库访问和操作的问题&#xf…

Github:分享一款开源的跨平台多功能远程控制和监控工具Spark

目录 1、设备列表及操作列表 2、登录机器 Shell 执行命令 3、桌面远程访问 4、远程设备的进程管理 5、远程设备文件管理 今天要给大家推荐一个开源的跨平台多功能远程控制和监控工具&#xff1a;Spark。 目前该项目处于不维护状态&#xff0c;大家可以自己根据需要进行扩…

代码随想录 Leetcode763. 划分字母区间

题目&#xff1a; 代码(首刷看解析 2024年2月18日&#xff09;&#xff1a; class Solution { public:vector<int> partitionLabels(string s) {int hash[27] {0};for (int i 0; i < s.size(); i) {hash[s[i] - a] i;}vector<int> res;int left 0;int righ…

PyTorch使用Tricks:学习率衰减 !!

文章目录 前言 1、指数衰减 2、固定步长衰减 3、多步长衰减 4、余弦退火衰减 5、自适应学习率衰减 6、自定义函数实现学习率调整&#xff1a;不同层不同的学习率 前言 在训练神经网络时&#xff0c;如果学习率过大&#xff0c;优化算法可能会在最优解附近震荡而无法收敛&#x…