前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NAT网关异地灾备思路

NAT网关异地灾备思路

原创
作者头像
AIOPS
修改2023-09-29 20:06:14
2991
修改2023-09-29 20:06:14
举报
文章被收录于专栏:高可用高可用

问题背景

近期某客户需要考虑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腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题背景
  • 代理服务器概述
    • 代理服务器分类
      • 结论
      • HTTP/HTTPS正向代理选型
        • 按照客户端是否感知分类
          • 按照是否解析HTTPS分类
            • 结论
            • 正向代理的HTTPS流量要特殊处理
              • Nginx解决方案
                • HTTP CONNECT隧道
                • 使用场景
              • NGINX stream (4层解决方案)
                • 使用场景
            • 最终选型
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com