centos 域名解析失败?域名解析
大家好,如果您还对centos 域名解析失败不太了解,没有关系,今天就由本站为大家分享centos 域名解析失败的知识,包括域名解析的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
如何在FreeIPA上管理域名解析
管理域名解析在FreeIPA上的步骤详解
本文旨在为读者提供如何在FreeIPA上管理域名解析的实用指南。在先前的文章中,我们已经介绍了如何在Redhat7上安装FreeIPA及其客户端,并了解到FreeIPA集成了DNS服务。本篇文章将重点讲解如何在FreeIPA上添加DNS的泛域名解析。
首先,让我们确认测试环境。本指南适用于以下配置:
1. CentOS 7.6
2. FreeIPA 4.6.4
接下来,我们将演示如何配置域名正反向解析以及泛域名解析。
以rac01节点为例,当前域名解析失败的情况如下:
Nslookup rac01.sztech.com
执行上述命令后,nslookup未能找到rac1.sztech.com,显示NXDOMAIN错误。
要解决此问题,我们需要登录FreeIPA的Web控制台,并按照以下步骤操作:
1.登录FreeIPA的Web控制台。
2.在控制台中,点击“网络服务”->“DNS区域”,查看当前配置。
3.对于sztech.com域名,进行如下配置:
4.使用“添加”菜单,为rac1.sztech.com添加域名解析。记录名为主机名除掉域名的部分,选择A类型,输入该主机的IP地址,并勾选“Create reverse”以创建反向解析。
接着,我们为rac1.sztech.com添加泛域名解析:
通过上述步骤,rac1.sztech.com的域名及泛域名解析已配置完成。
为了验证DNS解析的正确性,确保当前主机的DNS地址配置正确,并使用nslookup命令进行验证。
通过命令行验证,我们确认rac1.sztech.com的正反向解析均正确,泛域名解析亦正常可用。
总结,FreeIPA服务中的DNS解析服务基于Bind。通过FreeIPA服务,用户可以方便地为主机配置域名解析及泛域名解析,相较于在RedHat7上自行配置Bind服务,操作更为简便。
一次/etc/hosts权限错误导致的es集群错误
先说一下环境:系统使用的CentOS7.5,elasticsearch版本是5.4.0。一套产品集群包括三个elasticsearch节点构成的集群。
部署了两套测试集群,配置基本类似,elasticsearch配置文件中使用主机名。在某一次测试后,一套集群里的elasticsearch就开始报错,无法提供服务。查看日志发现,elasticsearch一直抛出UnknownHostException异常,所以无法和另外两个节点通信连成集群。根据堆栈信息,这个异常是在解析其它elasticsearch节点域名的时候调用InetAddress.getAllByName()抛出的。
而另外一套集群里类似的配置,它的elasticsearch服务却是很正常的。唯一的不同是,出问题的集群临时配置了DNS服务。
按正常的情况来说,elasticsearch解析域名的方式应该是先从/etc/hosts中获取,获取不到了再查询DNS。elasticsearch服务节点的主机名、IP都有在配置在/etc/hosts中。所以,即使一套集群配置了DNS,另外一套没有,也不应该出现elasticsearch无法解析域名的问题。
为了找到域名解析错误的原因,我决定跟踪一下elasticsearch解析域名的过程,使用的工具是strace。strace命令可以追踪进程的系统调用。
安装过程很简单。
接着是修改elasticsearch的执行脚本,一般路径是/usr/share/elasticsearch/bin/elasticsearch。在这个脚本的最后几行,在exec后添加strace命令 strace-o/tmp/es.strace.log-f,如下所示。
-o参数将strace的输出保存到文件/tmp/es.strace.log,-f参数表明追踪进程的所有子进程的系统调用。
两个集群的elasticsearch节点都修改了这个脚本,重启服务后对比查看。对比这个输出文件,终于发现一些端倪。首先,elasticsearch调用的getAllByName()确实首先查看了/etc/hosts文件,但是权限不足无法访问这个文件。
这是有问题的,首先是这个文件应该是可读的,不应该出现权限不足的问题,第二是两个集群都无法访问这个文件,但是为什么一个能解析域名而另外一个不能。
接着往下对比,出问题的elasticsearch进程这时候检查到/etc/resovl.conf文件已经配置,于是向DNS服务器发出了查询。DNS无法解析,于是抛出了UnknownHostException异常。另外一边,没有问题的elasticsearch进程检查到/etc/resovl.conf未配置,这时候做了一个特别的操作,它创建了一个地址族是AF_NETLINK的原始套接字,通过这个套接字查询得到了域名对应的IP地址。我猜测,这可能是访问系统的ARP信息。
既然是DNS的问题,那么把出问题的/etc/resolv.conf中的DNS配置删除呢?重启服务之后,elasticsearch服务依然抛出异常,查看日志发现进程虽然跳过了/etc/resolv.conf,但是它却开始访问了本地的DNS端口53(UDP),可能这是java最后的解析尝试了。恰好,这个节点上部署了rpcbind服务,这个服务恰好就监听了53端口,结果就是依然无法通过DNS解析,java华丽丽的抛出了异常。
问题的根本原因还是/etc/hosts文件不可读,查看这个文件的权限,结果是600,意思就是只能root用户读写了,其它用户没有任何权限,包括读。elasticsearch服务使用的elasticsearch用户,所以当然就会被禁止读取。
经过其它的查找,发现是有一个服务进程会一直更新这个hosts文件,更新的方式是先创建一个临时文件,然后rename成hosts文件,由于临时文件的默认权限是600,所以导致hosts文件的权限最后也是600了。
至此,整个的问题的原因已经清楚。hosts权限的错误,导致elasticsearch通过DNS解析域名,又刚好DNS解析报错,没有通过ARP解析域名。
另外从这个事情中也可以看到java解析域名的套路,先/etc/hosts文件,接着是DNS,先远程的DNS后本地的DNS,最后尝试从本地ARP缓存解析,中间有一个过程抛出异常的时候,解析就会失败。
centos6中为什么resolv.conf总是被清空
centos6中为什么resolv.conf总是被清空
最近在机器上装了虚拟机virtualbox,然后安装了centos6.4,安装了免费主机控制面板virtualmin,在本地机器上搭建测试网站。一切都很顺利,网站也运行的很正常。但是第二天再次启动机器时发现无法连接ftp了,现象是超时。于是检查ftp服务端进程,发现进程proftp进程未启动。
找到问题就好办了,输入命令启动就行了,于是输入service proftpd start,却发现启动失败,提示:unable to determine IP address of“hostbus.net”。
于是百度谷歌了一番,发现是proftpd启动失败的原因是虚拟机无法解析主机的IP地址,解决方法是在DNS列表中增加本地回送地址127.0.0.1,表示“xxx.com”域名由本机自己解析。加入方法:
如果是图形界面,可以直接在网络管理里修改,也可以打开文件/etc/resolv.conf,加入下面语句:nameserver 127.0.0.1
如果是文字界面,用vi打开/etc/resolv.conf,加入nameserver 127.0.0.1。注意:nameserver要顶格,前面不要留空格。
这样处理后service proftpd start成功,ftp连接正常了。于是以为问题解决了。
又一次机器重启后,又发现ftp无法连接了,问题现象和上次一模一样。于是检查配置文件/etc/resolv.conf,发现上次的修改被清空了。真是奇怪,明明手动修改好了的,怎么会不见了呢?在virtualmin上折腾了许久也没有找到原因,然后搜索引擎上搜索,发现很多人都遇到了这个问题,不同系统的linux都有这个问题,centos从5.6就有这个问题。在众多的解答中终于找到了原因:
/etc/resolv.conf被清空的原因是/etc/sysconfig/network-scripts/ifcfg-eth0中没有dns server信息,所以重启后系统自动使用/etc/sysconfig/network-scripts/ifcfg-eth0中的设置重新设置/etc/resolv.conf,导致修改/etc/resolv.conf无效。只要将/etc/sysconfig/network-scripts/ifcfg-eth0中加入nameserver信息,/etc/resolv.conf根本不用做修改,系统重启或网络重启后会自动根据ifcfg-eth0设置resolv.conf。
知道了原因,彻底解决的方法就有了:打开ifcfg-eth0,在末尾加上下面语句:下面xxx用dns server的地址代替。
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
改完保存后,重启网络服务:service network restart,然后再打开/etc/resolv.conf,发现里面已经有了nameserver了,不用再手工修改resolv.conf了。resolv.conf总是被清空的问题就解决了。