为什么通过远程 IP 的 SSH 比本地 IP 更快?

Gra*_*ant 3 linux ssh linux-mint

我有一台在我家运行的 Linux 服务器,DynDNS URL 设置指向我的公共 IP 地址。

我注意到的一件事是使用远程地址,例如url.dyn-dns.tv或 我的公共 IP 与我的本地192.168.xx.xx.

任何人都知道为什么会这样?

Red*_*ick 8

tl;dr 修复服务器上的 DNS 解析器配置。(解决方法是关闭 SSHD 中的反向查找,但最好修复损坏的内容)


原答案

任何人都知道为什么会这样?

不是真的,但这里有一个轶事可能会有所帮助:

过去,使用不同的协议,当建立连接需要异常长的时间时,我发现一个原因是 DNS 超时,因为服务器尝试查找 IP 地址的名称,以便它可以在其日志中记录客户端名称. 如果本地 DNS 服务无法正确了解您的客户端 IP 地址并且未正确配置 DNS,则服务器可能会等待很长时间以等待 DNS 超时。

寻找这种效果的方法是运行网络嗅探器,最初在客户端同时也在服务器上运行,然后您可能会看到一些与连接相关的网络流量,这需要很长时间才能获得响应,或者没有响应(您可能会看到重试)

tcpdump 和wireshark 都不错。


更新 1

在连接延迟的客户端

  • 找到客户端的IP地址

    • 在 Windows 上,打开命令提示符窗口并键入 ipconfig
    • 在 Linux 上,打开一个终端窗口并输入 ifconfig -a
  • 可选择确认您可以快速查找服务器的 IP 地址

    • 在窗户上 nslookup servername
    • 在 Linux 上,dig servername或者host servername如果您没有 dig。

在服务器

  • 查找客户名称
    • 签入/etc/resolv.conf第一个 DNS 名称服务器的地址
    • typedig -x 192.168.n.m @nameserverhost 192.168.n.m server其中 192.168.nm 由客户端的实际 IP 地址替换,名称服务器是名称服务器的 IP 地址。
    • 对中列出的其他名称服务器重复 /etc/resolv.conf

服务器应该以毫秒为单位得到响应。如果 DNS 配置损坏,将需要几秒钟的时间才能超时。

好配置

# time host 192.168.3.4
Host 4.3.168.192.in-addr.arpa. not found: 3(NXDOMAIN)

real    0m0.130s
user    0m0.000s
sys     0m0.020s
Run Code Online (Sandbox Code Playgroud)

错误的配置

# echo nameserver 1.2.3.4 > /etc/resolv.conf
# time host 192.168.3.4
;; connection timed out; no servers could be reached

real    0m10.010s
user    0m0.000s
sys     0m0.010s
Run Code Online (Sandbox Code Playgroud)

注意 10 秒的延迟。这意味着任何想要在其日志中包含客户端名称的 SSH 服务都需要 10 秒才能建立 SSH 连接。


更新 2

事实证明,这个 Q 是(可能)完全重复为什么当我通过 SSH 连接到我的 Ubuntu 9.05 服务器时“密码”提示会永远持续?


解决方案

修复服务器上的 DNS 解析器配置。