后浪笔记一零二四

  • 114: 114.114.114.114
  • 腾讯: 119.29.29.29
  • 海外地区DNS:
    • OpenDNS: 208.67.222.222
    • GoogleDNS: 8.8.8.8
  • DNSCrypt: 使用这个软件可以防范常见的dns污染问题。

工具

  1. yum install bind-utils , apt install dnsutils
  • dig : 测试域名 dig @DNS服务器的IP地址 域名
  • nslookup : 检测DNS解析 nslookup 域名 DNS服务器的IP地址
  1. mtr <ip地址> : 查询链路

设置DNS

在/etc/resolv.conf中添加这两行

nameserver 114.114.114.114
nameserver 8.8.8.8
  • nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver
  • domain   声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容
  • search   它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用

如何通过DNS协议解析域名

  1. 什么是DNS?
  • 一个用于将人类可读的"域名"(例如www.taohui.pub)与服务器的IP地址(例如,116.62.160.193)进行映射的数据库
  • 递归查询
    • 根域名服务器
    • 权威服务器
  1. dig工具查询
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[root@localhost ~]# dig image.baidu.com

; <<>> DiG 9.11.13-RedHat-9.11.13-6.el8_2.1 <<>> image.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6237
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;image.baidu.com.               IN      A

;; ANSWER SECTION:
image.baidu.com.        300     IN      CNAME   image.n.shifen.com.
image.n.shifen.com.     103     IN      A       106.120.159.212

;; Query time: 7 msec
;; SERVER: 192.168.28.1#53(192.168.28.1)
;; WHEN: Fri Oct 09 03:29:42 CST 2020
;; MSG SIZE  rcvd: 78
  1. DNS报文
|0                      |1                      |2                      |3                      |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|                      ID                       |QR|  Opcode   |AA|TC|RD|RA| Z|AD|CD|  RCODE    |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|                  QDCOUNT                      |                  ANCOUNT                      |头部
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|                  NSCOUNT                      |                  ARCOUNT                      |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|

+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|                                            Questions ...                                      |Question
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|部分

+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|                                           Answer RRs ...                                      |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|Response
|                                          Authority RRs ...                                    |部分
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|
|                                          Additional RRs ...                                   |
+--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|--|

BPF过滤器是没有dns过滤类型的,只有udp的,使用udp and port 53。

  1. Question格式
  • QNAME编码规则:

    • 以.分割为多段, 每段以字节数打头 * 每段字节数: 前2比特必须为00,所以只能表示2^6-1 = 63字节 * 每段字符: 使用ASCII编码
    • 全部完了以后,以0结尾
  • QTYPE常用类型

    类型 意义
    1 A IPv4地址
    2 NS 权威域名服务器
    5 CNAME 别名
    15 MX 邮件交换
    16 TXT 文本字符串
    28 AAAA IPv6地址
  • QCLASS: IN表示internet

  1. Answer格式 注意:Answer报文也会带上Query报文
  • NAME: 前2位为11,后接要引用的QNAME偏移量(从UDP报文头开始往后数),总共2个字节
  • TYPE
  • CLASS
  • TTL: Time To Live
  • RDLENGTH:指明RDATA的长度
  • RDATA: 查询值,如IP地址,或者别名
    • 别名遵循QNAME编码规则

某长时间运行的进程启动之后,改了/etc/hosts文件,该进程能感知到hosts文件的变化么?

浏览器:可以感知。

nginx会缓存DNS信息,如果缓存命中,哪怕域名对应的ip不通,也不会读取/etc/hosts;只有缓存中没有该域名的信息,才会读取/etc/hosts。

runc起的容器挂载了宿主机的/etc/hosts,为何使用vim编辑了宿主机的/etc/hosts,容器内无法获取到最新的文件内容呢?使用 vim或者vi 修改文件时,会创建临时文件并替换原文件(改变 inode),绑定挂载基于 inode,容器仍指向旧的 inode。

Python/Go/Rust通常遵循操作系统行为,每次解析时都会重新读取 hosts 文件。


本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image