我无法让 SSH 正常工作。我使用的是非标准端口 (9876)。我通过使用外部 whatismyip 类型的站点和使用 验证了我服务器的 IP 地址curl ifconfig.me
,结果都一样。
如果我从服务器执行此操作:
ssh -p 9876 localhost
有用。
如果我这样做:
ssh -p 9876 127.0.0.1
它也有效。
但如果我这样做:
ssh -p 9876 143.76.123.94
我收到错误“连接被拒绝”。(请注意,上面给出的示例 IP 是从真实地址更改的。)如果我尝试从不同网络上的远程计算机进行连接,我会收到错误“网络不可访问”,即使我可以从同一台远程计算机对其进行 ping 操作。
我能想到的这种行为的唯一原因是 COMCAST 正在查看数据包内部,发现这是一次入站 SSH 尝试,然后自动冒充拒绝该请求的服务器。这是怎么回事?还有其他解释吗?
补充笔记
请注意,我可以 ping 有问题的地址,所以如果我可以 ping 它,那么它就是“可访问”的,对吗?为什么 ping 可以访问,而 ssh 或 telnet 却无法访问?
答案1
尽管有传言称 COMCAST 通过“状态数据包检查”阻止了入站连接,但我发现我能够从外部连接我的机器,而我最初被我的路由器阻止了,我以为它是桥接器,但实际上它正在运行 NAT。为了方便可能遇到类似问题的人,下面详细介绍了...
我的情况是,我将电缆调制解调器的连接插入了 Airport Express,该 Express 充当连接到运行 SSH 服务器的 Linux 机器的集线器。我原以为 Airport 处于桥接模式(即让所有流量通过),但实际上它处于 NAT 模式,会阻止所有入站流量。
为了解决这个问题,我在机场上做了一个例外。首先,我必须为服务器创建一个专用的 DHCP 过滤器,将服务器的 MAC 地址硬编码为我选择的内部 IP 地址,然后我必须在 NAT 上打开端口 9876(我用于 SSH 的端口)并将其指向我为服务器选择的 IP 地址。之后它就起作用了。