ssh在使用公共接口时工作正常,但在使用私有接口时很慢

我的Linux(UbuntuEEE)到Linux(CentOS)ssh在使用私有接口时需要很长时间才能login(〜15秒),但在使用公共接口时不需要。

我有一个Linux机器充当我的路由器。 因此,它有多个接口(75.xxx.xxx.xxx,192.168.1.1)。 我可以从内部接口(192.168.1.65到.1)ssh进入,但这将需要一段时间。 我可以ssh进入公共广播,它很快(〜1秒)。

我有另一个箱子,我可以ssh进入内部界面,它很快。

iptables被设置为接受立即进入接口的数据包。 sshd的UseDNS通常是打开的; 如果将其closures并重新启动sshd,我会遇到同样的问题。 我通常使用公钥authentication; 我已经做了一个mv ~/.ssh/ ~/ssh/并且在慢慢地问我一个密码。

login后(使用任一界面),速度很快。

ssh客户端版本(通过ssh -v ):OpenSSH_4.7p1 Debian-8ubuntu1.2,OpenSSL 0.9.8g 2007年10月19日
ssh服务器版本(通过rpm -qv openssh_server ):openssh-server-4.3p2-29.el5

 UseDNS no 

在/ etc / ssh / sshd_config中设置并重新启动守护进程,这应该可以做到。

这种问题总是由DNS造成的。 当您login到192.168.1.1接口时,sshd将尝试查找您来自哪个IP地址,而不能。

  1. validation我的声明,通过启动ssh会话到您的路由器。
  2. 在外部接口上启动tcpdump,进行过滤,以便您可以看到端口53上的所有数据包。
  3. 在内部接口上将Ssh插入您的路由器。 tcpdump将显示离开你的路由器的DNS查询,询问任何192.168.1 / 24源地址的主机名。

如果您认为UseDNS已设置为“否”,请再次运行此实验。

我的猜测是,在将UseDNS更改为no后,您将SIGHUP发送给了错误的sshd。

/etc/ssh/sshd_config中反向映射,试图对你的内部IP地址进行rDNS查询。

“VerifyReverseMapping否”

在客户端和服务器上使用strace -p来确定ssh / sshd进程正在等待什么。

不知道可能是什么 – 延迟通常是由DNS反向查找造成的,但是您表示已经将其closures。

strace是Dave提到的一个选项,但是我会尝试在login时启用客户端的详细程度。您可以通过提供-v开关(最多可达3次)来完成此操作,例如:

 ssh -vv [email protected] 

在Alex的推荐下,我运行了一个数据包嗅探器,发现客户端正在做DNS查询。 作为testing的短期解决scheme,我在客户端的/etc/hosts文件中添加了192.168.1.1 servername ,事情进展迅速。