解决办法: https://injustfiveminutes.com/2013/03/13/fixing-ssh-login-long-delay/
ssh时候,服务器端可能需要进行域名解析,这个过程可能会比较慢,抓包如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# tcpdump -i em1 -nns 0 -A port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on em1, link-type EN10MB (Ethernet), capture size 65535 bytes 15:23:53.796964 IP 172.16.158.4.53333 > 172.16.10.4.53: 39340+ PTR? 6.158.16.172.in-addr.arpa. (43) E..G8v@.@......... ..U.5.3.n.............6.158.16.172.in-addr.arpa..... 15:23:53.812602 IP 172.16.10.4.53 > 172.16.158.4.53333: 39340* 1/0/0 PTR rd.i.bbtfax.com. (72) E..d..@.=.=`.. ......5.U.P8..............6.158.16.172.in-addr.arpa..................rd.i.bbtfax.com. 15:23:53.812789 IP 172.16.158.4.35330 > 172.16.10.4.53: 45453+ A? rd.i.bbtfax.com. (33) E..=8w@.@......... ....5.).d.............rd.i.bbtfax.com..... 15:23:53.815068 IP 172.16.10.4.53 > 172.16.158.4.35330: 45453* 1/0/0 A 172.16.158.6 (49) E..M..@.=.=w.. ......5...9.u.............rd.i.bbtfax.com..................... 15:24:15.885444 IP 172.16.158.4.48327 > 172.16.10.4.53: 37753+ A? rd.i.bbtfax.com. (33) E..=8x@.@......... ....5.).d.y...........rd.i.bbtfax.com..... 15:24:15.885454 IP 172.16.158.4.48327 > 172.16.10.4.53: 20854+ AAAA? rd.i.bbtfax.com. (33) E..=8y@.@......... ....5.).dQv...........rd.i.bbtfax.com..... 15:24:15.887635 IP 172.16.10.4.53 > 172.16.158.4.48327: 37753* 1/0/0 A 172.16.158.6 (49) E..M..@.=.=w.. ......5...9...y...........rd.i.bbtfax.com..................... 【这里上下两个数据包时隔5s】 从数据包上来看,dns server是有响应的;但是,仔细看才发现,client问了两个问题,而dns server只回答了一个,难怪 client会等待 问题1: 为什么dns server不回答第二个问题呢?从下面数据包来看,dns server 也不是完全就不能回答 <em>AAAA?</em> 这个问题的 问题2: 既然都超时了,为什么client还敢用相同的端口号发送后续的问题?难道这样是安全的? 15:24:20.889731 IP 172.16.158.4.48327 > 172.16.10.4.53: 37753+ A? rd.i.bbtfax.com. (33) ......@.@.. ....5.).d.y...........rd.i.bbtfax.com..... 15:24:20.891864 IP 172.16.10.4.53 > 172.16.158.4.48327: 37753* 1/0/0 A 172.16.158.6 (49) E..M..@.=.=w.. ......5...9...y...........rd.i.bbtfax.com..................... 15:24:20.891924 IP 172.16.158.4.48327 > 172.16.10.4.53: 20854+ AAAA? rd.i.bbtfax.com. (33) E..=8{@.@......... ....5.).dQv...........rd.i.bbtfax.com..... 15:24:20.909039 IP 172.16.10.4.53 > 172.16.158.4.48327: 20854* 0/0/0 (33) E..=..@.=.=... ......5...)..Qv...........rd.i.bbtfax.com..... 15:24:20.909463 IP 172.16.158.4.48208 > 172.16.10.4.53: 10615+ A? rd.i.bbtfax.com. (33) E..=8|@.@......... ..P.5.).d)w...........rd.i.bbtfax.com..... 15:24:20.911779 IP 172.16.10.4.53 > 172.16.158.4.48208: 10615* 1/0/0 A 172.16.158.6 (49) E..M..@.=.=w.. ......5.P.9.=)w...........rd.i.bbtfax.com..................... 15:24:20.911838 IP 172.16.158.4.48208 > 172.16.10.4.53: 45448+ AAAA? rd.i.bbtfax.com. (33) E..=8}@.@.. ...... ..P.5.).d.............rd.i.bbtfax.com..... |
strace 的部分结果:
查问题的过程:
- 问题定位到: dns查询时,一个请求同时查询A记录和AAAA记录而服务器端只返回一个响应所致
可能是dns不靠谱,也可能是协议定义有缺陷 - 一般来讲,dns查询是有底层的libnss实现的,直接使用host 来查询应该也是相同效果吧? 结果不是
host 查询时发现,A记录和AAAA记录虽然都查询了,但是是两次请求完成的; 看来二者用的库可能不一样 - google search “ sshd dns resolve ipv6” 发现文章: https://injustfiveminutes.com/2013/03/13/fixing-ssh-login-long-delay/
可以通过在/etc/resolve.conf中添加
1<strong>options single-request-reopen</strong>
来使得A和AAAA分作两次请求; 问题解决 - 一般来讲,我们只要使得ssh配置UseDNS no就可以了,但是,我们这里的情况是登录时使用了ldap(通过域名访问)认证,所以,域名解析就避不开了
- 遗留问题: 为什么client一次请求查询A和AAAA时,client不能和server好好配合呢?