DNS无法解析IP_DNS、HttpDNS和Okhttp
![](/assets/blank.gif)
一.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 记录缓存,并返回给客户端。
![](/assets/blank.gif)
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 解析服务。
![](/assets/blank.gif)
三.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相关推荐
- DNS无法解析IP_DNS之基本原理
DNS(domain name system)域名系统或者(domain named system)区域名称服务,分为正向与反向域名解析,适用C/S,端口路53/udp,53/tcp,属于应用层协议: ...
- DNS智能解析的另类使用 让搜索引擎更快更好的收录您的网站
各位站长叱诧网络多年一定都有自己的绝招.必杀技!今天在这里为大家分享的一个方法是对DNS智能解析的另类应用,这也是DNSLA推出的特色服务之一. DNSLA团队推出的搜索引擎分网智能解析服务是根据国内 ...
- Centos 7 搭建DNS正向解析和反向解析
Centos 7 搭建DNS正向解析和反向解析服务的三要素:安装-配置-启动 1.使用yum安装DNS yum install bind -y 2.修改配置文件 vi /etc ...
- k8s集群DNS无法解析问题的处理过程
搭建k8s集群时DNS无法解析问题的处理过程 问题描述 在搭建Kubernetes集群过程中,安装了kube-dns插件后,运行一个ubuntu容器,发现容器内无法解析集群外域名,一开始可以解析集群内 ...
- Linux网络DNS分离解析
Linux网络DNS拓展:分离解析 一.配置网关服务器搭建DNS分离解析 1.为网关服务器配置双网卡 2.安装bind软件包 3.修改主配置文件 4.修改区域配置文件 5.修改区域数据配置文件 6.启 ...
- shell脚本详解(九)——一键部署DNS正向解析
shell脚本详解(九)--一键部署DNS正向解析 一.DNS正向解析 二.shell脚本一键部署 一.DNS正向解析 详情请点击:DNS正向解析 二.shell脚本一键部署 #!/bin/bash ...
- 实验详解——DNS反向解析、DNS主服务器和从服务器的配置
实验详解--DNS反向解析.DNS主服务器和从服务器的配置 实验一:DNS反向解析 1.安装bind 2.查找配置文件路径 3.配置/etc/named.conf主配置文件 4.修改/etc/name ...
- 详解DNS正向解析实验(有图有实验)
详解DNS正向解析实验(有图有实验) 一.DNS简介 1.DNS的定义 2.域名结构及解析方式 3.DNS服务器类型 二.构建DNS域名解析服务器步骤 1.安装bind软件包 2.配置正向解析 ①.先 ...
- Mysql异常问题排查与处理——mysql的DNS反向解析和客户端网卡重启
中午刚想趴一会,不料锅从天降!!!Mysql连不上了....... 现象如下: 现象1:登录mysql所在服务器,连接MySQL 成功: 现象2:通过客户端远程连接MySQL,返回失败,如下: Ent ...
最新文章
- 不用车载传感器,也能L4级自动驾驶?清华百度联手发布全球首个纯路侧感知自动驾驶方案...
- vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解
- MariaDb数据库管理系统的学习(一)安装示意图
- 中国人工智能学会通讯——KS-Studio:一个知识计算引擎 1.2 知识图谱构建
- [luogu1373]小a和uim之大逃离_动态规划
- Flutter拓展 android studio如何连接夜神模拟器(亲测!!!)
- 关于编程中的一些颜色代码
- 最全的数据结构和算法,不信过来看看有没有漏掉的
- AAMAS 2021 强化学习论文70篇(自整理)
- win7 共享wifi
- idea更新报Node remains in conflict冲突的解决办法
- DNS系统服务器端口是,dns端口号是多少默认
- work bench 建表时PK/NN/ UQ等的含义
- 字节跳动一道Python面试题
- Review CAP定律分布式系统
- 认识XDR-扩展威胁检测与响应平台
- golang GPM模型理解
- 爬行、抓取、索引、收录,指的都是什么?
- Python函数文件练习题汇总
- 电票系统(ECDS)常用词汇解释