近期在项目过程中出现了Linux下很多服务远程连接慢的问题,连接延迟的时间在10秒左右,主要体现在SSH,MySQL,Zookeeper,Jetty等服务连接慢,一旦连接成功后,其他操作不受影响。

解决过程

我通过对网络链路,交换机配置,操作系统网络配置等方面进行查看,均没有发现异常问题,SCP跨主机传输文件,主要是在链接时耗时长,而一旦SSH链接建立之后,传输速度基本能够达到带宽最高速度。

最后突然想起以前遇到过MySQL连接慢时,通过配置skip-name-resolve就可以解决。于是首先在MySQL配置文件my.cnf中[mysqld]下添加skip-name-resolve,重启MySQL后问题解决。于是查看/etc/resolv.conf文件,文件中填写的nameserver对应的是8.8.8.8,但是当前服务器是部署在内网中,无法访问外部DNS。注释nameserver之后,重启所有相关服务,比如sshd,mysqld,zookeeper,jetty等服务,原有连接缓慢问题全部解决。

原理反思

DNS通常用来解析域名对应的主机IP地址,这就是通常我们所了解的正向解析。而反向解析则是通过ip查找域名,DNS反向解析用来屏蔽非法的IP访问请求;常见于邮件屏蔽系统,而apache,ssh,mysql等服务器端程序也会默认携带。
例如:邮件头包含域名和邮箱服务器的IP地址,一般邮件系统会检测发送来的域名是否合法(比对黑白名单),如果合法则接收该邮件,不合法则丢弃;对于自架邮件系统专门发送垃圾邮件的人,为了能逃避目标邮件系统的审核,此时可以通过将自己的邮件头域名篡改为常用的如Gmail邮件域名来逃脱检查。大量动态IP的非法请求催生了DNS反向解析技术的发展。

SSH中的DNS反向解析

SSH服务中的反向解析同样的也是为了通过审查请求来的IP和其IP存放在DNS服务器上面的域名是否能对应起来,来提高安全性。

但由于反向解析的存在,每个IP请求都会消耗一定时间来审查其合法性。对于局域网内服务器群、不直接连接外网的服务器或者已知访问的IP都是合法的地址等情况,其审查显得多余且长时间的查询会极大的影响SSH连接速度。

以下通过关闭SSH反向解析服务和在hosts文件中配置可信的访问地址来解决该问题。

方法1:

### 1. 备份sshd配置文件
cp /etc/ssh/sshd_config
 /etc/ssh/sshd_config
.bak.20150323.UseDNSYes2No
### 2. 修改配置文件,取消sshd服务的dns反向解析
vim /etc/ssh/sshd_config
### 3. 找到选项UseDNS ,取消注释,改为
UseDNS no
### 4. 重启sshd服务
/etc/init.d/sshd  restart

方法2

### 1. 备份hosts文件
cp /etc/hosts /etc/hosts.bak.20150323.addTrustedIPandName
### 2. 修改hosts文件
vim /etc/hosts
### 3. 增加可信的IP及其服务名,示例IP为10.0.0.1,名称为hadoop
10.0.0.1  hadoop

MySQL中的DNS反向解析

MySQL也提供参数配置来关闭DNS反向解析。详细操作如下:

### 1.编辑my.cnf,添加skip-name-resolve
vi /etc/my.cnf
在[mysqld]下添加skip-name-resolve
### 2.重启MySQL
service mysqld restart

关闭DNS反向解析

在私网中,往往没有DNS服务器部署,此时我们可以通过关闭dns nameserver来实现关闭DNS反向解析。

### 1.编辑/etc/resolv.conf
注释掉所有内容,或者清空该文件。
### 2.重启相关服务

参考文档

  • http://blog.csdn.net/jackxinxu2100/article/details/8145318
  • http://blog.csdn.net/tianlesoftware/article/details/6103857
  • http://www.linuxidc.com/Linux/2013-01/78749.htm
“DNS反向解析“导致的网络服务连接慢

2 thoughts on ““DNS反向解析“导致的网络服务连接慢

  • 2017年5月4日 at 上午12:45
    Permalink

    拜读,写的很好,我很认同。

    Reply
  • 2017年8月27日 at 下午9:56
    Permalink

    这个我也遇到过,我在国内连接北京的服务器,非常慢。后来突然想到ssh dns的这个问题才恍然大悟。

    Reply

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据