NAT网关异地灾备思路

2023-09-29 20:06:14 浏览数 (1)

问题背景

近期某客户需要考虑NAT网关跨地域的灾备方案,用于在上海地域运营商网络中断等场景,可以借助腾讯云内网,将对外访问的流量调度到异地出口。

业务上的诉求是:

1、 有https流量

2、 运维自主切换,业务无感

通过调研,发现使用Nginx搭建四层正向代理,可以满足此诉求。

代理服务器概述

代理服务器分类

代理服务器是计算机网络中的中间服务器,它充当客户端和目标服务器之间的中继,执行请求和响应的传递。按功能可以分为:

正向代理服务器(Forward Proxy): 正向代理服务器代表客户端向目标服务器请求资源。通常,客户端需要配置使用正向代理服务器,以让代理服务器代表它访问互联网资源。这种代理服务器常见于企业网络环境中,用于访问外部资源或绕过访问限制。

反向代理服务器(Reverse Proxy): 反向代理服务器代表目标服务器响应客户端的请求。它通常用于负载均衡、安全性、SSL终结、缓存等用途,隐藏了真实的服务器架构,提高了网络安全性和性能。

结论

由于是内部业务访问外部服务,此处选择正向代理。

HTTP/HTTPS正向代理选型

按照客户端是否感知分类

透明代理,客户端无需做特殊设置,如企业网络链路中的Web Gateway设备。

普通代理,客户端(在浏览器中或者系统环境变量)需指定代理服务器地址。

按照是否解析HTTPS分类

隧道代理,直接透传请求。

中间人代理,代理服务器解密HTTPS流量,对客户端利用自签名证书完成TLS/SSL握手,对目的服务器端完成正常TLS交互。在客户端-代理-服务器的链路中建立两段TLS/SSL会话。

注:这种情况客户端在TLS握手阶段实际上是拿到的代理服务器自己的自签名证书,证书链的验证默认不成功,需要在客户端信任代理自签证书的Root CA证书。所以过程中是客户端有感的。如果要做成无感的透明代理,需要向客户端推送自建的Root CA证书,在企业内部环境下是可实现的。

结论

基于隧道的透明代理,比较支持客户的选型

正向代理的HTTPS流量要特殊处理

由于要拿到目的地的域名,代理服务器本身才能解析出来目标地址、把流量发送成功,所以这里要做特殊处理。

Nginx解决方案

HTTP CONNECT隧道

HTTP CONNECT隧道是7层解决方案,核心思想就是利用HTTP CONNECT请求在客户端和代理之间建立一个HTTP CONNECT Tunnel,在CONNECT请求中需要指定客户端需要访问的目的主机和端口。

整个过程可以参考HTTP权威指南中的图:

1. 客户端给代理服务器发送HTTP CONNECT请求。

2. 代理服务器利用HTTP CONNECT请求中的主机和端口与目的服务器建立TCP连接。

3. 代理服务器给客户端返回HTTP 200响应。

4. 客户端和代理服务器建立起HTTP CONNECT隧道,HTTPS流量到达代理服务器后,直接通过TCP透传给远端目的服务器。代理服务器的角色是透传HTTPS流量,并不需要解密HTTPS。

如何实现

可以借助ngx_http_proxy_connect_module实现,需要编译Nginx加入模块支持,可以使用nginx -V查看是否加入编译支持

使用场景

7层需要通过HTTP CONNECT来建立隧道,属于客户端有感知的普通代理方式,需要在客户端手动配置HTTP(S)代理服务器IP和端口。在客户端用curl 加-x参数访问如下

代码语言:javascript复制
curl https://www.baidu.com -svo /dev/null -x 39.105.196.164:443

NGINX stream (4层解决方案)

依赖三个模块

ngx_stream_core_module --with-stream

ngx_stream_ssl_preread_module --with-stream_ssl_preread_module

ngx_stream_ssl_module --with-stream_ssl_module

ngx_stream_ssl_preread_module模块

要在不解密的情况下拿到HTTPS流量访问的域名,只有利用TLS/SSL握手的第一个Client Hello报文中的扩展地址SNI (Server Name Indication)来获取。

使用场景

对于4层正向代理,NGINX对上层流量基本上是透传,也不需要HTTP CONNECT来建立隧道。适合于透明代理的模式,比如将访问的域名利用DNS解定向到代理服务器。我们可以通过在客户端绑定/etc/hosts来模拟。

最终选型

从上面分析可以看出,使用Nginx搭建四层正向代理解决方案,基本可以满足客户跨地灾备、运维自主切换的诉求。

具体的实施细节,等落地后再发文同步

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞