1、详细叙述ansible的工作原
在ansible中定义主机清单 ansible与各主机采用ssh-key免密钥登陆 ansible通过命令、模块和playbook,将执行的命令转换为python语句,通过ssh协议传输到指定的客户端上,使用python解释器执行 执行完成后,客户端返回成功或失败代码,返回给ansible服务器 服务器和客户端删除执行代码
2、使用ansible在多台机器上添加用户
需要现在/etc/ansible/hosts中定义主机清单,ip或者主机名都可以,一个ip可以属于多个主机 [web] 10.0.0.201 10.0.0.202 [db] 10.0.0.203 [lamp] 10.0.0.201 10.0.0.203
可以使用user模块 ansieble all -m user -a "name=a1" 也可以使用shell模块 ansible all -m shell -a "useradd a1" ansible lamp -m shell -a "useradd apache"
3、用ansible-playbook编译安装nginx服务
先定义主机清单 然后编辑playbook vim nginx.yml - hosts: web remote_user: root tasks: - name: copy nginx source code copy: src=/src/nginx-1.15.12.tar.gz dest=/src/nginx-1.15.12.tar.gz - name: install development tools yum: name: ['@Development tools', 'openssl-devel', 'pcre-devel'] - name: install nginx source code shell: cd /src ; tar xf nginx-1.15.12.tar.gz ; cd nginx-1.15.12 ; ./configure;make && make install - name: start nginx service shell: /usr/local/nginx/sbin/nginx 执行playbook ansible-playbook nginx.yml
4、描述域名劫持的解决方法
修改成可靠的dns服务器 /etc/resolv.conf 如果网卡配置中没有PEERDNS=no,那么网卡中指定的dns优先级高于resolv.conf 修改/etc/hosts,绑定ip和域名
5、描述dns的递归查询
1.客户端向本机设置的本地DNS服务器发出DNS域名查询请求 2.本地DNS服务器接收到请求后,查询本机的缓存,如果有这条记录,则返回给客户端,如果没有这条记录,则本地DNS服务器将域名查询请求发送给根域名服务器 3.根域名服务器接收到请求后,把所查询得到的所请求的DNS域名中的一级域名的地址返回给本地DNS服务器 4.本地DNS服务器根据根服务器返回的一级域名服务器地址,向一级域名服务器发送前面一样的域名查询请求 5.对应的一级域名服务器收到域名查询请求后,首先查询本机的缓存,如果有记录则直接返回给本地DNS服务器,再由本地服务器返回给客户端,如果没有,则返回二级域名的地址 6.本地服务器继续按照前面的方法向三级四级域名发送域名查询请求,直到最终的对应域名所在的权威服务器返回最终的查询记录给本地服务器,本地服务器再返回结果给客户端,同时本地服务器会缓存这条记录
6、DNS工作原理详细解析
DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名解析为ip地址。 具体过程如下: 1.用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了 2.浏览器将接收到的url中抽取出域名字段,就是访问的主机名,比如http://www.baidu.com/, 并将这个主机名传送给DNS应用的客户端 3.DNS客户机端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段(中间包括一些列缓存查询以及分布式DNS集群的工作) 4.该DNS客户机最终会收到一份回答报文,其中包含有该主机名对应的IP地址 5.一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接
7、dns区域转发与全局转发区别与实现方法
注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行 (1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器 Options { forward first|only; # only是只转发。first是转发,如果转发服务器也找不到记录,将继续到根上查询 forwarders { ip;}; }; (2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高 zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { ip;}; }; 注意:关闭dnssec功能 dnssec-enable no; dnssec-validation no;
8、实现智能DNS
1、创建不同的区域文件 cat /var/named/mage.com.zone.bj www A 6.6.6.6 cat /var/named/mage.com.zone.sh www A 7.7.7.7 cat /var/named/mage.com.zone.sz www A 8.8.8.8 2、使用acl把多个地址归并成一个集合, 格式: acl acl_name { ip; net/prelen; …… }; bind中ACL bind有四个内置的acl: none 没有一个主机 any 任意主机 localhost 本机 localnet 本机的IP同掩码运算后得到的网络地址 注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面 访问控制的指令: allow-query {}: 允许查询的主机;白名单 allow-transfer {}:允许区域传送的主机;白名单 allow-recursion {}: 允许递归的主机,建议全局使用 allow-update {}: 允许更新区域数据库中的内容 cat /etc/named.conf acl beijing{ 10.0.0.0/24; }; acl shanghai { 172.16.1.0/24; }; acl shenzhen { 10.0.10.0/24; }; acl any{ any; }; # view也在主配置文件中 view view_beijing{ match-clinets {beijing;}; include "/var/named.rfc1912.zones" }; 复制并修改/var/named.rfc1912.zones.shanghai view view_shanghai{ match-clinets {shanghai;}; include "/var/named.rfc1912.zones.shanghai" }; 或者 view view_shanghai { match-clients {shanghai;}; zone "mage.com" IN { type master; file "/var/named/mage.com.zone.sh"; }; }; view view_shanghai { match-clients {shenzhen;}; zone "mage.com" IN { type master; file "/var/named/mage.com.zone.sz"; }; }; zone "." IN { type hint; file "named.ca"; }; # 这段内容需要剪切到/var/named.rfc1912.zones中 include "/var/named.rfc1912.zones # 注释掉 3、bind view实现智能dns view:视图:实现智能DNS: 一个bind服务器可定义多个view,每个view中可定义一个或多个zone 每个view用来匹配一组客户端 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件 注意: (1) 一旦启用了view,所有的zone都只能定义在view中 (2) 仅在允许递归请求的客户端所在view中定义根区域 (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表 格式: view VIEW_NAME { match-clients { testacl; }; zone “magedu.com” { type master; file “magedu.com.zone”; }; include “/etc/named.rfc1912.zones”; };