一.DNS

1.DNS的作用

DNS (Domain Name System)域名解析系统,其作用是根据域名查找出对应的 IP 地址。比如访问 http://www.baidu.com 的时候,需要通过 DNS 查处 IP 地址是 14.215.177.39

2.DNS 域名解析过程

假设访问 http://www.baidu.com 域名解析过程如下: - 1.查找本地 DNS 缓存(即系统缓存),如没有则进行下一步 - 2.向 localDNS (本地 DNS 服务器,一般是由 ISP 互联网服务提供商,例如联通、电信和移动提供)发起查询请求,如没有则 localDNS 会向根域名服务器发起查询请求。 - 3.根域名服务器会返回 .com 的顶级域名服务器地址 - 4.localDNS 向顶级域名服务器发起查询,顶级域名服务器返回 .http://baidu.com 的次级域名服务器地址 - 5.localDNS 向次级域名服务器发起查询,次级域名服务器返回 http://www.baidu.com 的 IP 地址 - 6.localDNS 记录缓存,并返回给客户端。

3.DNS TTL

TTL( Time-To-Live 生存时间),表示一条域名解析记录在 DNS 服务器上缓存时间。当 DNS 服务器获得一条 DNS 解析记录后,会在 DNS 服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS 服务器将不再发出解析请求,而是直接返回缓存的记录。

4.国内 ISP localDNS 问题

国内 localDNS 由于各种原因,在域名解析时有时会造成异常:

域名缓存

  • 仅对 80 端口的 http 服务做了缓存,如果域名是通过 https 协议或其它端口提供服务的,用户访问就会出现失败。
  • 缓存服务器的运维水平参差不齐,时有出现缓存服务器故障导致用户访问异常的问题。

解析转发

解析转发是指运营商自身不进行域名递归解析,而是把域名解析请求转发到其它运营商的递归DNS上的行为。

LocalDNS递归出口NAT

LocalDNS 递归出口 NAT 指的是运营商的 LocalDNS 按照标准的 DNS 协议进行递归,但是因为在网络上存在多出口且配置了目标路由 NAT,结果导致 LocalDNS 最终进行递归解析的时候的出口IP 就有概率不为本网的 IP 地址。

域名劫持

域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的IP地址

二.HttpDNS

HttpDNS 原理只是将域名解析过程中向 localDNS 请求替换成了使用 Http 协议,向某个厂商的 HttpDNS 服务器发送请求,HttpDNS服务器返回 IP 地址,客户端将 ip 地址替换域名发送请求。目前腾讯、阿里等都有提供 HttpDNS 解析服务。

三.okhttp+httpDNS

okhttp 使用httpDNS 有两种方式 - 在 Interceptor 内替换域名,重新发送请求 - 使用 okhttp 提供的 .dns 接口

使用拦截器的缺点

HTTPS 是为了保证安全的,在发送 HTTPS 请求之前,首先要进行 SSL/TLS 握手。在这个流程中,客户端需要验证服务器下发的证书。首先通过本地保存的根证书解开证书链,确认证书可信任,然后客户端还需要检查证书的 domain 域和扩展域,看看是否包含本次请求的 HOST。

在这一步就出现了问题,当使用拦截器时,请求的 URL 中,HOST 会被替换成 HTTPDNS 解析出来的 IP。当服务器存在多域名和证书的情况下,服务器在建立 SSL/TLS 握手时,无法区分到底应该返回那个证书,此时的策略可能返回默认证书或者不返回,这就有可能导致客户端在证书验证 domain 时,出现不匹配的情况,最终导致 SSL/TLS 握手失败。

这就引发出来 SNI 方案,SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的 SSL/TLS 扩展。

SNI 的工作原理,在连接到服务器建立 SSL 连接之前,先发送要访问站点的域名(hostname),服务器根据这个域名返回正确的证书。现在,大部分操作系统和浏览器,都已经很好的支持 SNI 扩展。

针对 "domain 不匹配" 的问题,可以通过 hook 证书验证过程中的第二步,将 IP 直接替换成原来的域名,再执行证书验证。参见[source://src/main/java/okhttp3/internal/tls/OkHostnameVerifier.java]

参考文章

https://mp.weixin.qq.com/s/u6-53Kp9Jb48dKWzaJOKig

https://www.cnblogs.com/plokmju/p/okhttp_httpdns.html

DNS无法解析IP_DNS、HttpDNS和Okhttp相关推荐

  1. DNS无法解析IP_DNS之基本原理

    DNS(domain name system)域名系统或者(domain named system)区域名称服务,分为正向与反向域名解析,适用C/S,端口路53/udp,53/tcp,属于应用层协议: ...

  2. DNS智能解析的另类使用 让搜索引擎更快更好的收录您的网站

    各位站长叱诧网络多年一定都有自己的绝招.必杀技!今天在这里为大家分享的一个方法是对DNS智能解析的另类应用,这也是DNSLA推出的特色服务之一. DNSLA团队推出的搜索引擎分网智能解析服务是根据国内 ...

  3. Centos 7 搭建DNS正向解析和反向解析

    Centos 7  搭建DNS正向解析和反向解析服务的三要素:安装-配置-启动  1.使用yum安装DNS  yum  install  bind -y  2.修改配置文件       vi /etc ...

  4. k8s集群DNS无法解析问题的处理过程

    搭建k8s集群时DNS无法解析问题的处理过程 问题描述 在搭建Kubernetes集群过程中,安装了kube-dns插件后,运行一个ubuntu容器,发现容器内无法解析集群外域名,一开始可以解析集群内 ...

  5. Linux网络DNS分离解析

    Linux网络DNS拓展:分离解析 一.配置网关服务器搭建DNS分离解析 1.为网关服务器配置双网卡 2.安装bind软件包 3.修改主配置文件 4.修改区域配置文件 5.修改区域数据配置文件 6.启 ...

  6. shell脚本详解(九)——一键部署DNS正向解析

    shell脚本详解(九)--一键部署DNS正向解析 一.DNS正向解析 二.shell脚本一键部署 一.DNS正向解析 详情请点击:DNS正向解析 二.shell脚本一键部署 #!/bin/bash ...

  7. 实验详解——DNS反向解析、DNS主服务器和从服务器的配置

    实验详解--DNS反向解析.DNS主服务器和从服务器的配置 实验一:DNS反向解析 1.安装bind 2.查找配置文件路径 3.配置/etc/named.conf主配置文件 4.修改/etc/name ...

  8. 详解DNS正向解析实验(有图有实验)

    详解DNS正向解析实验(有图有实验) 一.DNS简介 1.DNS的定义 2.域名结构及解析方式 3.DNS服务器类型 二.构建DNS域名解析服务器步骤 1.安装bind软件包 2.配置正向解析 ①.先 ...

  9. Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启

    中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...

最新文章

  1. 不用车载传感器,也能L4级自动驾驶?清华百度联手发布全球首个纯路侧感知自动驾驶方案...
  2. vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解
  3. MariaDb数据库管理系统的学习(一)安装示意图
  4. 中国人工智能学会通讯——KS-Studio:一个知识计算引擎 1.2 知识图谱构建
  5. [luogu1373]小a和uim之大逃离_动态规划
  6. Flutter拓展 android studio如何连接夜神模拟器(亲测!!!)
  7. 关于编程中的一些颜色代码
  8. 最全的数据结构和算法,不信过来看看有没有漏掉的
  9. AAMAS 2021 强化学习论文70篇(自整理)
  10. win7 共享wifi
  11. idea更新报Node remains in conflict冲突的解决办法
  12. DNS系统服务器端口是,dns端口号是多少默认
  13. work bench 建表时PK/NN/ UQ等的含义
  14. 字节跳动一道Python面试题
  15. Review CAP定律分布式系统
  16. 认识XDR-扩展威胁检测与响应平台
  17. golang GPM模型理解
  18. 爬行、抓取、索引、收录,指的都是什么?
  19. Python函数文件练习题汇总
  20. 电票系统(ECDS)常用词汇解释

热门文章

  1. ImageNet2012 数据集下载
  2. Vue之scoped限制优劣
  3. 雷鸟Thunderbird邮件客户端的几个实用配置技巧
  4. 官方源码包安装MariaDB-server10.6.8
  5. 御龙在天自动喊话测试版!
  6. Delphi 简单的编译指令
  7. 也谈细节决定成败——《细节决家成败》读后感
  8. ASIC/SOC设计工程师学习路线
  9. 别再用FontAwesome了
  10. 第五课 田中さんは会社へ行きます。