NAT场景案例分析

news2024/11/17 3:31:24

目录

问题现象一 NAT Server故障排错思路

问题现象二 NAT Server问题

问题现象三 NAT Server问题

问题现象四 LAN-LAN映射


问题现象一 NAT Server故障排错思路

NAT Server故障排查思路(出现配置端口映射后外网设备无法访问本地内网中的服务器的故障)

1、检查服务器内网用户是否能够直接访问该服务(测试服务器是否正常提供服务,以及服务器内网IP地址正确)

2、检查服务器到网络出口设备是否能够正常通信(ping、telnet、wget)

3、检测外网发出来的流量是否能够到达客户端出口设备(通过在出口设备的外网口抓包测试—如果没有收到外网来的流量,可能是服务器没有在运营商备案—即将80端口给拦截了;此种情况可以将AF上的端口映射换为其它端口再尝试一下;如果该端口过来了,那就是运营商将该地址的80端口封锁掉了,需要去找运营商)

4、检测外网的数据包到达出口设备后有无匹配出口设备的映射规则,(在出口设备的WAN 和 LAN口分别抓包,如果LAN口没有报文,则说明可能端口映射配置错误),(也可能安全策略给过滤了,可以开启出口设备上的拦截日志—开启出口设备上的拦截日志后,会直接开启数据直通,即数据即使被过滤策略匹配了,还是可以通过出口设备,此时可以通过策略将其放通)

5、由于AF去访问服务器可以通;外部访问到达AF也完成了转换,但是无法到达服务器(两者不同的地方就是数据包的源IP不一样);此时可以查看中间设备是否将该数据包拦截-即该报文匹配上了过滤策略(在中间的安全设备上开启拦截日志—直通开启,再次进行测试);最后发现被AC设备上的防火墙规则丢包

6、也有可能服务器本身上的防火墙规则拦截掉了(如果客户不想要外部的IP地址访问该服务器,可以在出口设备上将源IP为外部IP地址 转为 私网IP地址---即进行双向NAT转换)


问题现象二 NAT Server问题

在出口做了一条Nat Server,把外网的80端口映射给内网的Web服务器 80端口,配置完成后网站无法访问(但是当出口设备开启抓包之后,网站就可以从外网访问了)

首先要了解抓包工具的原理

抓包是利用了网口的混杂模式(开启了抓包就是开启了网口的混杂模式)

默认情况下网卡只把发给本机的包(包括广播包)传递给上层程序,其它的包一律丢掉

混杂模式指的是设备接收所有经过网卡的数据包(包括不是发给本机的包—即便数据包的MAC地址不是自己也会去处理);简单来讲混杂模式就是指网卡能接收所有通过它的数据流

因此排查出故障的原因可能如下

可能对端外网发过来的请求包的目的MAC不是出口设备的WAN口的MAC

造成现象的原因:有可能是前端运营商设备在80端口的数据上面做了MAC绑定(有可能现在的出口设备替换了之前的网络出口设备,但是运营商MAC绑定的是之前的网络出口设备,没有更改)

解决方法

1、去运营商更新MAC地址绑定表

2、出口设备后台打开WAN口的混杂模式(有风险)


问题现象三 NAT Server问题

在出口设备做NAT Server,将WAN口的8090端口映射给WEB服务器的80端口;但是现在网站无法访问(客户怀疑是端口映射不成功)

进行抓包测试(通过外网测试PC访问网站,在外网PC和用户出口设备上进行抓包)

PC抓包得到的结果

PC与服务端建立了TCP三次握手,说明端口映射是成功的

PC发送GET请求得不到响应(可能是服务器拒绝响应或者服务存在问题、也有可能是该报文被AF拦截、或公网拦截)

PC收到了AF发来的RST报文

用户出口设备上抓包得到的结果

内网服务器与PC建立TCP三次握手

内网服务器收到GET请求,并回应的HTTP响应,但是从抓PC的 包来看PC没有收到(有可能是公网设备将此数据包拦截)

此时客户端网络出口设备上又收到了PC发来的RST报文(但是PC端没有抓到PC发起来的RST报文,说明该报文不是PC产生的,可能是有人伪造的该数据包---通过TTL发现该RST报文发来的TTL与其它报文相差太大也可以确定该数据包不是PC发到的)

判断结果

因此可以判断是公网上存在的问题(可能是公网上的设备做了内容过滤,服务器发送的HTTP响应报文可能匹配到了设备上的安全策略,然后伪造报文向服务器发送RST)

如果还不确定问题,还可以在出口设备的WAN口直接连接一台设备来访问web服务器,发现是否能够访问内网服务器,如果访问成功,则就确定了是运营商公网问题


问题现象四 LAN-LAN映射

客户需要内网用户通过公网IP访问内网的服务器(这样可以保证内网和外网的访问方向一致、并对内隐藏内网服务器的IP地址)

需要实现当PC输入服务器域名或服务器的公网IP地址(202.X.X.X)时能够访问HTTP服务器

如果出口设备上只配置目的地址转化(来回数据包不一致)

1、PC发出的数据包

SIP: 172.172.10.10:8888              DIP:202.X.X.X:80

2、在AF上配置目的IP地址转换,映射到HTTP Server(将202.X.X.X:80转为172.172.10.100:80);当数据包到达AF后,进行目的地址转换

SIP: 172.172.10.10:8888              DIP: 172.172.10.100:80

3、HTTP Server收到后回复(此时就直接发送到PC,造成来回数据包不一致,PC不会处理)

       SIP: 172.172.10.100:80                DIP: 172.172.10.10:8888

如果出口设备上将源、目地址同时转换(先匹配目的地址映射,再匹配源地址映射),可以实现客户要求

1、PC发出的数据包

SIP: 172.172.10.10:8888              DIP:202.X.X.X:80

2、在AF上配置目的IP地址转换,映射到HTTP Server(将202.X.X.X:80转为172.172.10.100:80);在AF上配置源IP地址转换(将172.172.10.10:8888映射为172.172.10.1:8888);当数据包到达AF后,进行源、目的地址转换

SIP: 172.172.10.1:8888         DIP: 172.172.10.100:80

3、HTTP Server收到后回复(此时就直接发送到PC,造成来回数据包不一致,PC不会处理)

       SIP: 172.172.10.100:80                DIP: 172.172.10.1:8888

4、AF收到后根据源目地址转换的映射表,将数据包还原

SIP:202.X.X.X:80                  DIP: 172.172.10.10:8888

5、此时PC收到报文后,来回数据包一致

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

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

相关文章

【JavaEE】锁的策略

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

VG3225EFN压控晶体振荡器(VCXO)

5G脞2020年开始,商业服务正在全球范围内快速部署。5G通信网络需要保持高速率和可靠性,这2两者都需要低噪声,使用高频基模晶体振荡器(高达50MHz),该晶体振荡器可以提供低相位噪声参考时钟,从而降…

EPICS asynPortDriver使用示例

在文本中,将展示如何将EPICS asyn模块和其他库联用,从而实现对arm单板机上GPIO口的控制。 在本例中使用到的硬件是: 在程序中需要厂家提供的wringPi库,才能通过C语言库函数调用实现对其GPIO的控制。 以下是这个单板机GPIO的管脚…

Linux Shell——(脚本参数传递)

脚本参数传递 一、参数传值二、脚本文件中特殊的变量 总结 最近学习了shell脚本,记录一下shell脚本参数传递相关语法 一、参数传值 执行脚本的时候,可以向脚本传递参数,脚本内获取参数的格式为$n n位置从1开始,$0 是脚本的文件名…

1.6 实战:Postman请求Get接口-获取用于登录的图形验证码

上一小节我们学习了Postman的布局,对Postman有了一个整体的认知,本小节我们就来实操一下Get接口。 我们打开Postman,点击我们之前创建的请求”获取登录页验证码“。我们在地址栏里填入获取登录页验证码的接口地址。怎么查看这个接口地址呢?我们打开校园二手交易系统,打开…

生成式AI的力量,释放RPA的无限潜能

回首即将过去的2023年,互联网行业似乎始终处在各种新概念的热潮激荡之中。其中,最引人注目的话题无疑是AI科技。自人工智能技术实现大规模突破以来,我们见证了一系列生成式AI的涌现。从ChatGPT到百度文心一言,它们纷纷登场&#x…

Python - 网络传输数据格式【字节流】传输优点及数据格式【字符,字典,字节,二进制,十六进制】的转换

一. 前言 在网络传输数据时,数据本质上是以二进制形式进行传输的。无论是传输字节还是传输二进制数据,最终都会转化为二进制进行传输。 所以,从传输速度的角度来看,无论是传输字节还是传输二进制数据,实际上是相同的…

OpenHarmony关于修改系统横屏导致启动视频显示不全问题解决

前言 OpenHarmony源码版本:4.0release 开发板:DAYU / rk3568 前段时间写的设置OpenHarmony启动视频,在竖屏状态下是正常的,但是横屏状态下显示不全。 链接直达:OpenHarmony 设备启动Logo和启动视频替换指南-CSDN博…

.net 洋葱模型

洋葱架构 内层部分比外层更抽象(内层接口,外层实现)。外层的代码只能调用内层的代码,内层的代码可以通过依赖注入的形式来间接调用外层的代码 简单的例子,引用依赖图 demo 接口类库 EmailInfo using System; using System.Collections.…

基于ssm一中体育馆管理系统的设计与实现论文

镇赉县一中体育馆管理系统的设计与实现 摘要 随着信息互联网购物的飞速发展,一般有能力的机构管理系统。本文介绍了镇赉县一中体育馆管理系统的开发全过程。通过分析企业对于镇赉县一中体育馆管理系统的需求,创建了一个计算机管理镇赉县一中体育馆管理…

瞳孔检测眼动追踪python实现(基于dlib)

效果展示: 原图:(图片来自 b站up 借我300去洗牙) dlib实现的特征点检测 瞳孔检测结果 完整代码: # encoding:utf-8import dlib import numpy as np import cv2def rect_to_bb(rect): # 获得人脸矩形的坐标信息x …

鸿蒙实操【ArkTS语言的运用】

ArkTS基础知识 使用声明式语法和组件化基础知识,搭建一个可刷新的排行榜页面。在排行榜页面中,使用循环渲染控制语法来实现列表数据渲染,使用Builder创建排行列表布局内容,使用装饰器State、Prop、Link来管理组件状态。最后我们点…

Linux Conda 安装 Jupyter

在Linux服务器Conda环境上安装Jupyter过程中遇到了无数的报错,特此记录。 目录 步骤一:安装Anaconda3 步骤二:配置Conda源 步骤三:安装Jupyter 安装报错:simplejson.errors.JSONDecodeError 安装报错:…

循环神经网络-1

目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络&…

VC++项目的32位、64位的配置和链接问题

新建一个项目,默认是x86配置; 添加包含目录、库目录,之后可以编译通过; 但是链接会出错,因为链接的dll是64位; 把项目配置改为x64; 需要把包含目录和库目录针对x64重新添加,否则会…

获取CAD图元名及图元信息(circle为例,用于选择集,对应dxf组码)

在CAD编程中往往需要用选择集,我们往往不知道相应图元对应的名称具体名字。比如我想选择所有的圆,ftype0,fdata应该是什么呢?是circle,acdbcircle,还是acadcircle? circle是一个对象,circle的vba类名为Ac…

【CSS】用 CSS 写一个渐变色边框的输入框

Using_CSS_gradients MDN 多渐变色输入框&#xff0c;群友问了下&#xff0c;就试着写了下&#xff0c;看了看 css 渐变色 MDN 文档&#xff0c;其实很简单&#xff0c;代码记录下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta ch…

【unity小技巧】两种办法解决FPS游戏枪或者人物穿墙穿模问题

文章目录 前言第一种解决思路第二种方法总结感谢完结 前言 当我们开发FPS游戏时&#xff08;其实3d游戏基本都会遇到这样的问题&#xff09;&#xff0c;如果我们不做处理&#xff0c;肯定会出现人物或者枪的穿墙穿模问题&#xff0c;这是是一个常见的挑战。 这种问题会破坏…

Flink窗口的概念和分类

窗口的概念 Flink是一种流式计算引擎&#xff0c;主要是来处理无界数据流的&#xff0c;数据源源不断、无穷无尽。想要更加方便高效地处理无界流&#xff0c;一种方式就是将无限数据切割成有限的“数据块”进行处理&#xff0c;这就是所谓的“窗口”&#xff08;Window&#x…

指针相关知识(进阶)

前面的入门中已经介绍了指针的基础知识&#xff0c;接下来&#xff0c;让我们继续学习吧&#xff01; 一. 字符指针变量 char* 一般形式 int main() {char n w;char* pa &n;*pa w;return 0; } 这并不是把字符串hello world放在n中&#xff0c;而是把第一个字符的地址…