Linux中DNS搭建

news2024/11/24 18:45:32

文章目录

  • 一、DNS介绍
    • 1.1、DNS是什么
    • 1.2、DNS的工作原理
    • 1.3、DNS的域名结构
  • 二、Bind介绍
    • 2.1、bind概述
    • 2.2、bind主要配置文件
  • 三、DNS安装
  • 四、主要配置文件解析(除/etc/named.conf)
    • 4.1、/etc/named.rfc1912.zones
    • 4.2、/etc/rc.d/init.d/named
    • 4.3、/etc/rndc.conf
    • 4.4、/usr/sbin/named-checkconf
    • 4.5、/usr/sbin/named-checkzone
    • 4.6、/var/named/named.ca
    • 4.7、/var/named/named.localhost


一、DNS介绍

1.1、DNS是什么

域名系统(Domain Name System,简称DNS)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。

人们可以通过DNS,将易于记忆的域名转换为对应的IP地址,从而访问到相应的网络资源。例如,当人们在浏览器中输入一个网址如“www.example.com”,系统会向DNS服务器发送请求,查询该域名对应的IP地址,然后通过该IP地址访问网站。

1.2、DNS的工作原理

DNS的工作原理基于域名解析,将用户友好的域名转换为机器可读的IP地址,涉及多个级别的DNS服务器,包括本地DNS服务器、根域名服务器、顶级域名服务器和权威域名服务器。以下是具体流程:

  • 浏览器缓存检查
    • 步骤:当用户在浏览器中输入一个域名时,系统会首先检查浏览器缓存,如果找到相应的记录,则直接使用该记录。
    • 目的:提高解析速度,减少网络请求。
  • 操作系统缓存检查
    • 步骤:若浏览器缓存未命中,系统会检查操作系统缓存,如Windows的hosts文件。
    • 目的:操作系统层面的缓存记录,可以快速解析一些常用或最近访问过的域名。
  • 本地DNS服务器查询
    • 步骤:如果本地缓存未命中,请求会被发送到本地DNS服务器。
    • 逻辑:本地DNS服务器先检查自己的缓存记录,未找到的话,向根域名服务器发起查询请求。
  • 根域名服务器查询
    • 步骤:根域名服务器指引本地DNS服务器联系相应的顶级域名服务器(如.com、.org等)。
    • 目的:提供正确的顶级域名服务器信息,进行下一步查询。
  • 顶级域名服务器查询
    • 步骤:本地DNS服务器向指定的顶级域名服务器发送请求,获取管理该域名的权威域名服务器信息。
    • 目的:定位到具体的权威域名服务器,获取最终的解析结果。
  • 权威域名服务器查询
    • 步骤:本地DNS服务器向权威域名服务器查询具体的IP地址,并将结果返回给用户。
    • 缓存机制:本地DNS服务器将解析结果缓存起来供后续使用,同时用户系统也会根据TTL值缓存解析结果。
  • 递归查询和迭代查询
    • 递归查询:通常发生在用户设备与本地DNS服务器之间,本地DNS服务器代替用户完成所有上游查询。
    • 迭代查询:发生在本地DNS服务器与其他各级域名服务器之间,每次查询都需要继续向其他服务器发起请求。

在这里插入图片描述

1.3、DNS的域名结构

DNS的域名结构采用层次树状结构,从根域到主机,这种结构设计有助于管理庞大的互联网域名空间,实现域名的有序分配和解析。

  • 根域
    • 根域:位于域名空间的最顶层,一般用一个“.”表示。这个点代表DNS的根,有了这个点,完全合格域名(FQDN)就是一个绝对路径。
    • 根域名服务器:全球有13个逻辑根域名服务器,它们的名称分别是a.root-servers.net到m.root-servers.net。这些服务器是DNS层级中最重要的,负责管理整个域名空间的解析权。
  • 顶级域
    • 顶级域:位于根域下一层,代表一种类型的组织机构或国家地区。例如,.com、.net、.org通常用于通用商业和组织用途,而.cn、.uk等则表示国家代码顶级域。
    • 顶级域名服务器:管理该顶级域名下的所有二级域名。当收到以某个顶级域结尾的域名解析请求时,会转发给相应的顶级域名服务器。
  • 二级域
    • 二级域:用来标明顶级域内的一个特定组织。例如,在.cn顶级域名下,可以设置二级域名如 .com.cn、.net.cn、.edu.cn等。
    • 权威域名服务器:负责一个区域的域名服务器,也称为权威域名服务器。顶级域名服务器也可以算作是权威域名服务器,只不过由于其特殊性,专门划分为一类。
  • 子域
    • 子域:二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名。
    • 自主管理:子域由所属的组织或用户自主管理,可以在其下继续划分更具体的三级域或四级域。
  • 主机
    • 主机:位于域名空间最下层,代表一台具体的计算机。例如,www、mail都是具体的计算机名字,可用FQDN如www.sina.com.cn、mail.sina.com.cn来表示。
    • FQDN:平时上网输入的网址都是FQDN名,如www.sina.com.cn表示要访问“sina.com.cn”域中一台名为“www”的计算机。

在这里插入图片描述

二、Bind介绍

2.1、bind概述

BIND(Berkeley Internet Name Domain)是全球使用最广泛的DNS服务软件之一,由加州大学伯克利分校开发,并成为事实上的DNS服务标准。BIND安装包包括核心程序、配置文件和相关工具。

BIND作为一个功能强大的开源DNS服务软件,广泛应用于各类网络环境中,不仅提供高效的域名解析服务,还支持动态更新和缓存机制。

  • BIND的作用
    • 域名解析:BIND将复杂的IP地址转换为人类可读的域名,使用户可以通过简单的网址访问网站,而无需记住复杂的IP地址。
    • 区域文件管理:BIND通过管理DNS区域文件来控制DNS记录的存储和更新,这些记录包括A记录、CNAME记录、MX记录等。
    • 缓存和查询响应:BIND具有缓存功能,可以暂时存储查询结果,减少解析时间和网络负载。同时,它可以快速响应客户端的查询请求,提高DNS解析效率。
    • 动态更新支持:BIND支持动态DNS更新,允许客户端在不停机的情况下修改DNS记录,适用于频繁变更IP地址的场景。
  • BIND的工作流程
    • 初始化套接字:服务器端调用socket函数创建套接字,用于后续的网络通信。
    • 绑定地址和端口:通过bind函数将套接字与特定的IP地址和端口号绑定,确保服务器在该地址和端口上监听请求。
    • 监听连接请求:服务器调用listen函数,开始在绑定的地址和端口上监听客户端的连接请求。
    • 接受连接请求:当客户端的连接请求到来时,服务器使用accept函数接受请求并创建新的套接字进行通信。
    • 数据交换:服务器和客户端通过已建立的连接进行双向数据交换,服务器可以使用send函数向客户端发送数据,使用recv函数接收来自客户端的数据
  • 其他服务的功能
    • Unbound:一个开源的DNS解析器,专注于DNS查询的响应速度和安全性。它主要作为转发代理服务器使用,可以有效地处理大量的并发查询请求。
    • PowerDNS:一个高性能的DNS服务器软件,支持多种后端数据库,适合大规模部署。它提供了灵活的配置选项,可以根据不同需求进行优化。
    • dnsmasq:一个轻量级的DNS服务器,适用于局域网环境。它可以提供DNS缓存、DHCP服务和DNS反向解析功能,配置简单,资源占用少。

2.2、bind主要配置文件

  • /etc/named.conf
    • 主配置文件:/etc/named.conf是BIND的主配置文件。它包含了DNS服务器的全局设置,如监听端口、服务作用范围、是否启用递归查询等。此文件还可能包含其他区域文件的位置信息,通过include语句引入其他配置文件。
  • /etc/named.rfc1912.zones
    • 区域定义文件:/etc/named.rfc1912.zones文件用于定义DNS区域。该文件列出了所有正向和反向解析区域的配置信息,每个区域指向一个具体的区域文件。
  • /etc/rc.d/init.d/named
    • 启动脚本:/etc/rc.d/init.d/named是一个启动脚本文件。这个脚本用于控制BIND服务的启动、停止和重启操作。在系统启动过程中,该脚本会自动启动BIND服务。
  • /etc/rndc.conf
    • rndc配置文件:/etc/rndc.conf是用于配置rndc的工具的配置文件。rndc(Remote Name Daemon Control)是一个管理BIND服务的工具,可用于执行服务器的监控和控制任务。这个文件包含了rndc的配置选项,如密钥、控制通道等。
  • /usr/sbin/named-checkconf
    • 语法检查工具:/usr/sbin/named-checkconf是一个用于检查/etc/named.conf文件语法正确性的工具。在修改配置文件后,运行此命令可以确保文件没有语法错误,从而避免因配置错误导致的服务启动失败。
  • /usr/sbin/named-checkzone
    • 区域文件检查工具:/usr/sbin/named-checkzone用于检查DNS区域文件(如example.com.zone)的语法和一致性。这个工具可以帮助管理员在更新区域文件后,发现并修正文件中的错误。
  • /var/named/named.ca
    • 根提示文件:/var/named/named.ca是BIND的根提示文件。这个文件包含了互联网根DNS服务器的信息,用于辅助本地DNS服务器进行递归查询。当本地DNS服务器无法直接解析某个域名时,会查询根服务器获取进一步的解析信息。
  • /var/named/named.localhost
    • 本地主机数据库:/var/named/named.localhost用于提供本地主机的DNS解析信息。这个文件通常包含了本地网络中的回环地址(127.0.0.1)和对应的域名(如localhost)。这确保了本地主机可以通过标准域名访问自己。

这些配置文件共同协作,为BIND提供了完整的配置信息,使其能够高效地完成DNS解析任务;管理员需要熟悉这些文件的作用和位置,以便能够准确配置和维护DNS服务器。

三、DNS安装

安装BIND 软件包

[root@root ~]# dnf install bind bind-utils

编辑 BIND 的配置文件 /etc/named.conf,根据需求进行配置

[root@root ~]# vi /etc/named.conf 
[root@root ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

# 定义BIND服务器的全局选项。
options {
		#指定DNS服务器监听的IP地址和端口,这里是本地回环地址(127.0.0.1)和端口53。
        listen-on port 53 { 127.0.0.1; };
        #指定DNS服务器监听的IPv6地址和端口,这里是本地回环地址(::1)和端口53。
        listen-on-v6 port 53 { ::1; };
        #设置工作目录为"/var/named"。
        directory       "/var/named";
        #设置缓存文件的位置为"/var/named/data/cache_dump.db"。
        dump-file       "/var/named/data/cache_dump.db";
        #设置统计文件的位置为"/var/named/data/named_stats.txt"。
        statistics-file "/var/named/data/named_stats.txt";
        #设置内存统计文件的位置为"/var/named/data/named_mem_stats.txt"。
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        #设置安全根文件的位置为"/var/named/data/named.secroots"。
        secroots-file   "/var/named/data/named.secroots";
        #设置递归文件的位置为"/var/named/data/named.recursing"。
        recursing-file  "/var/named/data/named.recursing";
        #允许本地主机进行查询。
        allow-query     { localhost; };

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        #开启递归查询。
        recursion yes;
		
		#开启DNSSEC验证。
        dnssec-validation yes;
        
		#设置动态密钥目录的位置为"/var/named/dynamic"。
        managed-keys-directory "/var/named/dynamic";
		
		#设置GeoIP数据库目录的位置为"/usr/share/GeoIP"。
        geoip-directory "/usr/share/GeoIP";

		#设置进程ID文件的位置为"/run/named/named.pid"。
        pid-file "/run/named/named.pid";
	
		#设置会话密钥文件的位置为"/run/named/session.key"。
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */

		#包含加密策略配置文件。
        include "/etc/crypto-policies/back-ends/bind.config";
};

logging {

		#定义默认的调试日志通道,将日志输出到"data/named.run"文件中,并设置日志级别为动态。
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

#定义根区域("."),类型为hint,文件位置为"named.ca"。
zone "." IN {
        type hint;
        file "named.ca";
};

#包含RFC 1912定义的区域文件。
include "/etc/named.rfc1912.zones";

#包含根密钥文件。
include "/etc/named.root.key";

启动 BIND 服务

[root@root ~]# systemctl start named

设置 BIND 服务在系统启动时自动启动

[root@root ~]# systemctl enable named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

四、主要配置文件解析(除/etc/named.conf)

4.1、/etc/named.rfc1912.zones

[root@root ~]# cat /etc/named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and https://tools.ietf.org/html/rfc6303
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// Note: empty-zones-enable yes; option is default.
// If private ranges should be forwarded, add 
// disable-empty-zone "."; into options
// 

zone "localhost.localdomain" IN { // 定义一个名为localhost.localdomain的区域,类型为master,文件名为named.localhost,不允许更新
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN { // 定义一个名为localhost的区域,类型为master,文件名为named.localhost,不允许更新
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { // 定义一个名为1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa的区域,类型为master,文件名为named.loopback,不允许更新
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN { // 定义一个名为1.0.0.127.in-addr.arpa的区域,类型为master,文件名为named.loopback,不允许更新
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN { // 定义一个名为0.in-addr.arpa的区域,类型为master,文件名为named.empty,不允许更新
        type master;
        file "named.empty";
        allow-update { none; };
};

4.2、/etc/rc.d/init.d/named

(注:不同的linux版本在不同的路径下,名字也不一定相同)

[root@root]# cat /usr/lib/systemd/system/named.service 
[Unit]  # 定义一个单元,用于描述服务的配置信息
Description=Berkeley Internet Name Domain (DNS)  # 描述服务的功能
Wants=nss-lookup.target  # 表示该服务依赖于nss-lookup.target服务
Wants=named-setup-rndc.service  # 表示该服务依赖于named-setup-rndc.service服务
Before=nss-lookup.target  # 表示该服务在nss-lookup.target服务之前启动
After=named-setup-rndc.service  # 表示该服务在named-setup-rndc.service服务之后启动
After=network.target  # 表示该服务在network.target服务之后启动

[Service]  # 定义一个服务,用于描述服务的运行方式
Type=forking  # 表示该服务为forking类型,即主进程会创建子进程
Environment=NAMEDCONF=/etc/named.conf  # 设置环境变量NAMEDCONF的值为/etc/named.conf
EnvironmentFile=-/etc/sysconfig/named  # 从/etc/sysconfig/named文件中读取环境变量
Environment=KRB5_KTNAME=/etc/named.keytab  # 设置环境变量KRB5_KTNAME的值为/etc/named.keytab
PIDFile=/run/named/named.pid  # 设置PID文件的路径为/run/named/named.pid

ExecStartPre=/bin/bash -c 'if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi'  # 在服务启动前执行的命令,用于检查配置文件
ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS  # 启动服务的命令,使用指定的配置文件和选项
ExecReload=/bin/sh -c 'if /usr/sbin/rndc null > /dev/null 2>&1; then /usr/sbin/rndc reload; else /bin/kill -HUP $MAINPID; fi'  # 重新加载服务的命令

ExecStop=/bin/sh -c '/usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID'  # 停止服务的命令

PrivateTmp=true  # 表示该服务使用私有的临时目录

[Install]  # 定义安装信息
WantedBy=multi-user.target  # 表示该服务希望被multi-user.target目标所引用

4.3、/etc/rndc.conf

在CentOS Stream中,rndc.conf文件默认不存在。但可以使用named.conf文件来配置rndc(Remote Name Daemon Controller)。

rndc是用于控制BIND名称服务器的工具,它通过TCP连接与名称服务器进行通信。要使用rndc,您需要确保在named.conf文件中启用了controls语句,并指定了一个或多个允许的IP地址和密钥。

[root@root /]# find /etc -name 'rndc.conf'
[root@root /]# find / -name 'rndc.conf'
[root@root /]# 

4.4、/usr/sbin/named-checkconf

/usr/sbin/named-checkconf 是一个二进制文件,因为它是一个执行具体任务的程序。这个文件是 BIND 软件包的一部分,专门用于解析并检查 DNS 配置文件及其所包含的所有文件的语法错误。

4.5、/usr/sbin/named-checkzone

/usr/sbin/named-checkzone 是一个二进制文件,因为它是一个执行具体任务的程序。这个文件是 BIND 软件包的一部分,专门用于解析并检查 DNS 区域文件的语法错误。与 named-checkconf 工具类似,named-checkzone 也是通过命令行接口接受特定参数来执行其功能的。

4.6、/var/named/named.ca

[root@root sbin]# cat /var/named/named.ca
; <<>> DiG 9.18.20 <<>> -4 +tcp +norec +nostats @d.root-servers.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47286
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1450
;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       518400  IN      NS     a.root-servers.net. ; 定义根服务器a的域名和TTL
.                       518400  IN      NS     b.root-servers.net. ; 定义根服务器b的域名和TTL
.                       518400  IN      NS     c.root-servers.net. ; 定义根服务器c的域名和TTL
.                       518400  IN      NS     d.root-servers.net. ; 定义根服务器d的域名和TTL
.                       518400  IN      NS     e.root-servers.net. ; 定义根服务器e的域名和TTL
.                       518400  IN      NS     f.root-servers.net. ; 定义根服务器f的域名和TTL
.                       518400  IN      NS     g.root-servers.net. ; 定义根服务器g的域名和TTL
.                       518400  IN      NS     h.root-servers.net. ; 定义根服务器h的域名和TTL
.                       518400  IN      NS     i.root-servers.net. ; 定义根服务器i的域名和TTL
.                       518400  IN      NS     j.root-servers.net. ; 定义根服务器j的域名和TTL
.                       518400  IN      NS     k.root-servers.net. ; 定义根服务器k的域名和TTL
.                       518400  IN      NS     l.root-servers.net. ; 定义根服务器l的域名和TTL
.                       518400  IN      NS     m.root-servers.net. ; 定义根服务器m的域名和TTL

;; ADDITIONAL SECTION:
a.root-servers.net.     518400  IN      A      198.41.0.4        ; 定义根服务器a的IPv4地址和TTL
b.root-servers.net.     518400  IN      A      170.247.170.2      ; 定义根服务器b的IPv4地址和TTL
c.root-servers.net.     518400  IN      A      192.33.4.12        ; 定义根服务器c的IPv4地址和TTL
d.root-servers.net.     518400  IN      A      199.7.91.13        ; 定义根服务器d的IPv4地址和TTL
e.root-servers.net.     518400  IN      A      192.203.230.10     ; 定义根服务器e的IPv4地址和TTL
f.root-servers.net.     518400  IN      A      192.5.5.241        ; 定义根服务器f的IPv4地址和TTL
g.root-servers.net.     518400  IN      A      192.112.36.4       ; 定义根服务器g的IPv4地址和TTL
h.root-servers.net.     518400  IN      A      198.97.190.53      ; 定义根服务器h的IPv4地址和TTL
i.root-servers.net.     518400  IN      A      192.36.148.17      ; 定义根服务器i的IPv4地址和TTL
j.root-servers.net.     518400  IN      A      192.58.128.30      ; 定义根服务器j的IPv4地址和TTL
k.root-servers.net.     518400  IN      A      193.0.14.129       ; 定义根服务器k的IPv4地址和TTL
l.root-servers.net.     518400  IN      A      199.7.83.42        ; 定义根服务器l的IPv4地址和TTL
m.root-servers.net.     518400  IN      A      202.12.27.33       ; 定义根服务器m的IPv4地址和TTL
a.root-servers.net.     518400  IN      AAAA   2001:503:ba3e::2:30 ; 定义根服务器a的IPv6地址和TTL
b.root-servers.net.     518400  IN      AAAA   2801:1b8:10::b     ; 定义根服务器b的IPv6地址和TTL
c.root-servers.net.     518400  IN      AAAA   2001:500:2::c     ; 定义根服务器c的IPv6地址和TTL
d.root-servers.net.     518400  IN      AAAA   2001:500:2d::d     ; 定义根服务器d的IPv6地址和TTL
e.root-servers.net.     518400  IN      AAAA   2001:500:a8::e     ; 定义根服务器e的IPv6地址和TTL
f.root-servers.net.     518400  IN      AAAA   2001:500:2f::f     ; 定义根服务器f的IPv6地址和TTL
g.root-servers.net.     518400  IN      AAAA   2001:500:12::d0d   ; 定义根服务器g的IPv6地址和TTL
h.root-servers.net.     518400  IN      AAAA   2001:7fe::53       ; 定义根服务器h的IPv6地址和TTL
i.root-servers.net.     518400  IN      AAAA   2001:500:1::53     ; 定义根服务器i的IPv6地址和TTL
j.root-servers.net.     518400  IN      AAAA   2001:503:c27::2:30 ; 定义根服务器j的IPv6地址和TTL
k.root-servers.net.     518400  IN      AAAA   2001:7fd::1        ; 定义根服务器k的IPv6地址和TTL
l.root-servers.net.     518400  IN      AAAA   2001:500:9f::42    ; 定义根服务器l的IPv6地址和TTL
m.root-servers.net.     518400  IN      AAAA   2001:dc3::35       ; 定义根服务器m的IPv6地址和TTL

4.7、/var/named/named.localhost

[root@root /]# cat /var/named/named.localhost
$TTL 1D ; 设置默认生存时间(TTL)为1天
@       IN SOA  @ rname.invalid. ( ; 定义主域名服务器(SOA)记录,将"@"作为域名,rname.invalid.作为负责该域的管理员邮箱
                                        0      ; serial ; 序列号,用于标识DNS记录的版本
                                        1D     ; refresh ; 刷新时间,指定多久后从备份服务器更新主服务器的信息
                                        1H     ; retry ; 重试时间,指定在失败后多久重新尝试获取信息
                                        1W     ; expire ; 过期时间,指定何时该记录失效
                                        3H )   ; minimum ; 缓存时间,指定其他服务器应缓存此记录的最短时间
        NS      @ ; 定义域名服务器(NS)记录,将"@"作为域名
        A       127.0.0.1 ; 定义地址(A)记录,将IPv4地址127.0.0.1映射到域名"@"
        AAAA    ::1 ; 定义地址(AAAA)记录,将IPv6地址::1映射到域名"@"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git idea分支cherry-pick

git idea分支cherry-pick cherry-pick请注意操作前更新代码&#xff01;&#xff01;&#xff01;操作步骤 cherry-pick cherry-pick 挑拣樱桃&#xff0c;对应在分支开发中就是把提交记录从A分支挑拣到B分支 请注意操作前更新代码&#xff01;&#xff01;&#xff01; 操作…

kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数

场景&#xff1a; kettle中http post步骤如何发送http请求且传递body参数&#xff1f; 解决方案&#xff1a; http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口&#xff0c;索性用python搭建一个简单的接口&#xff0c;关键代码如下&#…

JavaFX按钮

当用户单击按钮时&#xff0c;JavaFX Button类可以触发事件。Button类扩展了Labeled类&#xff0c;可以显示文本&#xff0c;图像或两者都可以。 以下代码显示了如何向Button添加单击操作侦听器。 import javafx.application.Application; import javafx.event.ActionEvent; im…

[14] CUDA_使用Opencv处理图像

CUDA_使用Opencv处理图像 1. Opencv中的图像表示 Opencv 提供了Mat 类来存储图像&#xff0c;如下&#xff1a; cv::Mat img; imgcv::imread("cameraman.tif);定义图像的示例&#xff1a; //定义单通道图像 cv::Mat img(6,6,CV_8UC1); //32位浮点型 Mat img2(256,256,…

异步爬虫:aiohttp 异步请求库使用:

使用requests 请求库虽然可以完成爬虫业务&#xff0c;但是对于异步任务来说&#xff0c;它是做不到的&#xff0c; 这时候我们需要借助 aiohttp 异步请求库来完成异步爬虫的编写&#xff1a; 话不多说&#xff0c;直接看示例&#xff1a; 注意&#xff1a;楼主使用的python版…

MyBatis逆向工程和MyBatisX插件的使用

文章目录 1.ORM思维2.逆向工程3.MyBatisX插件的使用 1.ORM思维 ORM&#xff08;Object-Relational Mapping&#xff0c;对象-关系映射&#xff09;是一种将数据库和面向对象编程语言中的对象之间进行转换的技术。它将对象和关系数据库的概念进行映射&#xff0c;最后我们就可以…

同三维T80006EH单路高清HDMI编码器

同三维T80006EH单路高清HDMI编码器 1路HDMI输入&#xff0c;1路3.5音频输入和输出&#xff0c;支持高清1080P60&#xff0c;支持SD卡录制 支持可解1路网络音频流输出&#xff0c;双向互动 一、产品简介&#xff1a; T80006EH高清编码器&#xff08;采集盒&#xff09;是一款…

【Linux】环境设置MySQL表名忽略大小写

目录 说明 一、摘要 二、查看服务器上MySQL情况 方式一&#xff1a;通过Linux方式 方式二&#xff1a;借助可视化工具&#xff08;Navicat&#xff09; 三、MySQL设置忽略表名大小写的参数&#xff08;lower_case_table_names&#xff09; 四、网上解决方案 方法一&…

卫士通电科网安安全IpSec网关Ukey开发对接

官方公开的开发文档,有几个坑,着重说一下踩坑的记录过程。 1、通过官方的客户端接口模拟程序获取前端参数:随机数和token 2、java程序调用官方sdk,postman请求测试: 3、贴出关键的java集成类: import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; impor…

玄机平台流量特征分析-常见攻击事

前言 熟悉常见的攻击流量特征&#xff0c;我们就可以通过主机的一个流量情况来判断主机遭受了何种攻击。这里来看看玄机平台的一道题目。 步骤1.1 这里需要我们找出恶意扫描者&#xff0c;也就是黑客的ip。下载好附件之后用wiresharke打开&#xff0c;直接筛选http协议的流量…

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件&#xff1a; //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件&#xff1a; / /// 鼠标…

Linux---系统的初步学习【 项目三 磁盘管理与文件系统】

项目三 磁盘管理与文件系统 3.1 项目知识准备 3.1.1 硬盘 ​ 如果从存储数据的介质上来区分&#xff0c;硬盘可分为机械硬盘&#xff08;Hard Disk Dirve&#xff0c;HHD&#xff09;和固态硬盘&#xff08;Solid State Disk&#xff0c;SSD&#xff09;&#xff0c;机械硬盘…

用户需求分析揭秘:最佳实践与策略

大多数产品团队都有自己处理客户需求的一套流程。但是那些潜在的客户和他们的需求呢&#xff1f;如果在产品管理上已经有一定的资历&#xff0c;很可能对此见惯不怪了。 通常&#xff0c;这些需求是销售人员跑来告诉你的&#xff0c;大概就是说&#xff1a;“超棒的潜在客户一…

Datakit管理openGauss6.0集群,监控运维超方便

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

手写精简版TinyHttpd项目(一)

前言&#xff1a; 我们在之前的TinyHttpd的精读(可以在首页去查看)中已经是基本的了解了显示一个网页的基本过程&#xff0c;那么我们学习后可以通过手写一个精简版的进行巩固下。 0.新工程的建立 我们也可以顺带复习下如何通过cmake在ubuntu下新建一个工程(记得提前下载cmake…

安装,管理程序

文章目录 Linuxd应用程序基础应用程序与系统命令的关系 典型应用程序目录常见的软件包装类型 rpm软件包管理工具RPM软件包rpm命令格式查询rpm软件包信息查询已安装的查询未安装的 安装或升级rpm软件卸载指定rpm软件辅助选项 维护RPM数据库解决软件包依赖关系方法 源代码编译安装…

C#观察者模式应用

目录 一、什么是观察者模式 二、C#中观察者模式的实现 三、两种实现的用法 1、事件与委托 2、IObserver和IObservable 四、参考文献 一、什么是观察者模式 观察者&#xff08;Observer&#xff09;模式的定义&#xff1a;指多个对象间存在一对多的依赖关系&#xff0c;当…

嵌入式中间件_3.嵌入式中间件的一般架构

根据嵌入式中间件的不同类型和其应用对象的不同&#xff0c;其架构也有所不同&#xff0c;通常嵌入式中间件没有统一的架构&#xff0c;这里仅仅列举两种中间件架构。 1.消息中间件 1.1消息中间件原理架构 消息中间件是消息传输过程中保存消息的一种容器。它将消息从它的源中…

Swift开发——索引器扩展

扩展用于向已存在的类型(例如,类、结构体、枚举和协议等)中添加新的功能,扩展甚至可以向系统类型(包括无法查阅代码的类型)中添加新的功能,但是扩展不能覆盖原类型中已有的方法,扩展也不能向类中添加新的存储属性。 01、索引器扩展 扩展可为类、结构体等类型添加索引器。程序段…

【热门开源项目推荐】满足不同程序员的需求与关注点

目录 前言一、热门开源项目介绍二、使用开源热门项目的优势&#xff08;一&#xff09;经济方面&#xff08;二&#xff09;技术方面&#xff08;三&#xff09;社区支持及协作方面 三、程序员选择项目模型建议&#xff08;一&#xff09;关键步骤&#xff08;二&#xff09;示…