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

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

我家里有一台 Linux 服务器,其中的 DynDNS URL 设置指向我的公共 IP 地址。

我注意到的一件事是使用远程地址(例如url.dyn-dns.tv或我的公共 IP)与本地 IP 相比连接到服务器的速度更快192.168.xx.xx

有人知道为什么会这样吗?

答案1

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 地址替换,nameserver 是名称服务器的 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

错误配置

# 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

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


更新 2

事实证明,这个 Q (可能) 与为什么当我通过 SSH 进入我的 Ubuntu 9.05 服务器时“密码”提示会持续很长时间?


解决方案

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

答案2

我猜你没有运行本地 DNS,因此当 ssh 服务器尝试执行反向 DNS 查找时,它会等待超时。当你连接到外部地址时,你将通过通过 DNS 审核的 IP 地址进行 NAT。

要关闭反向 DNS 查找,您必须编辑 sshd_config 文件并找到“UseDNS”行并将其设置为“no”。(您必须重新启动 sshd 才能使其生效。)或者,您可以为本地子网设置自己的 DNS 服务器。(如果您不想使用 BIND,DNSMasq 是一个很好的轻量级服务器)

答案3

您可以尝试使用最大详细选项调用 ssh:。ssh -v -v -v
可能会提供一些有用的信息。

我能想到的一个解释是,如果你的服务器正在监听 iPv4,但你仍然在本地系统上启用了 iPv6。那么等待时间就是当 ssh 尝试在 iPv6 上访问服务器却无功而返时,然后放弃并尝试 iPv4 并成功。

无论如何,我建议验证哪些网络适配器已启用并禁用无用的网络适配器。

相关内容