将服务开放给用户
接入问题引入
浏览器从输入域名到网页加载出来,都经历了哪些过程?
- 域名解析
- TCP建立连接
- SSL握手
浏览器抓包:
graph LR;
DNS-->TCP-->TLS-->HTTP请求
企业接入升级打怪之路
域名系统
使用域名系统替换hosts文件
关于域名空间:
- 域名空间被组织成树形结构
- 域名空间通过划分zone的方式进行分层授权管理
- 全球公共域名空间仅对应一棵树
- 根域名服务器:查询起点
- 域名组成格式:[a-zA-Z0-9_-],以划分label
顶级域名gTLD:.gov政府 .edu教育 .com商业 .mil军事 .org非盈利组织
域名报文格式:
域名的购买与配置迁移
如何开放外部用户访问
方案:租赁异构外网ip,专用于外部用户访问门户网站,将www.example.com解析到外网ip 100.1.2.3,将该ip绑定到一台物理机上,并发布公网route,用于外部用户访问
自建DNS服务器
问题:
- 内网域名的解析也得去公网去获取,效率低下
- 外部用户看到内网ip地址,容易被hacker攻击
- 云厂商权威DNS容易出故障,影响用户体验
- 持续扩大公司品牌技术影响力,使用自己的DNS系统
graph LR;
从公有云托管-->构建自己的DNS系统
dig trace
命令用于跟踪 DNS 解析过程,并显示 DNS 查询的详细信息。它是dig
命令的扩展版本,用于帮助诊断 DNS 相关问题。
当执行dig trace
命令时,它会发送 DNS 查询到指定的域名服务器,并显示查询经过的每个步骤的详细信息,包括查询的发起、中间服务器的响应以及最终的结果。它可以显示 DNS 查询的路径、查询的时间延迟、各个服务器的响应状态等信息,有助于定位 DNS 解析问题或了解查询的执行情况。
通过使用dig trace
命令,您可以追踪 DNS 查询在网络中的传播过程,识别潜在的问题点,例如延迟、故障或配置错误。这对于网络管理员、系统管理员或开发人员来说是一种有用的工具,可以帮助他们进行故障排除和优化 DNS 解析性能。
DNS记录类型
A/AAAA: IP指向记录,用于指向IP,前者为IPV4记录,后者为IPV6记录
CNAME: 别名记录,配置值为别名或主机名,客户端根据别名继续解析以提取IP地址
TXT: 文本记录,购买证书时需要
MX: 邮件交换记录,用于指向邮件交换服务器
NS: 解析服务器记录,用于指定哪台服务器对于该域名解析
SOA记录: 起始授权机构记录,每个zone有且仅有唯一的一条SOA记录,SOA是描述zone属性以及主要权威服务器的记录。
思考:站在企业角度思考,我们需要的是哪种DNS服务器?
权威DNS、LocalDNS(可选)
常见的开源DNS:bind、nsd、knot、coredns
- DNS Query
- DNS Response
- DNS Update
- DNS Notify
- DNS XFR
HTTPS协议
出现的背景:
采用HTTP明文传输经常会出现以下问题:
页面出现白页/出现某些奇怪的东西
返回了403的页面
搜索不了东西
搜索问题带了小尾巴,页面总要闪几次
页面弹窗广告
搜索个汽车就有人打电话推销4s店和保险什么的
对称加密和非对称加密
SSL通信过程
- client random
- server random
- premaster secret
- 加密算法协商
根据上述四个元素生成session key,客户端和服务器都使用这个session key来进行数据传输
证书链
公钥确定是可信的吗?会不会被劫持?
Server端发送是带签名的证书链(如上图所示)
Client收到会仍然需要验签:
- 是否可信机构颁布
- 域名是否与实际访问一致
- 检查数字签名是否一致
- 检查证书的有效期
- 检查证书的撤回状态
接入全站加速
问题背景:
外网用户访问站点,一定是一帆风顺的吗?可能出现的问题有哪些?
解决方案:
存在问题 | 解决方案 |
---|---|
源站容量问题 | 增加后端机器扩容;静态内容,使用静态加速缓存 |
网络传输问题 | 动态加速DCDN |
全站加速 = 静态加速 + 动态加速
静态加速CDN
当前访问的过程如下:
针对静态文件传输,网络优化方式?
通过缓存来进行优化
优势如下:
- 解决服务器端的“第一公里”问题
- 缓解甚至消除了不同运营商之间互联的瓶颈造成的影响
- 减轻了各省的出口带宽压力
- 优化了网上热点内容的分布
动态加速DCDN
针对POST等非静态请求等不能在用户边缘缓存的业务,基于智能选路技术,从众多回源线路中择优选择一条线路进行传输
DCDN原理
RTT示例:
- 用户到核心:35ms
- 用户到边缘:20ms
- 边缘到汇聚:10ms
- 汇聚到核心:10ms
全站加速
四层负载均衡
场景:在运营商处租用的100.1.2.3的公网ip,如何在企业内部使用最合理?
现状:直接找一个物理机,ifconfig将网卡配上这个ip,起server监听即可
应用多,起多个server监听不同的端口即可
租多个公网ip(数量有限)
怎样尽可能充分的利用和管理有限的公网IP资源?
什么是4层负载均衡?
基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上。
三个主要功能:
- 解耦vip和rs
- NAT
- 防攻击:syn proxy
常见的调度算法原理:
- RR轮询:Round Robin,将所有的请求平均分配给每个真实服务器RS
- 加权RR轮询:给每个后端服务器一个权值比列,将请求按照比例分配
- 最小连接:把新的连接请求分配到当前连接数最小的服务器
- 五元组hash:根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模 缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个hash环
- 一致性hash:只影响故障服务器上的连接session,其余服务器上的连接不受影响
常见的实现方式 FULLNAT
4层负载均衡特点
- 大部分都是通过dpdk技术实现,技术成熟,大厂都在用
- 纯用户态协议栈,kernel bypass,消除协议栈瓶颈
- 无缓存,零拷贝,大页内存(减少cache miss)
- 仅针对4层数据包转发,小包转发可达到限速,可承受高cps
使用4层负载均衡
七层负载均衡
问题背景:
提问:四层负载对100.1.2.3只能bind一个80端口,而有多个外部站点需要使用,该如何解决?(有一些7层相关的配置需求,该怎么做?)
- SSL卸载:业务侧是http服务,用户需要用https访问
- 请求重定向:浏览器访问toudiao.com自动跳转www.toudiao.com
- 路由添加匹配策略:完全、前缀、正则
- Header编辑
- 跨域支持
- 协议支持:websocket、grpc、quic
Nginx简介:
最灵活的高性能WEB SERVER,应用最广的7层反向代理。
Nginx和Apache性能对比:
特点:
- 模块化设计,较好的扩展性和可靠性
- 基于master/worker架构设计
- 支持热部署;可在线升级
- 不停机更新配置文件、更换日志文件、更新服务器二进制
- 较低的内存消耗:1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存
- 事件驱动:异步非阻塞模型、支持aio、mmap(内存映射)
Nginx反向代理示意图:
反向代理(Reverse Proxy)是一种网络代理服务器的配置方式,它代表服务器接收来自客户端的请求,并将这些请求转发到后端的目标服务器上。与正向代理(Forward Proxy)不同,正向代理是代理客户端发送请求到互联网上的目标服务器。
在反向代理中,客户端向反向代理服务器发送请求,而反向代理服务器会根据配置的规则将请求转发到后端的目标服务器。客户端对于后端服务器是透明的,它只与反向代理服务器进行通信。反向代理服务器可以根据负载均衡算法将请求分发到多个后端服务器上,从而提高系统的性能和可靠性。
反向代理常用于以下情况:
- 负载均衡:将请求分发到多个后端服务器,平衡负载,提高系统的处理能力和吞吐量。
- 缓存加速:缓存经常请求的资源,减轻后端服务器的负载,提高响应速度。
- 安全性和保护:反向代理可以屏蔽后端服务器的真实IP地址,提供额外的安全层,防止恶意请求和攻击。
- SSL/TLS终结:反向代理可以处理SSL/TLS加密和解密,减轻后端服务器的负载。
- 内容路由和请求重写:根据请求的URL路径或其他条件,将请求转发到不同的后端服务器或修改请求的内容。
总的来说,反向代理充当了客户端和后端服务器之间的中间层,提供了负载均衡、安全性、性能优化和请求路由等功能,可以改善网络应用的可靠性和性能。
Nginx内部架构:
之所以Nginx拥有这么高的性能,主要得益于它是基于事件驱动模型(也可以说基于操作系统的发展):
动手实践
DNS服务器搭建:
四层负载均衡实验:
- 开源的解决方案:LVS + keepalived
- Nginx stram模块:可进行四层协议tcp/udp报文进行转发、代理
7层负载均衡实验:
SSL自签证书实验:
本地服务开放外网访问
LVS + keepalived配置过于复杂,下面是一种简单的方式 低成本的让别人访问自己的服务
复习总结
课程回顾: