天翼云研发告诉我:AH封装的IPsec不能穿越NAT设备

d716ff6040a1678f8814d95ef4dcc92c.gif

正文共:1333 字 14 图,预估阅读时间:2 分钟

最近跟中国电信做VPN的研发交流了一下技术,发现技术爱好者跟研发之间的差距还是很明显的。

问题是我在配置天翼云的IPsec VPN连接时,发现IPsec策略的传输协议只有ESP协议可选,我就跑去问了研发为什么不支持AH。

5ef5790390e8133bef82bfbcce90a234.png

研发的答复是AH不可以穿越NAT设备,并且不具备安全性,为了避免客户配置后业务异常,做了屏蔽处理。

我一想,这不对啊,AH(Authentication Header)可以提供数据来源认证、数据完整性校验和抗重放功能,可以保护报文免受篡改,但不能防止报文被窃听,适合用于传输非机密数据,这一点我是知道的。但AH协议不支持NAT穿越功能,这个我咋没有印象呢?

我还去华三官网搜了一下,确实有一句话,不过也只有一句话,提到了“AH协议不支持NAT穿越功能”

39d19eedf8589f42f6b9032100d0297e.png

好吧,可能一直没用过,导致这个点成了我的知识盲区。

今天来简单验证一下,AH到底能不能穿越NAT,实验拓扑如下:

369c2833813074133aad1f4b5bd4c28e.png

实验环境为HCL V5.10.2版本,设备均使用MSR36-20,版本为Version 7.1.064, Release 0427P22。

配置上,RT2设备的GE0/1接口配置NAT,模拟RT1设备位于NAT设备之后,RT3设备具有公网IP地址的场景。

我们首先配置安全协议使用ESP协议,配置过程参考NAT穿越场景下采用IKE野蛮模式建立保护IPv4报文的IPsec隧道,详细配置如下:

2b2ce5570144d58633f3cc0a4ce70f02.png

RT1

#
interface GigabitEthernet0/0
 ip address 10.12.1.1 255.255.255.0
 ipsec apply policy ahesp
#
interface GigabitEthernet0/1
 ip address 10.11.1.1 255.255.255.0
#
ip route-static 0.0.0.0 0 10.12.1.2
#
acl advanced 3000
 rule 0 permit ip source 10.11.1.0 0.0.0.255 destination 10.33.1.0 0.0.0.255
#
ipsec transform-set ahesp
 esp encryption-algorithm aes-cbc-128
 esp authentication-algorithm sha1
#
ipsec policy ahesp 10 isakmp
 transform-set ahesp
 security acl 3000
 remote-address 23.1.1.3
 ike-profile ahesp
#
ike profile ahesp
 keychain ahesp
 exchange-mode aggressive
 local-identity fqdn rt1
 match remote identity address 23.1.1.3 255.255.255.255
#
ike keychain ahesp
 pre-shared-key address 23.1.1.3 255.255.255.255 key simple ahesp

f8330d82ea11f7b2f005909183e3b0c0.png

RT3

#
interface GigabitEthernet0/0
 ip address 23.1.1.3 255.255.255.0
 ipsec apply policy ahesp
#
interface GigabitEthernet0/1
 ip address 10.33.1.1 255.255.255.0
#
ip route-static 10.11.1.0 24 23.1.1.2
#
ipsec transform-set ahesp
 esp encryption-algorithm aes-cbc-128
 esp authentication-algorithm sha1
#
ipsec policy-template ahesp 1
 transform-set ahesp
 local-address 23.1.1.3
 ike-profile ahesp
#
ipsec policy ahesp 10 isakmp template ahesp
#
ike profile ahesp
 keychain ahesp
 exchange-mode aggressive
 match remote identity fqdn rt1
#
ike keychain ahesp
 pre-shared-key address 23.1.1.2 255.255.255.255 key simple ahesp

然后在PCA访问PCB触发建立IPsec VPN。

2aecbff93f0ba697b7da76eeb8cde44b.png

查看IKE SA和IPsec SA信息。

b45200c3ddc63862fb6c45b8f697d820.png

可以看到,IPsec安全提议中的安全协议为ESP-ENCRYPT-AES-CBC-128(ESP加密算法使用AES-CBC-128)和ESP-AUTH-SHA1(ESP认证算法使用SHA1),协商建立VPN隧道成功,通信正常。

抓包看一下。

de7e6ce7580ea0189cd1ed73cd3d6462.png

可以看到,一阶段IKE协商使用野蛮模式的交互报文还是和主模式相同的,紧接着有一个NAT-keepalive报文,然后进入快速模式。之后的8个报文,就是封装之后的PCA探测PCB的报文了,报文是ESP封装过的,什么都看不到。

接下来,我们清空两端的SA信息,并将IPsec安全提议中的安全协议修改为AH。

ipsec transform-set ahesp
 protocol ah
 ah authentication-algorithm sha1

再去触发IPsec协商,发现业务报文就不通了。

dcb2793515cfed93facd81299007c7ec.png

查看两端设备的SA状态,发现还是正常协商起了IKE SA和IPsec SA,IPsec安全提议中的安全协议为AH-SHA1(AH认证算法使用SHA1),协商建立VPN隧道成功,只是无法正常通信。

b436b61a43f17b0d42da2233889070f2.png

抓包查看协商过程。

e7e9b13ffbfa34781e79a1b984e3701c.png

发现前面的协商报文还是一样的,只不过后面的业务报文就不通了。查看ESP报文,显示序列号错误。

然后在设备上debug看一下。

0a181c7e4bcc5a68cb7033099ed6ef47.png

RT3接收到了RT1的报文,只不过SPI不匹配,然后被丢弃了。保温携带的SPI是67371008,而设备接受的SPI是2482589925。

再看发送端RT1这边。

587807d136da9b34046a4830d07c8c72.png

发送端的状态都是正常的,调用的正确的SPI(2482589925),然后使用AH封装发送出去,结果经过NAT设备之后,一切都变了。

回顾一下正常的主模式下AH封装的IPsec业务报文通过WireShark对比IPsec VPN不同配置方式和算法下的报文封装差异

756a5dabe99ce550694074d276153fdd.png

可以看到正确的协议信息,因为没有加密,还可以看到内层的业务报文;当然,SPI也是正常的。

回顾一下,按照AH的RFC协议规定AH:RFC2402-IP Authentication HeaderSPI(Security Parameters Index,安全参数索引)是一个任意的 32 位值,结合目标IP地址和安全协议,唯一标识此数据报的安全联盟。一般来讲,SPI仅具有本地意义,由SA创建者(通常是携带SPI的数据包的接收者)定义;因此,SPI 通常被视为一个不透明的位串。

而AH对数据进行完整性检查时,会对包括源IP地址和目的IP地址在内的整个IP报文进行Hash运算。当NAT设备对IP报文进行源地址或目的地址的转换时,会改变IP地址,从而破坏AH的Hash值,导致在目的地接收到数据包后,由于AH验证失败而被丢弃。因此,AH协议不支持NAT穿越。

一般来讲,在实际部署中,如果要使用AH协议,通常会结合ESP协议使用,即AH-ESP,先使用ESP封装,再使用AH封装。

7dfd989842901b8790d2b59987b4f6d4.png

此时就可实现在经过NAT设备转换后,仍然能够保持数据的完整性验证和加密有效。

AH-ESP封装的报文如下通过WireShark对比IPsec VPN不同配置方式和算法下的报文封装差异

0519a2064cc9204b36a373d388bb9837.png

可以看到,报文封装结构是先封装的ESP,再封装的AH认证头。

d1532ff0eb3ed636769a052f50f53157.gif

长按二维码
关注我们吧

52f34f6be9f8c3ab406f6fdbc0642adc.jpeg

8dfc30d8d20aa716f4ece784d06c8537.png

通过WireShark对比IPsec VPN不同配置方式和算法下的报文封装差异

IPsec封装引入了额外的报文开销,具体是多少?

配置Juniper虚墙vSRX基于策略的IPsec VPN(WEB方式)

配置Juniper虚墙vSRX基于策略的IPsec VPN(CLI方式)

L2TP over IPsec复杂吗?有点!所以建议你看看这篇文章

一种基于IPsec的VXLAN“专线”解决方案

使用vSRX测试一下IPsec VPN各加密算法的性能差异

SD-WAN网络中的IPsec流量是怎么转发的?我给你简单演示一下

想知道Android手机怎么远程登录到系统后台吗?看这里

成了!Tesla M4+Windows 10+Anaconda+CUDA 11.8+cuDNN+Python 3.11

CentOS 7.9安装Tesla M4驱动、CUDA和cuDNN

人工智能如何发展到AIGC?解密一份我四年前写的机器学习分享材料

一起学习几个简单的Python算法实现

GPU性能测试中的张量和矩阵运算

清华大模型ChatGLM3部署初体验

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv9改进策略:ECVBlock即插即用的多尺度融合模块,助力小目标涨点 | 顶刊TIP 2023 CFPNet

💡💡💡本文改进内容:ECVBlock即插即用的多尺度融合模块,助力检测任务有效涨点! yolov9-c-EVCBlock summary: 1011 layers, 68102630 parameters, 68102598 gradients, 252.4 GFLOPs 改进结构图如下&#x…

Centos7没有可用软件包 ifconfig问题解决

问题描述 在Centos7中查看ip没有ifconfig,使用yum安装ifconfig报错没有可用软件包 ifconfig问题解决 [rootlocalhost etc]# yum -y install ifconfig 已加载插件:fastestmirror base …

外贸网站常用的wordpress模板

零件配件WordPress外贸建站模板 汽车行业零配件WordPress外贸建站模板,卖配件、零件的外贸公司可以使用的WordPress主题。 https://www.jianzhanpress.com/?p4912 WordPress外贸独立站主题 简洁实用的WordPress外贸独立站主题,适合时尚服装行业搭建w…

酷开系统用电视为居家生活打开精彩窗口|酷开科技|酷开会员|

随着互联网的发展,电视也承载了更多的功能。相比于传统的电视,如今的智能电视屏幕更大、分辨率更高、色彩更加鲜艳,能够呈现出更加逼真的画面效果。当观众观看大屏电视时,仿佛置身于电影大幕的场景之中,感受到更为震撼…

SpringCloud Alibaba Nacos 服务注册和配置中心

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第十二篇,即介绍 SpringCloud Alibaba Nacos 服务注册和配置中心。 二、Nacos 简介 2.1 为…

C++初阶:vector相关练习

目录 1. 只出现一次的数2. 杨辉三角3. 删除有序数组中的重复项4. 只出现一次的数II5. 只出现一次的数III6. 数组中出现次数超过一半的数7. 电话号码的字母组合(多叉树遍历) 1. 只出现一次的数 题目信息: 题目链接: 只出现一次的数…

【python】flask服务端响应与重定向处理

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Leetcode 3.15

Leetcode hot100 二叉树1.二叉搜索树中第K小的元素2.二叉树展开为链表3.从前序与中序遍历序列构造二叉树 二叉树 1.二叉搜索树中第K小的元素 二叉搜索树中第K小的元素 最重要的知识点:二叉树搜索树的中序遍历是升序的。 方法一:我们只需存储升序遍历&…

【蓝桥杯备赛】Day15:递推与递归(倒计时23天)

题目1:题目 2335: 信息学奥赛一本通T1422-活动安排 设有n个活动的集合E{1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi…

管易云·奇门对接打通金蝶云星空发货单查询接口与销售出库新增接口

管易云奇门对接打通金蝶云星空发货单查询接口与销售出库新增接口 ​​ ​​ 对接源平台:管易云奇门 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌,总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-W…

HarmonyOS卡片刷新服务,信息实时更新一目了然

如今衣食住行娱乐影音等App占据了大多数人的手机,一部手机可以满足日常大多需求,但对需要经常查看或进行简单操作的场景来说,总需要用户点开App操作未免过于繁琐。 针对该问题, HarmonyOS SDK为用户提供了Form Kit(卡…

为啥很多人觉得编程难学?

看到推特上网友菜脯写的一条推文: 菜脯:我大概知道,为啥很多人觉得编程难学了。 因为对我来说,编程过程就是 看资料——开始写——遇到问题——查资料——解决问题——继续写——继续遇问题——继续查资料… 这个循环似乎会一直持…

Retrieval Augmented Thoughts(RAT):检索增强思维,实现长视野生成中的上下文感知推理

论文地址:https://arxiv.org/pdf/2403.05313.pdf 原文地址:rat-retrieval-augmented-thoughts Github:Implementation of RAT 2024 年 3 月 14 日 介绍 让我首先从一些一般性观察开始...... 在生成式人工智能应用程序中实现效率与生成响应…

vulhub中Apache Shiro 认证绕过漏洞复现(CVE-2010-3863)

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 在Apache Shiro 1.1.0以前的版本中,shiro 进行权限验证前未对url 做标准化处理,攻击者可以构造/、//、…

YOLOV9训练自己的数据集

1.代码下载地址GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 2.准备自己的数据集 这里数据集我以SAR数据集为例 具体的下载链接如下所示: 链接:https:/…

广州市高质量发展大会,东纺企服系统提出数智化新思路

近日,广州市海珠区凤阳街道高质量发展大会暨企业联盟沙龙荟在海珠区珠江国际纺织城D区6楼时尚馆召开。东纺科技作为海珠区企业代表,受邀出席参与活动。 本次大会对今年的高质量发展进行亮诺和展望。海珠区委常委、区纪委书记、区监委主任杨清谦以及海珠区…

【环境搭建和安装】thingsboard二次开发环境搭建

文章目录 1.安装JAVA2.安装maven环境3.安装nodeJS4.安装git环境5.安装npm依赖关系 提示: 1.我自己下载存放路径比较混乱,下载的文件尽量在一个新建的文件夹存放,目录全英更好。 2.环境是为了开源物联网平台,环境搭建和安装部署是成…

ETH网络 之 Gas花费实例

求关注,关注我,一起进入Web3的世界 前文回顾 GasBaseFee & PriorityFee部署ERC-721 交易Gas解析 部署NFT的交易 钱包Gas解读 费用清单 ItemValueDesc基础费用(BaseFee)0.102349622 Gwei基础费用是动态的,我们发送交易时是不确定的&…

想进阿里?先了解这个!@SpringMybatis注解面试解析

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”! 嗨,大家好!我是小米,今天要和大家聊一聊阿里巴巴面试题中的一个热门话题:@SpringMybatis注解。如果你是一个对技术充满好奇心的小伙伴,那么这篇文章一定会给你带来不少启发和收获! 在开始…

1、编写jsp文件,熟悉jsp页面的基本结构H编写看电影2、编写jsp文件,熟悉jsp动作标记、param传值的使用,计算机三角形的面积。

1、看电影 watchMovie.jsp: <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert ti…