我遇到了一个奇怪的 LAN 连接问题,似乎无法追踪。首先是设置,稍微简化了一下:两台计算机,都通过 wifi 连接到路由器,路由器又连接到外部互联网(ISP 提供的 IP 地址,假设为 64.xyz,内部地址为 192.168.0.1)。其中一台运行 Ubuntu 18.04 的计算机(计算机 A,192.168.0.100)正在运行 sshd 服务器,我想从另一台计算机(计算机 B,192.168.0.103)连接到该服务器。这台计算机可能是手机、Windows 笔记本电脑……无线路由器在端口 22 上有来自外部的传入连接,转发到计算机 A,即 Ubuntu sshd 服务器。
我似乎无法直接从计算机 B ssh 到计算机 A。我只是收到一条消息:
Connecting to 192.168.0.100 port 22
什么都没发生。有趣的是,在 computerA 上运行 netstat 显示有人尝试连接:
tcp 0 0 192.168.0.100:22 192.168.0.103:58652 SYN_RECV
但最终这还是会超时。
另一方面,如果我从计算机 B 通过 ssh 连接到路由器的外部 IP 地址 64.xyz,则连接将转发到计算机 A(应该如此)并且立即建立 ssh 会话。
一些相关的附加信息:我无法从 computerB ping Ubuntu 服务器,但 traceroute 确实有效:
# traceroute 192.168.0.100
traceroute to 192.168.0.100 (192.168.0.100), 30 hops max, 46 byte packets
1 192.168.0.100 (192.168.0.100) 14.309 ms 3.068 ms 2.777 ms
从 Ubuntu 服务器,我可以 ping 计算机 B,traceroute 同样显示 1 跳。从物理上讲,路由应该通过 wifi 路由器,但其地址 (192.168.0.1) 没有显示。所以我不认为问题出在路由器上(我可能错了……计算机 B 使用 5GHz 链路,计算机 A 使用 2.4GHz 链路。不过,当计算机 B 是 Windows 笔记本电脑时,它也在 2.4GHz 上)。
Ubuntu 服务器上的 Iptables 完全是空的。
计算机 B 和计算机 A 之间很少会建立 ssh 连接。不过,我无法重现这种情况。
我怀疑 Ubuntu 服务器上的某些东西配置不正确,导致拒绝来自本地 192.168.0.0/24 网络的连接。我不知道如何进一步诊断这个问题……任何建议都将不胜感激!
lsof -i 显示 sshd 确实正在监听:
sshd 1316 root 3u IPv4 58798457 0t0 TCP *:ssh (LISTEN)
sshd 1316 root 4u IPv6 58798461 0t0 TCP *:ssh (LISTEN)
不确定我还应该寻找什么...正如我提到的,来自我的 LAN 外部的连接没有问题。
根本没有防火墙:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination