Linux学习之路-DNS原理-BIND配置详解

DNS原理-BIND配置详解

DNS系统概述
 DNS系统作用
     a) DNS,简单地说,就是Domain Name System,翻成中文就是“域名系统”。主要的功能就是将人易于记忆的Domain Name与人不容易记忆的IP Address作转换。
      b) DNS提供正向解析和反向解析
          正向解析:根据主机名称(域名)查找对应的IP地址。
          反向解析:根据IP地址查找对应的主机域名

DNS系统结构
  系统结构原理
  目前DNS采用的是分布式的解析方案。互联网管理委员会规定,域名空间的解析权都归根服务器所有,也就是说,根服务器对互联网上所有的域名都享有完全的解析权!根服务器把com结尾的域名解析权委派给其他的DNS服务器,以后所有以com结尾的域名根服务器就都不负责解析了,而由被委派的服务器负责解析。而且根服务器还把以net,org,edu,gov等结尾的域名都一一进行了委派,这些被委派的域名被称为顶级域名,每个顶级域名都有预设的用途,例如com域名用于商业公司,edu域名用于教育机构,gov域名用于政府机关等等,这种顶级域名也被称为顶级机构域名。根服务器还针对不同国家进行了域名委派,例如把所有以CN结尾的域名委派给中国互联网管理中心,以JP结尾的域名委派给日本互联网管理中心,CN,JP这些顶级域名被称为顶级地理域名。

每个被委派的DNS服务器同样使用委派的方式向下发展,例如和讯公司想申请使用hexun.com域名,这时和讯就要向负责.com域名的DNS服务器提出申请,只要hexun.com还没有被其他公司或个人使用,而且申请者按时足额缴纳了费用,负责.com域名的服务器就会把hexun.com域名委派到和讯公司自己的DNS服务器60.28.251.1。只要DNS服务器使用委派,域名空间就会逐步形成现有的分布式解析架构。这种架构把域名解析权下放到各公司自己的DNS服务器上,既有利于及时更新记录,同时对平衡流量压力也很有好处。

全球13台根节点:
   A INTERNIC.NET(美国,弗吉尼亚州) 198.41.0.4
   B 美国信息科学研究所(美国,加利弗尼亚州) 128.9.0.107
   C PSINet公司(美国,弗吉尼亚州) 192.33.4.12
   D 马里兰大学(美国马里兰州) 128.8.10.90
   E 美国航空航天管理局(美国加利弗尼亚州) 192.203.230.10
   F 因特网软件联盟(美国加利弗尼亚州) 192.5.5.241
   G 美国国防部网络信息中心(美国弗吉尼亚州) 192.112.36.4
   H 美国陆军研究所(美国马里兰州) 128.63.2.53
   I Autonomica公司(瑞典,斯德哥尔摩) 192.36.148.17
   J VeriSign公司(美国,弗吉尼亚州) 192.58.128.30
   K RIPE NCC(英国,伦敦) 193.0.14.129
   L IANA(美国,弗吉尼亚州) 198.32.64.12
   M WIDE Project(日本,东京) 202.12.27.33

查询方式及过程:
   名称查询从客户端计算机开始,不能就地解析(hosts文件)查询时,可根据需要查询DNS服务器来解析名称。
   服务器端如果找到请求的答案:为肯定应答,本地要缓存。如果找不到:为否定应答,本地也要缓存,免得它以后老是问还要再次花时间迭代找答案。
   从本地客户端到服务器是属于递归查询,而服务器之间就是迭代查询,整个查询过程如下图:

DNS服务器类型
  主要分主域名服务器(权威)、从域名服务器、缓存域名服务器(非权威)3种

主域名服务器:
  特定DNS区域的官方服务器,具有唯一性
  负责维护该区域内所有域名->IP地址的映射记录
  对区域的所有更新都通过此服务器进行

从域名服务器:
  也称为辅助域名服务器
  其维护的 域名->IP地址记录 来源于主域名服务器
  只从同一个区域的主服务器或其他从服务器同步区域数据库文件

缓存域名服务器(非权威):
  也称为唯高速缓存服务器
  通过向其他域名服务器查询获得域名->IP地址记录,将查询结果缓存到本地,提高重复查询时的速度

BIND域名服务基本安装及配置文件说明
 BIND的安装与服务管理
  yum -y install bind 就可以完成安装。安装后/etc/init.d/下启动脚本为named,服务名称也为named
 
 BIND的配置文件说明
  主配置文件:/etc/named.conf,里面至少有三个区域,根、localhost、127.0.0.1
  区域数据库文件:/var/named/

运行用户和组:都是named

主配置文件named.conf
  options{
   //全局选项
  };     每一行必须以;结尾,{} 里面两侧必须有空格

zone "zone name" {
   //定义区域 
  }

logging{
  //定义日志系统
  }

区域类型:
  type{hint|master|slave|forward} 分别是根、主、从、转发

端口和监听地址:
      listen-on port 53 { 0.0.0.0; } 这样写是不行的,ss -tunl可以检查到没有监听到相应端口
       listen-on port 53 { 127.0.0.1; 192.168.1.1; }这样是正确的
      //listen-on port 53 { 127.0.0.1; } 把源文件这条注释,就可以监听所有地址和端口了

以下三条是统计数据用的:
     dump-file   "/var/named/data/cache_dump.db";
      statistics-file "/var/named/data/named_stats.txt";
      memstatistics-file "/var/named/data/named_mem_stats.txt";

安全控制选项:
     allow-transfer{} 通常都需要启用,从服务器
     allow-query{}; 默认只允许本地查询,此项仅用于服务器是缓存名称服务器时,只开放查询功能给本地客户端
     //allow-query     { localhost; }; 注释后就允许所有人查询了
     allow-recursion{可以使用网段}; 允许递归的白名单.是否允许递归,如果要给别人使用,必须要yes
     allow-update{ none; } 允许动态更新数据文件的主机白名单

dns安全加强选项:
      dnssec-enable yes;
      dnssec-validation yes;
      dnssec-lookaside auto;

ACL:BIND支持使用访问控制列表
      acl ACL_NAME{
         172.16.0.0/16
         192.168.0.0/24
         127.0.0.0/8
       }

访问控制列表只有定义后才能使用,通常acl要定义在named.conf的最上方
     BIND有四个内置的acl:
       any:任何主机
       none:无一主机
       local:本机
       localnet:本机所在的网络

注意:
     配置文件的默认选项有很多我们是用不上的,listen-on port,allow-query 注释就好
     区域数据库文件的权限必须是:640,属主属组权限 root:named
     区域数据库文件的检查:
      named-checkzone "a.com" /var/named/a.com.zone 区域名,区域文件
      或
      service named configtest  同时检查主配置文件和区域配置文件

区域数据库文件详解

区域数据库文件的一些写法(假如这里的区域名称是a.com,主机名dns.a.com):
   a.com. IN  NS  dns.a.com.
   @  IN  NS  dns
     IN  NS  dns
   这三种写法是一样的

例如上面第二条dns后面不加. 会自动在后面补上区域自身名字,等于dns.a.com
   如果要写全,必须把最后一个.写上,例www.a.com.

SOA记录(第一条记录):
   name:  只能是区域名称,例:a.com.  通常可以用@简写
   value: 必须是主DNS服务器的FQDN
   SOA必须是区域数据库文件的第一条记录

例:
   @(引用区域名称) 600  IN(关键字)  SOA (类型) ns.a.com. (主DNS名字)  dnsadmin.a.com. (邮箱地址,其中不用用@,用.代替) (
   serial number ; 序列号,这里;为注释,十进制数字,不能超过10位,通常使用日期,例如2014031001
   refresh time ;刷新时间,每隔多久到主服务器检查一次
   retry time ;重试时间,应该小于refresh time
   expire time ;过期时间
   negative answer ttl ;否定答案的ttl,客户端缓存的时间,设定过长会导致无法立即生效,设定过短导致客户端频繁请求
   )

SOA后的记录基本格式:
   name [ttl] IN RRtype Value
   例:
   www  600  IN A  1.2.3.4
   www.a.com. 600  IN  A   1.2.3.4
   注意:
   1.$TTL 600 可以在开头定义一个ttl用于全局
   2.$ORIGIN magelinux.com.  如果不放心,还可以定义区域名称,就是给下面@引用的

NS记录格式说明:
   可以有多个
   name:区域名称,通常可以简写为@,即引用区域名称
   value:DNS服务器的FQDN,可以使用相对名称
   注意:任何一个NS记录,必须有一条对应的A记录
   例:
   @ 600  IN NS  ns.dx.com.
   ns.dx.com. IN A 192.168.1.201

A记录格式说明:
   只能定义在正向区域数据库文件中
   name:FQDN(可以使用相对名称)
   value IP

例: 当2条记录主机名相同,IP不相同时,目的是实现简单的负载均衡,当第一次访问www.a.com指向1.2.3.4,第二次就到1.2.3.5,还有其他的话继续轮询,可以设置N个
   www  600  IN  A   1.2.3.4
   www  600  IN  A   1.2.3.5

当IP相同,有多个不同主机名,只是实现不同名称指向同一IP
   www  600  IN  A   1.2.3.4
   ftp  600  IN  A   1.2.3.4

MX记录格式说明:
   可以有多个
   必须给一个A记录
   name:区域名称,用于表示smtp服务器
   value:包含优先级和FQDN
    优先级:0-99,数字越小,级别越高
   
   例:(如果第一个没响应就找第二个)
   @ 600 IN MX  10 mail(注意没加. 会自动补上区域名称 )
   @ 600 IN MX  20 mail

PTR记录格式说明:
   方向解析,IP -> FQDN,只能定义在反向区域数据库文件中
   反向区域名称为逆向网络地址加.in-addr.arpa.后缀组成
   name:IP,主机地址反过来写,例:172.16.100.7的name为7.100.16.172.in-addr.arpa.
   value:FQDN
   例:
   201.1.168.192.in-addr.arpa. 600 IN PTR www.a.com. 这里的1.168.192.in-addr.arpa为区域名称
   或简写成
   201 600 IN PTR www.a.com.  会自动补上区域名称1.168.192.in-addr.arpa

反向解析区域数据库文件:
      可用正向文件直接修改,SOA和NS一样的,只是不需要MX记录和A记录
      区域名称以逆向的网络地址,并以.in-addr.arpa为后缀
      第一条必须SOA
      应该具有NS记录,但不能出现MX和A记录
      较常见的即为PTR记录
       名称为逆向的主机地址
       例:
       @  IN  SOA  dns.magelinux.com. dnsadmin.magelinux.com. (
           2014031001 序列号
           1H 刷新时间
           5M  重试时间
           3D 过期时间
           12H 客户端缓存时间
       )
         IN  NS  dns.magelinux.com.
       7  IN  PTR dns.magelinux.com.
       1  IN  PTR www.magelinux.com.
       2  IN  PTR mail.magelinux.com.

使用BIND构建域名服务器-主从DNS服务器

主从间区域数据库文件的传输有两种方式:完全和增量
 辅服务器自主服务器开始启用,就会自动完整同步一次区域数据库文件,然后每隔一段时间增量同步一次。如果在请求同步时,主服务器没有响应,先隔一段时间重复请求,还是没有响应的话,辅服务器会认为主服务器已经不对这区域提供服务了,它自己也不会再对这区域提供服务

主服务器有通知机制:
  当主服务器修改了区域数据库文件后,会主动通知辅服务器

主从同步配置:
  1.编辑主服务器配置文件named.conf,在需要同步的区域中添加transfer
   例(如有反向解析也可以添加):
   zone "dengxi.com" IN {
          type master;
     file "dengxi.zone";
     allow-transfer { 192.168.1.200; }; 从服务器地址,可以多个
    };
 
    zone "1.168.192.in-addr.arpa" IN {
     type master;
     file "1.168.192.zone";
     allow-transfer { 192.168.1.200; }; 从服务器地址,可以多个
    };

2.编辑对应区域数据库文件,增加从服务器NS和A记录
    正向区域数据库文件和反向区域数据库文件都需要修改
    例:
    正向区域数据库文件:
    $TTL 600
      @   IN  SOA dengxi.com. admin.dengxi.com. (
                 0
                 1H
                 5M
                 3D
                 10H
      )
      @   IN  NS  dns1.dx.com.
      @   IN  NS  dns2.dx.com.
      dns2.dengxi.com.    IN  A   192.168.1.200
      dns1.dengxi.com.    IN  A   192.168.1.201
      www.dengxi.com.     IN  A   192.168.1.201

反向区域数据库文件:
       1 $TTL 600
    @   IN  SOA dengxi.com. admin.dengxi.com. (
                  0
                  1H
                  5M
                  3D
                  10H
      )
    @   IN  NS  dns1.dx.com.
    @   IN  NS  dns2.dx.com.
    200 IN PTR dns2.dx.com.
    201 IN  PTR dns1.dx.com.
    209 IN PTR  www.dengxi.com.

3.从服务器安装bind和修改named.conf文件
    yum -y install bind
    修改配置文件
    zone "dengxi.com" IN {
          type slave; 指定为从服务器
          file "slaves/dengxi.com.zone";
          masters { 192.168.1.201; }; 主服务器指定,可以多个
   };

zone "1.168.192.in-addr.arpa" IN {
          type slave; 指定为从服务器
          file "slaves/1.168.192.zone";
          masters { 192.168.1.201; }; 主服务器指定,可以多个
   };
   
   检查配置文件没有问题后,启动named服务生效,会自动复制生成区域数据库文件。

注意:(1).正反区域数据库文件要放slaves目录下,系统已经预留,设置好权限的,文件名要和主服务器一致!
         (2).主从可以不再同一网段,只要能通信即可
         (3).向区域中添加从服务器的关键两步
           在上级获得授权
           在区域数据文件中为从服务器添加一条NS记录和对应的A或PTR记录(如果有做反向解析的话)
         (4).同步后,只要主服务器修改了配置,都要service named reload和把区域数据库文件中的序列号+1

使用BIND构建域名服务器-子域授权:
 用途:例如dengxi.com这个域上面有1台DNS服务器,当公司内某些部门越来越庞大,例如技术部,需要把它单独划分一台DNS服务器来处理tech.dengxi.com,他们下面还可以有www.tech.dengxi.com、mail.tech.dengxi.com等

实现步骤:
  1.在主DNS服务器上,编辑对应的正向区域数据库文件,例如这里的dengxi.com.zone添加
   tech IN  NS  tech.dx.com. 
   tech.dx.com. IN A 192.168.1.33  加上相应的A记录
   
   如果子域上有主从两台DNS服务器,可以这样
   tech IN  NS  tech.dx.com.
   tech IN  NS  tech2.dx.com.  
   tech.dx.com. IN A 192.168.1.33
   tech2.dx.com. IN A 192.168.1.38

这里要注意! 当添加的NS记录,如果写有名称,就是当成子域的配置,一般为@或留空。
   还有,为了从服务器也同步,配置文件修改后,序列号要加1哦
  
  2.在新的tech.dx.com主机上安装bind,建立区域数据库文件时,SOA记录那里区域名称改为tech.dengxi.com 就可以了
   yum -y install bind
   然后编辑/etc/named.conf,增加区域
   zone "tech.dx.com" IN {
    type master;
    file "tech.dx.com.zone"
   }

再编辑区域数据库文件:
   vim /var/named/tech.dx.com.zone
   $TTL 600
   @ IN SOA tech.dx.com. dnsadmin.tech.dx.com. (
     0
     1H
     5M
     3D
     10H
   )
   @ IN NS tech.dx.com.
   @  IN MX mail.tech.dx.com.
   tech.dx.com. IN A 192.168.1.33
   mail.tech.dx.com. IN A 192.168.1.34
   www.tech.dx.cm. IN A 192.168.1.35

使用BIND构建域名服务器-区域转发设置:
 解析某本机不复制的区域内的名称时不转发给根,而是转给指定的主机
 例如上面配置的子域授权服务器,在子域服务器上是不能解析www.dx.com的,它自己解析不了就要转给根了,我们可以配置区域转发,指定转发给父域服务器解析,不过如果父域不响应的话,还是要配置再转给根解析
 方法:
 编辑子域服务器/etc/named.conf 加上
 zone "dx.com" IN {
  type forward; 指定类型:转发
  forwarders { 192.168.1.201;192.168.1.200; }; 指定转发服务器,可以多个
 };

注意:

1.留意named.conf里的include "/etc/named.root.key";这行有可能导致一些问题,如有问题可以注释试试

2.Forward first|Only 这里默认是first,如果不写就是默认first
   forwarders { IP; }
  这个参数只表示:如果 forwarders list 为非空,默认为first值,服务器首先请求 forwarders list ,如果 forwarders list 中的DNS主机不应答,该主机将自己去找应答,如果设置值为only,服务器将只会请求 forwarders中的DNS主机

使用BIND构建域名服务器-缓存域名服务器

1.安装bind,yum -y install bind
 2.修改/etc/named.conf配置文件(其实安装完什么都不用修改,启动后就是缓存服务器了)
  根据需要注释:
   listen-on port 53 { 192.168.1.201; };
    listen-on-v6 port 53 { ::1; };
    allow-query     { localhost; };
    ...

3.启动服务即可:service named start

使用BIND构建域名服务器-分离解析的域名服务器(基于View的智能DNS)

分离解析的域名服务器实际还是主域名服务器,这里所说的分离解析,主要是指根据不同客户端提供不同的域名解析记录。例如公司内外有WEB服务器(www.dengxi.com),当DNS服务器面向internet和企业内部局域网同时提供服务时,DNS为内网客户端把www.dengxi.com解析为内网IP(192.168.1.5),把internet上请求解析为公网IP,外网就可以通过NAT访问内网的服务器,而局域网内用户直接访问,减轻了网关地址转换的负担。
  我们以上面配置好的主从域名服务器基础上来做分离解析的域名服务器。
  
  (1) 编辑/etc/named.conf文件,只要使用view把对应的区域分成内、外网就可以
  view "LAN" IN { //设置面向内网用户的视图
   match-clients {192.168.1.0/24;}; //匹配来自内网的客户端地址
   zone “dengxi.com” IN {
   type master ;
   file "dengxi.com.zone.lan"; //指定面向内网用户的地址数据库文件
   };
  };
  
  view "WAN" IN { //设置面向外网用户的视图
   match-clients {any;}; //匹配来自外网的客户端地址,any 为任意
   zone “dengxi.com” IN {
   type master ;
   file "dengxi.com.zone.wan"; //指定面向外网用户的地址数据库文件
   };
  };

注意将包含match-clients {any;};的view 配置段放在文件中的最后一部分,否则会
导致其后的view 配置段失效(找到一个匹配结果后即不再继续向下匹配)。

(2) 编辑相应的dengxi.com.zone.lan和dengxi.com.zone.wan文件
   dengxi.com.zone.lan:
   $TTL 600
      @   IN  SOA dengxi.com. admin.dengxi.com. (
                 0
                 1H
                 5M
                 3D
                 10H
      )
      @   IN  NS  dns1.dx.com.
      @   IN  NS  dns2.dx.com.
      dns2.dengxi.com.    IN  A   192.168.1.200
      dns1.dengxi.com.    IN  A   192.168.1.201
      www.dengxi.com.     IN  A   192.168.1.201

dengxi.com.zone.wan:
   $TTL 600
      @   IN  SOA dengxi.com. admin.dengxi.com. (
                 0
                 1H
                 5M
                 3D
                 10H
      )
      @   IN  NS  dns1.dx.com.
      @   IN  NS  dns2.dx.com.
      dns2.dengxi.com.    IN  A   173.16.1.1
      dns1.dengxi.com.    IN  A   173.16.1.2
      www.dengxi.com.     IN  A   173.16.1.2

(3) 重新启动服务
  (4) 验证分离解析域名服务器
     a)nslookup命令在内网的客户端中解析www.abc.com
      b)nslookup命令在外网的客户端中解析www.abc.com

时间: 2024-10-03 14:24:22

Linux学习之路-DNS原理-BIND配置详解的相关文章

Linux - CentOS6.5服务器搭建与初始化配置详解(下)

传送带:Linux - CentOS6.5服务器搭建与初始化配置详解(上) 继续接着上面的安装,安装完后会出现下面界面 点击reboot重启 重启后可以看到下面的tty终端界面  因为这就是最小化安装 输入root和之前配置的密码 第一步先把防火墙给光了 iptables -F  命令用于清空规则 这里插一条命令(这个命令我忘记打上去了) /etc/init.d/iptables save  用于保存当前被清空的规则 chkconfig  iptables  stop  开机不允许启动防火墙 c

Mysql主从数据库架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

【linux基础】17、网络属性配置详解

一.配置主机接入TCP/IP网络 路由: 主机路由:host 网络路由:net 默认路由(网关):default DNS服务器: 主DNS服务器 备用DNS服务器 主机名: 配置IP: 网络设备如何表示: 内核识别设备:驱动 设备:别名 以太网设备:ethX, PPP网络:pppX 本地回环:lo ip配置在内核上,显示在网卡上 静态指定: IP/Netmask 动态配置: DHCP服务器  Dynamic Host Configuration Protocol 1)用户空间工具 立即通知内核生

Spring MVC原理及配置详解

Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中. Spring MVC主要由DispatcherServlet.处理器映射.处理器(控制器).视图解析器.视图组成.他的两个核心是

nagios原理及配置详解

1.Nagios如何监控Linux机器 NRPE总共由两部分组成:(1).check_nrpe插件,运行在监控主机上.服务器端安装详见:(2).NRPE daemon,运行在远程的linux主机上(通常就是被监控机)客户端具体安装详见: 图1按照上图,整个的监控过程如下:当Nagios需要监控某个远程linux主机的服务或者资源情况时:1).nagios会运行check_nrpe插件,我们要在nagios配置文件中告诉它要检查什么.2).check_nrpe插件会通过SSL连接到远程的NRPE

Linux学习笔记之   DNS原理介绍、DNS搭建、主从复制、子域授权和视图

相关理论介绍: 什么是DNS? DNS( Domain Name System)是"域名系统"的英文缩写,是因特网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网.DNS 使用TCP和UDP端口53.当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符. DNS域名空间: 整个DNS架构是一颗倒置的树状层次结构,这个树状结构称为DNS域名空间(DNS domain namespace).自顶而下依次是根域,顶级域,二级域,

Linux学习之路4-bash的环境配置

bash 环境配置 配置文件:按生效范围划分,两类: 全局配置文件:/etc/profile,/etc/profile.d/*.sh,etc/bashrc 个人配置文件:~/.bash_profile,~/.bashrc 按功能分类:两类: profile类:交互式登陆(即直接通过终端进行的登陆或su - username登陆) /etc/profile ,/etc/profile.d/*.sh,~/.bash_profile 功用:1.定义环境变量,例如PATH,PS1  2.运行命令或脚本

DNS基础原理及配置详解!!!

DNS: Domain Name Service 域名服务器(应用层协议)      DNS所监听的端口        53/UDP,53/TCP(默认) 一般情况下仅使用UDP协议进行讯通,若网络出现连接问题会自动转为TCP协议通讯 DNS所说的"域"是逻辑概念 域名结构:    根域:为DNS根节点服务器,用"."表示 全球有13组DNS根服务器            顶级域:top level domain:(也叫一级域)     分类:      组织域:.

【Spring】Spring MVC原理及配置详解

1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中. Spring MVC主要由DispatcherServlet.处理器映射.处理器(控制器).视图解析器.视图组成.他的两个核心是两个核心: 处理器映射:选择使用