转载

连不通服务器服务怎么办——理论篇

当你访问不到自己web服务器数据,当你ssh登陆被拒,当你pop3读取邮件失败…一句话,当你连不通你的服务器服务,你该怎么办?本文总结出通用而简单的步骤来指导你.

足够简单的思路

本地机器与远端服务器建立连接,消费服务的整个链路可显而易见划分为三部分,本机到网关部分,互联网部分,服务器网关到服务器部分.当然就大部分情况而言一般都是服务器部分的原因:出于安全问题的考虑,我们总会在服务器端进行访问限制,添加防火墙,设置security forbidden.好吧,无论问题的原因是什么,我们查找问题的步骤如下:

  • 嗅探源:利用最简单的网络工具嗅探问题源为三部分的哪个  (服务器>本地>互联网)
  • 定位:找到源后查看相关防火墙及具体服务的status, configuration && access log等

注意:本文中问题源是指你连接服务数据包终止断掉的地方,而非最后采取措施解决问题的一方

来嗅探问题源吧

从log中挖掘信息

当我们的某项服务不能访问时,我们做的第一件事是什么?看log!不会看log的程序员不是好ops.Log中往往直接了当的报告问题所在,结合具体这项服务的相关知识积累能帮你更好的定位问题源,甚至一下子找到.

举例说

1.当你在命令行中访问某万维网资源时,不能正常得到结果而返回了403错误,返回的状态码就可以看作服务在客户端给你的log,利用http协议基础你便知道问题源为服务器端,是服务器程序将我们的请求出于安全考虑而禁止,我们便可以进行第二步,登陆服务器查看相关配置寻找具体原因.

2.当你远程安全登陆某主机时被拒,如果你熟悉ssh建立通信的过程便可以用 -vvv 来查看ssh服务连接时的详细log,从而判断出是最初的tcp建立连接失败还是交换key失败,还是身份验证通过但仍被服务器拒绝…,从而定位问题源.

能从服务在客户端提供的log直接找到问题当然是最高效的方法,但有时你可能仅仅找到 Connection refused 的log或仍让你困惑不已的信息,情参考和使用下列工具.

先来ping一下

PING(Packet Internet Groper)是一款基于ICMP的网络测试工具,用来测试两个主机间的网络连通性.这款工具是应用层直接使用了网络层协议,而没有通过运输层的TCP或UDP,因此不能做端口测试.这是一个最基本的工具,几乎人人都会用,我们先用此命令来ping一下服务器:

命令行命令为: ping ip (domain name)

  • ping通:可以证明远程服务器对本地主机处于网络开放状态且两机之间的网络通畅,服务连接不通的问题将更可能集中于权限,端口被禁或端口,密码错误等
  • ping不通:不能证明服务器网络不可达,因为有可能只是服务器禁止接收响应ICMP包.此时本机可以通过各种简单的方法(如打开浏览器,ping一个已知启用了ICMP的网站等)来测试本机与Internet网络连接是否正常.

经历完此步后可以确定因为网络连通性而导致问题的问题源或证明网络连通.

telnet测试服务端口是否开放

PING主要对主机进行测试,涉及不到端口,而有时可能是服务具体端口受限,此时我们就可以用telnet来测试一下服务具体端口是否开放可用.

命令为: telnet address port

  • telnet成功,证明服务器,防火墙及相关服务端口对本机开放,问题源基本定位于服务器,问题更倾向于与服务的具体业务与配置有关,如服务本身的安全限制,消费服务的数据不合法等.
  • 若ping成功,telnet失败,则是端口出问题,可能被防火墙禁止.此时,问题源可能是服务器的防火墙入口,也有可能是本机或本机所在局域网的NAT的防火墙的出口,请根据自己的实际情况优先查看一端的防火墙状态,其次另一端.

通过telnet具体端口测试后,可以确定问题是否为两个主机部分的防火墙引起,也可以基本定位问题源.

traceroute观察包流动

相比上面两个工具,此工具能让你亲眼观察数据包的流动状况,traceroute可以列出你访问某一服务器的数据包传递的路由状况,timeout时显示***.可以通过该命令查看数据包是否通过本地网关及整个传递过程的信息.命令为: traceroute address

此命令可以辅助telnet更好的定位是服务器端防火墙还是本地防火墙阻挡了数据包.

来定位具体问题

查看主机防火墙

当你定位问题源是服务器或本机的防火墙时,那么就可以登陆主机查看和修改防火墙配置了.

查看服务log

当你定位到时服务器端具体服务的安全设置或业务导致的问题时则请登陆服务器查看相关服务的log.Linux的主机的log文件目录一般为 /var/log/ 下.比如说,如果你请求的是万维网服务,服务器程序为apache,则可以查看 /var/log/apache/error.log 或者 /var/log/apache/access.log .

查看服务配置

最后可以具体查看服务相关配置,因为只有找到具体的问题点才能恰当的解决问题.配置文件则一般在各自服务的目录下查找,比如说ssh的配置文件为 /etc/ssh/sshd_config

最后说两句

本篇为查找和解决问题的理论篇,即将一些基本而简单的探测工具和方法以一个清晰的脉络来应用,如感兴趣请关注下一文——实践篇,将会结合理论介绍一些”栗子”.总之,去做一名ops或dev-ops,对分析问题时获得的信息敏感度很重要,拿到问题时心中能有百种怀疑只待一一验证,这应该是最让人感到踏实的事情了.

原文  http://yanminx.com/blog/when-you-can-not-connect-to-your-server-service-theory/
正文到此结束
Loading...