可以 telnet 到服务,但不能直接访问服务端口

可以 telnet 到服务,但不能直接访问服务端口

我们在云提供商上运行各种服务。一切通常都运行良好,但偶尔我们会遇到连接到 1 个主机(上面有我们的存储库)的问题。我们无法找到解决连接问题的方法,因此我们在另一家云提供商上完全重建了主机。一切运行良好,但同样的连接问题又出现了。我会尽量清楚地总结一下:

出现连接问题的主机正在运行 Gitlab。我们也多次 ssh 进入该主机。

当我们遇到连接问题时,我们无法访问 ssh、git、https 等。ping 主机工作正常。我可以 telnet 到端口 22,并得到响应:

Connected to xyz.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.1

我可以通过 Telnet 访问主机上的任何端口,并立即收到响应。如果我尝试通过 ssh 连接到同一台主机,则会收到:

ssh -v -v me@xyz   
OpenSSH_7.9p1, LibreSSL 2.7.3
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug2: resolve_canonicalize: hostname xyz is address
debug2: ssh_connect_direct
debug1: Connecting to xyz [xyz] port 22.
debug1: connect to address xyz port 22: Operation timed out
ssh: connect to host xyz port 22: Operation timed out

如果我断开与本地网络的连接,并通过热点连接到互联网,我就能正常访问该主机。这种情况只发生在我们公司网络上的用户身上。

我检查了我们所有的本地路由器/防火墙,没有发现任何问题。然后我从公司防火墙的外部连接到互联网,连接问题立即再次出现。

我已经与我们的云提供商 (Google) 进行了交流,他们没有发现我们的云配置或服务器存在任何问题。我已经与我们的互联网提供商进行了交流,他们也没有发现任何问题。

有人有主意吗?

答案1

这听起来很像我见过的一个问题,即端点防火墙用尽端口。直到你说你连接到防火墙的外部。

当您连接到外部时,您是否有互联网地址,还是仍然是 nat'ed 连接?如果您有一个实际的互联网可路由 IP 地址(不是 10.xxx 或 192.168.xx 地址),那么它一定是您的 ISP(或他们的 ISP)正在过滤的。我怀疑情况并非如此,而且我更怀疑当您连接到防火墙的外部时,您仍然会获得 192.168.xx 或 10.xxx 地址,这意味着您和互联网之间仍然有一个 NAT 设备(这意味着端口耗尽可能是问题所在)。

我建议尝试将数据包嗅探器连接到防火墙的外部,并确认两个方向的数据包。您应该看到数据包离开主机(云)然后返回。如果您看到它返回,但您的客户端没有返回,那么您就知道这是防火墙或内部网络的问题。

如果它离开并且没有回来,那就是 ISP 或云提供商的问题。

如果它没有离开,您还会查看您的网络(防火墙等)。

注意:许多公司,比如 Google(有时),会在您致电时默认回答“不是我们”,因为他们认为如果是他们,那么会有数百名客户遇到此问题。从某种程度上说,他们是对的,但并非总是如此。有时他们遇到的问题只会影响少数人,而其他人不知道如何报告(或拨打电话)。不要只是接受他们的答案,认为这是肯定的。他们也是人,也会犯错(而且没有时间深入挖掘)。

相关内容