说在前面:
1. 对于使用公有云的企业,往往可以很方便的将云上数据下沉到冷数据,比如什么超级深度无敌冷归档,但对于不能使用公有云保存数据的厂或者小公司,Veeam是一个很不错的选择。
2. Veeam是一款综合性的数据保护和备份解决方案,适用于虚拟、物理和云环境。它以其快速、可靠和成本效益高的备份和恢复解决方案而闻名,特别适合于维护业务连续性和数据安全。说白了就是一个备份软件
3. 这个产品是老外开发的,原生支持对接AWS, AZURE, GOOGLE CLOUD,不过这些供应商在国内用的比较少 ,据我浅显的认识国内多用这个来做VSphere的备份。
4. 因为安全和其他原因(曝出过多种攻击手段,诸如BEAST、POODLE、ROBOT、SWEET 32、LUCKY 13等),IETF(nternet Engineering Task Force)已经在2018年6月宣布要弃用TLS1.0, TLS1.1,但是很明显,这种非强制性的建议,不会很快推广来,目前公网内网仍然有大量使用此协议的服务。
一、问题描述
Veeam 9.0 版本默认使用TLS1.0进行通讯,VSphere(Vcenter)6.0 Update 3 以下版本同样也是使用TLS1.0 。
在这种基础下,需要同步升级版本,如果只升级一侧,就会导致TLS版本不兼容,导致握手失败。这个时候使用老版本的veeam9.0访问新版本的VSphere(VCenter)就会立即抛出这个错误:
C# 典型报错,Veeam 显示The underlying connection was cloesd: Anunexpected error occurred on a send. Authentication failed because the remote party has closed the transport stream.
另外多说一嘴,根据经验,一般立即抛出这种连接性报错,一般都可以优先想到是防火墙或者安全类故障,而不是偏向网络侧问题。
二、尝试排障
虽然直接给出了故障原因,但说实话,第一次看到这个故障我并没有抓包,而是直接猜到是协议问题,因为这个报错是一个C#的典型报错,我接触过的基本都是由于TLS协议问题导致。
在Veeam侧机器进行抓包,可以看到TLS光有客户端hallo,没有握手成功。Veeam9.0默认TLS1.0,升级到9.5即可或者更高版本,不过Veeam不允许直接跨越多个版本升级,比如要升级到10.0版本,需要先升级到9.5才可以。
升级版本后再看一眼,这种情况是握手完成了,故障解决。当然,同样存在操作系统不支持TLS1.2的情况,注意识别。
三、问题复盘
1. 该报错是C#直接抛出的,如果veeam是部署在win上的,那么winserver的生产软件很多使用C#写的,爆出这个错误,基本都长这个样子。但是鉴于国内基本没有用winserver做主流生产环境的,不建议主力语言学C#
2. 此故障由于TLS版本不一导致,VSphere6.0 up3和6.5以下版本默认TLS1.0,官网和本人都建议直接升级软件解决(除此之外还要确认操作系统支不支持TLS1.2)。当然,之前调研也发现有跨协议代理软件,可以做TLS1.0 —— TLS1.2的跨协议代理,但是具体效果如何,没有尝试,这里留存关键词:Fiddle,squid,mitmproxy
3. 升级软件前应该尽可能评估是否有此类问题出现